全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
为ZTE U970加上TTS输出设置由于种种不可以表述的原因,国行的手机基本都是阉割了TTS输出设置,可能这个设置没多少人在意,所以网上对这个功能也没多少人关注,发了很多帖子无解后决定自力更生,呵呵。这个设置有什么用呢?具体对我来说,我是一个铁杆谷粉,邮件要用Gmail,聊天要用Gtalk,那导航当然要Google Maps了。这里就要用到TTS设置了,不然导航的时候没有语音导航。其他比如阅读器的读书功能,很多也是调用系统的TTS。废话了那么多,下面言归正传,讲述修改过程。第一步,当然是要反编译Settings.apk了,因为TTS设置属于设置里的一部分。用到的工具:apktool。具体命令如下:apktool if Framework-res.apk apktool d Settings.apk反编译后得到Settings文件夹。由于官方包都是odex过的,所以apk里面是没有代码的,只有资源文件,所以我们先找到资源文件res目录,TTS选项是在语言和输入法这个子选项中,所以我们找res/xml下面的language_settings.xml,经过和android源码里的language_settings.xml对比,发现被zte阉掉了tts选项的描述文件,立马将其拷贝粘贴到对应地方。代码太多就不贴了,贴出阉掉的代码: 其中有三项,两位两项我们不关心,只要有第三项就行了。保存,编译回apkapktool b Settings在Settings/dist目录里就出现了Settings.apk文件了。不过这个文件不能直接用来替换,因为这个是没签名的,听说也不能直接随便签名替换,据说这个是系统文件,需要的是共享签名,所以这里需要把apk里面生成的resources.arsc和我们刚才修改的language_settings.xml这两个文件拖回到原来的Settings.apk包里。具体的就是用winrar打开两个apk包,从新的里面拖到老的里面,不过这里有个地方需要注意到是在弹出的对话框里要选择存储,不然这个包就坏了,我第一次就没看到这个。下面就是拷回手机,修改权限xx-,x-,x-。重启手机,点设置-语言与输入法,就出现了,如图:出现了“文字转语音(TTS)输出”,非常激动,点击居然Settings就FC了。这里就要用到android的logcat了,好像可以直接adb logcat,不过我不是黑客,还是喜欢用图形界面,打开sdk里面的ddms.bat,用这个分析点击之后为啥fc了,主要内容如下:07-26 16:44:53.030: E/AndroidRuntime(3487): java.lang.RuntimeException: Unable to start activity ComponentInfocom.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更狠,居然把类也删了,看来不愧是中国本土企业啊,执行力度很强,这里顺便吐槽一下,以后大家不要买zte手机,服务差,rom不稳定,阉割东西倒是很在行。以前的moto一个月不重启都行,这个zte一个星期就要重启。又扯远了,我汗。下面第二步就是补上被阉割的类。第二步:添加缺少的TTS相关类。用到smail。模拟器中是有这个选项的,所以模拟器中肯定是有tts相关类的,所以从模拟器中提取Settings.odex,和手机中提取Settings.odex,分别进行反编译。如下命令:java -jar baksmali-1.3.3.jar-a 15-x Settings.odex在out文件夹中会生成对应的各个smali文件,简单对比就会发现少了tts,和nfc两个文件夹,不过nfc这个手机没硬件支持,我们只回复tts,把模拟器中的tts文件夹拷贝到手机反编译的out文件夹中,并执行如下命令:java -jar smali-1.3.3.jar out/ -o classes.dex将修改后的文件生成classes.dex。目前我还没发现怎么直接生成odex,所以只有曲线救国了,把生成的classes.dex用上一步的办法拷贝到Settings.apk里面,并把这个apk和dexopt-wrapper拷贝到手机的system/bin目录下,并赋予权限XXX X-X X-X。这些权限具体需要不需要我也没仔细研究,反正网上怎么说我就怎么抄来得了。然后手机开启调试,在pc端执行:adb shellsucd system/bindexopt-wrapper Settings.apk Settings.odex这样就生成了含有TTS相关类的odex文件,将其拷贝到system/app并赋予权限,并重启。又一次小激动啊,信心满满,不过又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);结合整个onCreate的代码:123 Override124 public void onCreate(Bundle savedInstanceState) 125 super.onCreate(savedInstanceState);126 addPreferencesFromResource(R.xml.tts_settings);127128 getActivity().setVolumeControlStream(TextToSpeech.Engine.DEFAULT_STREAM);129130 mPlayExample = findPreference(KEY_PLAY_EXAMPLE);131 mPlayExample.setOnPreferenceClickListener(this);132133 mEnginePreferenceCategory = (PreferenceCategory) findPreference(134 KEY_ENGINE_PREFERENCE_SECTION);135 mDefaultRatePref = (ListPreference) findPreference(KEY_DEFAULT_RATE);136137 mTts = new TextToSpeech(getActivity().getApplicationContext(), mInitListener);138 mEnginesHelper = new TtsEngines(getActivity().getApplicationContext();139140 initSettings();141 怀疑是没找到R.xml.tts_settings文件或者AndroidManifest.xml缺了啥东东,所以把反编译的资源文件对比,眼都看花了,也没发现有啥区别。黔驴技穷了,能想到的办法都想了,还是不行。各大论坛求助除了帮顶的,没人理。今天终于gfan论坛有人回复了,给了我动力继续研究。期间还gtalk了安智网做rom的高手G大,搞droidbox的kun yang。昨天突击看了smali的语法,还看到miui论坛里写的关于移植到帖子(具体的会在下面参考列表中写),看到资源翻译成对应十六进整数的帖子,茅塞顿开。第三步,调整资源编号看源码是第126行引用了R.xml.tts_settings,找到smali文件,搜索.line 126,代码如下:.line 126 const v0, 0x7f05002dinvoke-virtual p0, v0, Lcom/android/settings/tts/TextToSpeechSettings;-addPreferencesFromResource(I)V而public.xml里面tts_settings对应的数字是:将smali中的0x7f05002d替换为0x7f050036。还有其他很多需要替换,这个就需要耐心慢慢替换了,期间搞到手机上有fc了,继续跟进logcat找还有啥资源没有对应对。最好,终于大功告成,贴图庆贺一下。为了这个界面忙了好多天啊。鸣谢:android apk反编译和odex转dex: /wanqieddy/archive/2012/03/01/2375424.html Apk生成odex的方法,自己成功的经验 - 董芝全:/dongzhiquan/archive/2011/08/18/2143924.htmlMIUI ROM适配之旅: /thread-402302-1-1.html安卓越科技的deng9songhttp:/bbs.gfan.
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- (2026年)医院疫情防控人员培训计划
- (2026年)高考化学模拟试卷(含答案解析)
- 木地板表面造型处理工安全文化评优考核试卷含答案
- 雷管制造工安全综合模拟考核试卷含答案
- 地理信息处理员诚信品质水平考核试卷含答案
- 白酒配酒工岗前基础应用考核试卷含答案
- 会展服务师安全素养模拟考核试卷含答案
- 跨境电子商务师基础验收知识考核试卷含答案
- 变压器试验工岗后模拟考核试卷含答案
- 遗体接运工岗前责任意识考核试卷含答案
- 2026年广西北部湾国际港务集团有限公司人员招聘笔试参考试题及详细答案解析
- 成人吞咽障碍患者口服给药护理
- 高级经济师房地产与建筑经济真题及答案
- 军士专升本试题及答案
- 2026年高考全国二卷理科综合真题试卷(+答案)
- T∕CDSIA 0003-2025 家具行业数字化建设指南
- 医院IT信息科招聘笔试题及答案
- 恒力集团考核制度
- 药物性肾损害预防与监测方案
- 胸腔镜下肺大泡切除术后护理查房
- 急诊取栓流程
评论
0/150
提交评论