Android原生PinyinIME的Subtype相关调查(手头没有源码,明天补上...)
2013-12-24 19:58
225 查看
最近在处理Android源码中Google PinyinIME的一些问题。在Android4.4上遇到了一个比较奇怪的问题。
CTS测试无法通过,因为Android4.4 的CTS测试项中增加了一个对系统输入法SubtypeCount的检测断言,如果getSubtypeCount的值小于1(即系统输入法支持的subtype为0),则CTS测试失败。而Google PinyinIME的subtypeCount就是为0。
一直都在处理APP侧的问题,对输入法FW端的源码也不熟悉。刚拿到这个问题,想当然的认为肯定是FW端的问题。一番排查无果。
其实Google PinyinIME的subtypeCount一直都为0,只是4.4之前没有对subtype有严格的检测罢了。这是为什么呢?
最终通过查找跟踪源码,找到了原因。在FW端的InputMethodInfo.java中,我们看到了subtype是如何解析并添加subtype list中的,getSubtypeCount其实就是返回这个list的size()。
1) 我们看到解析过程都是一个资源文件路径: com.android.internal.R.
这个资源路径从哪可以找到呢? 直接查找FW肯定是找不到的。
2)我们找到了它在out下的对应文件:out/target/common/R/com/android/internal/R.java
3)然后通过查看2)中文件的内容。我们发现,其实InputMethodInfo.java中com.android.internal.R.之后的名称,对应的都是另外一个名称。然后在FW下查找这个名称。我们发现它其实对应的是:
终于找到了!
查看attrs.xml文件的内容,我们发现其中的InputMethod_Subtype下边定义了一些字段。
查找这些字段就会发现,它们其实是在各个输入法app端的res/xml/method.xml中定义的。
4)于是你就会发现,PinyinIME的res/xml/method.xml并没有定义subtype的值对。而其它系统输入法都有。
仿照别的系统输入法的写法,加上。问题解决。
CTS测试无法通过,因为Android4.4 的CTS测试项中增加了一个对系统输入法SubtypeCount的检测断言,如果getSubtypeCount的值小于1(即系统输入法支持的subtype为0),则CTS测试失败。而Google PinyinIME的subtypeCount就是为0。
一直都在处理APP侧的问题,对输入法FW端的源码也不熟悉。刚拿到这个问题,想当然的认为肯定是FW端的问题。一番排查无果。
其实Google PinyinIME的subtypeCount一直都为0,只是4.4之前没有对subtype有严格的检测罢了。这是为什么呢?
最终通过查找跟踪源码,找到了原因。在FW端的InputMethodInfo.java中,我们看到了subtype是如何解析并添加subtype list中的,getSubtypeCount其实就是返回这个list的size()。
1) 我们看到解析过程都是一个资源文件路径: com.android.internal.R.
这个资源路径从哪可以找到呢? 直接查找FW肯定是找不到的。
2)我们找到了它在out下的对应文件:out/target/common/R/com/android/internal/R.java
3)然后通过查看2)中文件的内容。我们发现,其实InputMethodInfo.java中com.android.internal.R.之后的名称,对应的都是另外一个名称。然后在FW下查找这个名称。我们发现它其实对应的是:
frameworks/base/core/res/res/values/attrs.xml
终于找到了!
查看attrs.xml文件的内容,我们发现其中的InputMethod_Subtype下边定义了一些字段。
查找这些字段就会发现,它们其实是在各个输入法app端的res/xml/method.xml中定义的。
4)于是你就会发现,PinyinIME的res/xml/method.xml并没有定义subtype的值对。而其它系统输入法都有。
仿照别的系统输入法的写法,加上。问题解决。
相关文章推荐
- Mac系统下Android生成keystore
- 【android,15】aidl
- 【android,14】14.为应用程序多个activity的应用和数据的传输
- android idle和suspend的区别代码
- 获取Android设备唯一标识码
- android源码编译快捷命令
- 【android,12】12.handler 与message机制更改界面信息
- 【android ,11】11.android多线程断点下载
- 【android,10】10.调用web服务获取手机号码归属地
- android安全以及root利用的漏洞
- android视图绘制处理
- 【Android Developers Training】 43. 序言:管理音频播放
- android debug log (android调试日志)
- Android Draw 9-patch
- ios为什么比android流畅
- Android JSON数据解析
- 我的android 第32天 - 广播接收者--BroadcastReceiver(二)
- android menu的使用
- Android静默安装和卸载APK
- Android学习一