下面的例子是以WQY-CM637-XT720中Phone.apk为例,加入来电归属地功能的。
首先说明的是,此教程为高级教程,像如何搭建编译环境、如何反编译、如何回编译、如何进行系统签名、使用哪些工具等,由于本教程已经很长了,因而就不做说明了,本教程适合高手操作,小白建议路过,但其中的技巧、关键注意事项等仍然值得学习。
另外需要说明的,本教程中使用了系统原有变量,因而需要对apk框架结构、Dalvik代码、Java源代码相当熟悉,才能理解各步的含义,许多步骤所写代码实际上是结合原有代码的基础上编写的,不同Phone.apk中代码不同,上下文代码不能直接复制过去。
第三还说明的是,这是系列高级教程,而且是独此一家,为尊重作者WQY88的劳动,如果转载请注明出处,一经发现乱喷乱转,立即删帖并不再发布任何其他高级教程,比如关机菜单快速重启功能实现,比如双向通话录音功能实现,如何解决来电错位,将apk链接动态加入设置,如何高级调试apk,如何添加省电代码,如何添加极速代码,如何用apk即时生成脚本并运行(当然我不准备编写木马,呵呵),如何高级移植其他ROM功能(包括三星、里程碑等其他ROM)等等,将会永无发布之日。
一、向res文件中加入相关布局及变量
思路,先将有来电归属功能的Phone.apk与原生的Phone.apk都反编译,再用Beyond软件进行比对,查找与phoneLocview等关键词有关的项目进行相应的添加操作
1、反编译原生Phone.apk,进入res目录,将其他语言删除(方便编译,如果真的需要以后可以再加入进来)
2、向values\public.xml中添加相关代码
(1)根据id项的最大id值是7f0600a8,于是添加
<public type="id" name="phoneLocview" id="0x7f0600a9" />
(2)根据string最大id是7f0b0203,于是继续添加
<public type="string" name="phoneloc_view" id="0x7f0b0204" />
<public type="string" name="phoneloc_view_sum" id="0x7f0b0205" />
3、向values\string.xml中添加相关代码,直接在最后加上
<string name="phoneloc_view">Chinese phone location</string>
<string name="phoneloc_view_sum">Chinese phone location will be shown on in-call screen</string>
4、向values\ids.xml中添加相关代码,位置没有特殊要求
<item type="id" name="phoneLocview">false</item>
5、向xml\call_feature_setting.xml中添加代码
<CheckBoxPreference android:persistent="false" android:title="@string/phoneloc_view" android:key="china_phoneloc_view" android:summary="@string/phoneloc_view_sum" />
6、向layout\call_card_person_info.xml中添加代码
<TextView android:textAppearance="?android:textAppearanceSmall" android:textSize="18.0sp" android:textColor="?android:textColorSecondary" android:id="@id/phoneLocview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" />
此时,最好回编译一下看有没有差错,如果存在差错,一般是变量缺少或者最大id没有添加正确,最大id之后要连续,而且是16进制,9之后是a,一定要注意。I
首先说明的是,此教程为高级教程,像如何搭建编译环境、如何反编译、如何回编译、如何进行系统签名、使用哪些工具等,由于本教程已经很长了,因而就不做说明了,本教程适合高手操作,小白建议路过,但其中的技巧、关键注意事项等仍然值得学习。
另外需要说明的,本教程中使用了系统原有变量,因而需要对apk框架结构、Dalvik代码、Java源代码相当熟悉,才能理解各步的含义,许多步骤所写代码实际上是结合原有代码的基础上编写的,不同Phone.apk中代码不同,上下文代码不能直接复制过去。
第三还说明的是,这是系列高级教程,而且是独此一家,为尊重作者WQY88的劳动,如果转载请注明出处,一经发现乱喷乱转,立即删帖并不再发布任何其他高级教程,比如关机菜单快速重启功能实现,比如双向通话录音功能实现,如何解决来电错位,将apk链接动态加入设置,如何高级调试apk,如何添加省电代码,如何添加极速代码,如何用apk即时生成脚本并运行(当然我不准备编写木马,呵呵),如何高级移植其他ROM功能(包括三星、里程碑等其他ROM)等等,将会永无发布之日。
一、向res文件中加入相关布局及变量
思路,先将有来电归属功能的Phone.apk与原生的Phone.apk都反编译,再用Beyond软件进行比对,查找与phoneLocview等关键词有关的项目进行相应的添加操作
1、反编译原生Phone.apk,进入res目录,将其他语言删除(方便编译,如果真的需要以后可以再加入进来)
2、向values\public.xml中添加相关代码
(1)根据id项的最大id值是7f0600a8,于是添加
<public type="id" name="phoneLocview" id="0x7f0600a9" />
(2)根据string最大id是7f0b0203,于是继续添加
<public type="string" name="phoneloc_view" id="0x7f0b0204" />
<public type="string" name="phoneloc_view_sum" id="0x7f0b0205" />
3、向values\string.xml中添加相关代码,直接在最后加上
<string name="phoneloc_view">Chinese phone location</string>
<string name="phoneloc_view_sum">Chinese phone location will be shown on in-call screen</string>
4、向values\ids.xml中添加相关代码,位置没有特殊要求
<item type="id" name="phoneLocview">false</item>
5、向xml\call_feature_setting.xml中添加代码
<CheckBoxPreference android:persistent="false" android:title="@string/phoneloc_view" android:key="china_phoneloc_view" android:summary="@string/phoneloc_view_sum" />
6、向layout\call_card_person_info.xml中添加代码
<TextView android:textAppearance="?android:textAppearanceSmall" android:textSize="18.0sp" android:textColor="?android:textColorSecondary" android:id="@id/phoneLocview" android:layout_width="wrap_content" android:layout_height="wrap_content" android:singleLine="true" />
此时,最好回编译一下看有没有差错,如果存在差错,一般是变量缺少或者最大id没有添加正确,最大id之后要连续,而且是16进制,9之后是a,一定要注意。I