为ZTEU970加上TTS输出设置

上传人:宝路 文档编号:23364011 上传时间:2017-12-01 格式:DOCX 页数:5 大小:174KB
返回 下载 相关 举报
为ZTEU970加上TTS输出设置_第1页
第1页 / 共5页
为ZTEU970加上TTS输出设置_第2页
第2页 / 共5页
为ZTEU970加上TTS输出设置_第3页
第3页 / 共5页
为ZTEU970加上TTS输出设置_第4页
第4页 / 共5页
为ZTEU970加上TTS输出设置_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《为ZTEU970加上TTS输出设置》由会员分享,可在线阅读,更多相关《为ZTEU970加上TTS输出设置(5页珍藏版)》请在金锄头文库上搜索。

1、为 ZTE U970 加上 TTS 输出设置由于种种不可以表述的原因,国行的手机基本都是阉割了 TTS 输出设置,可能这个设置没多少人在意,所以网上对这个功能也没多少人关注,发了很多帖子无解后决定自力更生,呵呵。这个设置有什么用呢?具体对我来说,我是一个铁杆谷粉,邮件要用 Gmail,聊天要用 Gtalk,那导航当然要 Google Maps 了。这里就要用到 TTS 设置了,不然导航的时候没有语音导航。其他比如阅读器的读书功能,很多也是调用系统的 TTS。废话了那么多,下面言归正传,讲述修改过程。第一步,当然是要反编译 Settings.apk 了,因为 TTS 设置属于设置里的一部分。用到

2、的工具: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选项的描述文件,立马将其拷贝粘贴到对应地方。代码太多就不贴了,贴出阉掉

3、的代码:其中有三项,两位两项我们不关心,只要有第三项就行了。保存,编译回 apkapktool b Settings在 Settings/dist 目录里就出现了 Settings.apk 文件了。不过这个文件不能直接用来替换,因为这个是没签名的,听说也不能直接随便签名替换,据说这个是系统文件,需要的是共享签名,所以这里需要把apk 里面生成的 resources.arsc 和我们刚才修改的 language_settings.xml 这两个文件拖回到原来的Settings.apk 包里。具体的就是用 winrar 打开两个 apk 包,从新的里面拖到老的里面,不过这里有个地方需要注意到是在弹

4、出的对话框里要选择存储,不然这个包就坏了,我第一次就没看到这个。下面就是拷回手机,修改权限 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.RuntimeExceptio

5、n: 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 publ

6、ic上次用到 moto 的手机,他们只是简单的把 xml 文件删了隐藏了,没想到 zte 更狠,居然把类也删了,看来不愧是中国本土企业啊,执行力度很强,这里顺便吐槽一下,以后大家不要买 zte 手机,服务差,rom 不稳定,阉割东西倒是很在行。以前的 moto 一个月不重启都行,这个 zte 一个星期就要重启。又扯远了,我汗。下面第二步就是补上被阉割的类。第二步:添加缺少的 TTS 相关类。用到 smail。模拟器中是有这个选项的,所以模拟器中肯定是有 tts 相关类的,所以从模拟器中提取 Settings.odex,和手机中提取 Settings.odex,分别进行反编译。如下命令:java

7、 -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 用上一步的办法拷贝到 Setting

8、s.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.

9、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(savedInstanceS

10、tate);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)

11、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 initSetting

12、s();141 怀疑是没找到 R.xml.tts_settings 文件或者 AndroidManifest.xml 缺了啥东东,所以把反编译的资源文件对比,眼都看花了,也没发现有啥区别。黔驴技穷了,能想到的办法都想了,还是不行。各大论坛求助除了帮顶的,没人理。今天终于 gfan论坛有人回复了,给了我动力继续研究。期间还 gtalk 了安智网做 rom 的高手 G 大,搞 droidbox 的 kun yang。昨天突击看了 smali 的语法,还看到 miui 论坛里写的关于移植到帖子(具体的会在下面参考列表中写) ,看到资源翻译成对应十六进整数的帖子,茅塞顿开。第三步,调整资源编号看源码是

13、第 126 行引用了 R.xml.tts_settings,找到 smali 文件,搜索.line 126,代码如下:.line 126const 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:http:/ Apk 生成 odex 的方法,自己成功的经验 - 董芝全:http:/ ROM 适配之旅: http:/ deng9songhttp:/ 大:https:/ Yang:https:/ aapt 是从一个论坛中有人无法打包后一个人传的,已失去出处,感谢。感谢各位顶贴的人。并要感谢 ZTE 给我机会学习 Android!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号