<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      為ZTE U970加上TTS輸出設(shè)置

      ZTE U970加上TTS輸出設(shè)置

                                                                                                            shanshengsheng@gmail.com  (歡迎g+,gtalk)

      由于種種不可以表述的原因,國行的手機基本都是閹割了TTS輸出設(shè)置,可能這個設(shè)置沒多少人在意,所以網(wǎng)上對這個功能也沒多少人關(guān)注,發(fā)了很多帖子無解后決定自力更生,呵呵。

      這個設(shè)置有什么用呢?具體對我來說,我是一個鐵桿谷粉,郵件要用Gmail,聊天要用Gtalk,那導(dǎo)航當(dāng)然要Google Maps了。這里就要用到TTS設(shè)置了,不然導(dǎo)航的時候沒有語音導(dǎo)航。其他比如閱讀器的讀書功能,很多也是調(diào)用系統(tǒng)的TTS

      廢話了那么多,下面言歸正傳,講述修改過程。

      第一步,當(dāng)然是要反編譯Settings.apk了,因為TTS設(shè)置屬于設(shè)置里的一部分。用到的工具:apktool

      具體命令如下:

      apktool if Framework-res.apk 

      apktool d Settings.apk

      反編譯后得到Settings文件夾。由于官方包都是odex過的,所以apk里面是沒有代碼的,只有資源文件,所以我們先找到資源文件res目錄,TTS選項是在語言和輸入法這個子選項中,所以我們找res/xml下面的language_settings.xml,經(jīng)過和android源碼里的language_settings.xml對比,發(fā)現(xiàn)被zte閹掉了tts選項的描述文件,立馬將其拷貝粘貼到對應(yīng)地方。

      代碼太多就不貼了,貼出閹掉的代碼:

      <PreferenceCategory android:title="@string/voice_category" android:key="voice_category">

              <ListPreference android:title="@string/recognizer_title" android:key="recognizer" android:dialogTitle="@string/recognizer_title" />

              <PreferenceScreen android:title="@string/recognizer_settings_title" android:key="recognizer_settings" />

              <PreferenceScreen android:title="@string/tts_settings_title" android:key="tts_settings" android:fragment="com.android.settings.tts.TextToSpeechSettings" />

          </PreferenceCategory>

      其中有三項,兩位兩項我們不關(guān)心,只要有第三項就行了。

      保存,編譯回apk

      apktool b Settings

      Settings/dist目錄里就出現(xiàn)了Settings.apk文件了。不過這個文件不能直接用來替換,因為這個是沒簽名的,聽說也不能直接隨便簽名替換,據(jù)說這個是系統(tǒng)文件,需要的是共享簽名,所以這里需要把apk里面生成的resources.arsc和我們剛才修改的language_settings.xml這兩個文件拖回到原來的Settings.apk包里。具體的就是用winrar打開兩個apk包,從新的里面拖到老的里面,不過這里有個地方需要注意到是在彈出的對話框里要選擇存儲,不然這個包就壞了,我第一次就沒看到這個。

      下面就是拷回手機,修改權(quán)限xx-x--x--。重啟手機,點設(shè)置-語言與輸入法,就出現(xiàn)了,如圖:


      出現(xiàn)了“文字轉(zhuǎn)語音(TTS)輸出”,非常激動,點擊居然SettingsFC了。

      這里就要用到androidlogcat了,好像可以直接adb logcat,不過我不是黑客,還是喜歡用圖形界面,打開sdk里面的ddms.bat,用這個分析點擊之后為啥fc了,主要內(nèi)容如下:

      07-26 16:44:53.030: E/AndroidRuntime(3487): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.android.settings/com.android.settings.SubSettings}: android.app.Fragment$InstantiationException: Unable to instantiate fragment com.android.settings.tts.TextToSpeechSettings: make sure class name exists, is public, and has an empty constructor that is public

      上次用到moto的手機,他們只是簡單的把xml文件刪了隱藏了,沒想到zte更狠,居然把類也刪了,看來不愧是中國本土企業(yè)啊,執(zhí)行力度很強,這里順便吐槽一下,以后大家不要買zte手機,服務(wù)差,rom不穩(wěn)定,閹割東西倒是很在行。以前的moto一個月不重啟都行,這個zte一個星期就要重啟。又扯遠了,我汗。下面第二步就是補上被閹割的類。

      第二步:添加缺少的TTS相關(guān)類。用到smail

      模擬器中是有這個選項的,所以模擬器中肯定是有tts相關(guān)類的,所以從模擬器中提取Settings.odex,和手機中提取Settings.odex,分別進行反編譯。如下命令:

      java -jar baksmali-1.3.3.jar -a 15 -x Settings.odex

      out文件夾中會生成對應(yīng)的各個smali文件,簡單對比就會發(fā)現(xiàn)少了tts,和nfc兩個文件夾,不過nfc這個手機沒硬件支持,我們只回復(fù)tts,把模擬器中的tts文件夾拷貝到手機反編譯的out文件夾中,并執(zhí)行如下命令:

       java -jar smali-1.3.3.jar out/ -o classes.dex

      將修改后的文件生成classes.dex

      目前我還沒發(fā)現(xiàn)怎么直接生成odex,所以只有曲線救國了,把生成的classes.dex用上一步的辦法拷貝到Settings.apk里面,并把這個apkdexopt-wrapper拷貝到手機的system/bin目錄下,并賦予權(quán)限XXX X-X X-X。這些權(quán)限具體需要不需要我也沒仔細研究,反正網(wǎng)上怎么說我就怎么抄來得了。然后手機開啟調(diào)試,在pc端執(zhí)行:

      adb shell

      su

      cd system/bin

      dexopt-wrapper Settings.apk Settings.odex

               這樣就生成了含有TTS相關(guān)類的odex文件,將其拷貝到system/app并賦予權(quán)限,并重啟。又一次小激動啊,信心滿滿,不過又fc了,崩潰,呵呵。

               logcat信息如下:

               07-26 19:48:10.890: E/AndroidRuntime(3067):     at com.android.settings.tts.TextToSpeechSettings.onCreate(TextToSpeechSettings.java:131)

      找到源碼查看第131行,代碼如下:

           mPlayExample.setOnPreferenceClickListener(this);

               結(jié)合整個onCreate的代碼:

      123    @Override
      124    public void onCreate(Bundle savedInstanceState) {
      125        super.onCreate(savedInstanceState);
      126        addPreferencesFromResource(R.xml.tts_settings);
      127
      128        getActivity().setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);
      129
      130        mPlayExample = findPreference(KEY_PLAY_EXAMPLE);
      131        mPlayExample.setOnPreferenceClickListener(this);
      132
      133        mEnginePreferenceCategory = (PreferenceCategory) findPreference(
      134                KEY_ENGINE_PREFERENCE_SECTION);
      135        mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE);
      136
      137        mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener);
      138        mEnginesHelper = new TtsEngines(getActivity().getApplicationContext());
      139
      140        initSettings();
      141    }

               懷疑是沒找到R.xml.tts_settings文件或者AndroidManifest.xml缺了啥東東,所以把反編譯的資源文件對比,眼都看花了,也沒發(fā)現(xiàn)有啥區(qū)別。

               黔驢技窮了,能想到的辦法都想了,還是不行。各大論壇求助除了幫頂?shù)模瑳]人理。今天終于gfan論壇有人回復(fù)了,給了我動力繼續(xù)研究。期間還gtalk了安智網(wǎng)做rom的高手G大,搞droidboxkun yang。昨天突擊看了smali的語法,還看到miui論壇里寫的關(guān)于移植到帖子(具體的會在下面參考列表中寫),看到資源翻譯成對應(yīng)十六進整數(shù)的帖子,茅塞頓開。

               第三步,調(diào)整資源編號

               看源碼是第126行引用了R.xml.tts_settings,找到smali文件,搜索.line 126,代碼如下:

      .line 126

          const v0, 0x7f05002d

       

      invoke-virtual {p0, v0}, Lcom/android/settings/tts/TextToSpeechSettings;->addPreferencesFromResource(I)V

       

      public.xml里面tts_settings對應(yīng)的數(shù)字是:

      <public type="xml" name="tts_settings" id="0x7f050036" />

       

      smali中的0x7f05002d替換為0x7f050036

      還有其他很多需要替換,這個就需要耐心慢慢替換了,期間搞到手機上有fc了,繼續(xù)跟進logcat找還有啥資源沒有對應(yīng)對。最好,終于大功告成,貼圖慶賀一下。


      為了這個界面忙了好多天啊。

      鳴謝:

               android apk反編譯和odex轉(zhuǎn)dex:

             http://www.rzrgm.cn/wanqieddy/archive/2012/03/01/2375424.html

          Apk生成odex的方法,自己成功的經(jīng)驗 - 董芝全:

             http://www.rzrgm.cn/dongzhiquan/archive/2011/08/18/2143924.html

      MIUI ROM適配之旅: 

      http://www.miui.com/thread-402302-1-1.html

      安卓越科技deng9song

      http://bbs.gfan.com/android-4709421-1-1.html

      G大:https://plus.google.com/u/0/111829074553801826123/about

      Kun Yanghttps://plus.google.com/u/0/109637943394058791672/about

      其中aapt是從一個論壇中有人無法打包后一個人傳的,已失去出處,感謝。

      感謝各位頂貼的人。

              并要感謝ZTE給我機會學(xué)習(xí)Android

      提供我基于B04版本修改的文件,替換system/app里面的文件并修改權(quán)限為xx-x--x-- 

      /Files/sss/settings.rar 

      posted @ 2012-08-02 18:12  傻樣精英  閱讀(4439)  評論(8)    收藏  舉報
      主站蜘蛛池模板: 国产成人无码A区在线观看视频| 99久久99久久精品国产片| 国产精品一区在线蜜臀| 亚洲国产色婷婷久久99精品91| 久久亚洲2019中文字幕| 国产丝袜视频一区二区三区| 国产午夜精品理论大片| 少妇又爽又刺激视频| 久久av高潮av喷水av无码| 国产超碰无码最新上传| 麻豆精品一区二区三区蜜臀| 久久这里只有精品免费首页| 亚洲精品韩国一区二区| 国产乱码精品一区二区三| 成人亚欧欧美激情在线观看| 亚洲精品国精品久久99热| 狠狠色丁香婷婷综合久久来来去| 国产午夜亚洲精品国产成人| 国产95在线 | 亚洲| 成人av天堂网在线观看| 亚洲精品视频一二三四区| 精品久久精品午夜精品久久| 久久99九九精品久久久久蜜桃 | 国产欧美在线手机视频| 国产激情精品一区二区三区| 国产精品久久一区二区三区| 精品无码国产自产拍在线观看蜜| 激情综合网激情综合网五月| 日韩国产av一区二区三区精品| 韩国午夜理伦三级| 天堂av色综合久久天堂| 久久婷婷大香萑太香蕉av人 | 水蜜桃视频在线观看免费18| 亚洲av一区二区在线看| 精品在免费线中文字幕久久| 天堂va蜜桃一区二区三区| 国产又色又爽又黄的在线观看 | 亚洲小说乱欧美另类| 亚洲www永久成人网站| 国产成人亚洲综合91精品| 国产97色在线 | 免费|