2024年2月29日发(作者:童孤晴)
ColorOS适配教程
更改记录
版本
V0.1
更改日期
2014-03-13
创建
更改内容 修订人
Circle Lee
1
目 录
1
PatchRom使用介绍 ...................................................... 3
1.1
选择合适的ROM包 ................................................. 3
1.2
使用PatchRom .................................................... 3
1.3
修改 .................................................... 4
1.4
修改 .................................................. 6
1.5
刷机 ............................................................. 6
2
移植介绍 .............................................................. 7
2.1
移植详解 ......................................................... 7
2.2
工具介绍 ......................................................... 9
2.3
移植ColorOS Framework ........................................... 9
2.4
移植ColorOS App ................................................ 10
2.5
相机、相册问题 .................................................. 12
3
注意事项 ............................................................. 12
2
1 PatchRom使用介绍
1.1 选择合适的ROM包
市面上的手机都有着众多的ROM,我们应该如何选择一个合适的ROM包作为基础包呢?
目前提供的两套ColorOS分别基于4.2 Google源码和MTK6589平台开发,第三方机型4.2的原厂ROM 版本都是合适的。
原厂ROM版本虽然稳定性高,但是通常情况下原厂都会对自己的ROM进行大规模的修改。对于开发者而言,适配难度较大。因此开发者可以选择更接近Google源码的CM或者AOKP的包作为底包。当然,所选择的ROM包功能要尽量完善,稳定性尽量的高。
1.2 使用PatchRom
ColorOS基于不同平台发布两款不同的PatchRom脚本:color_2.0_patchrom_for_
4.2_[版本号].zip和color_2.0_patchrom_for_mtk4.2_[版本号].zip。
color_2.0_patchrom_for_4.2_[版本号].zip基于AOSP开发,适用于非MTK平台。color_2.0_patchrom_for_mtk4.2_[版本号].zip基于MTK 6589平台开发,适用于MTK
6589、6572、6582平台。MTK 6592平台代码差异较大,用该PatchRom适配难度大,目前暂不支持。
build: 该目录存放ColorOS特色APK,资源文件,库文件,smali代码以及使用到的工具。
tools: 该目录存放一些工具和脚本,在订制ROM和编译过程中需要使用这些工具和脚本。
device: 第三方ROM包放在该目录下。执行完脚本会打包生成一个第三方订制的ColorOS ROM包。
PatchRom使用步骤:
1.将升级包命名为放在device目录下;
2.在当前目录执行". build/";
3
3."cd device;make firstpatch",根据device目录下的temp/reject文件,在device/smali路径下修改插桩失败文件;
4.对于非MTK平台机器,如果smali/文件夹太大会导致打包失败,需要进行手动分包;
5.在device目录下执行"make fullota",在device目录下生成就是生成的color升级包。
注意事项:
1.修改,默认打开USB调试,加载。
2.对于非MTK平台机器,当第三方ROM包包含两个时(例如ROM包包含和情况),需要修改device/makefile里的两个变量:
ORGIN_SECOND_FRAMEWORK_NAME: 填入欲编译机器第二个framework文件名;
COLOR_FRAMEWORK_JARS: 填入欲编译机器的framework文件,主要看是否有第二个framework。
3.对于非MTK平台机器,如果需要分包,请在smali文件夹下新建格式的文件夹(例如:),并手动进行分包;
4."device/custom-update":定制的文件夹,make fullota时会直接覆盖过去,所以文件夹结构需要和升级包的保持一致,里面放一些原版不可删除的system/app/下面的apk或者自己新增或修改的一些文件;
5.如果获取到的升级包是odex的,需要先使用deodex工具合并,默认使用apilevel15
合并命令如下:
如果执行出错,请尝试指定apilevel值,如下:
-a 17
1.3 修改
内核root 的关键是根文件系统中文件的两个属性和able 的值。根文件系统和内核一起放在boot分区中,如果我们能够修改boot分区中的这个文件,那么我们就可以自己root 内核了。
4
一般来说某个机型的完整刷机包下有一个 文件,该文件就是boot分区的镜像文件,安装刷机包时,会使用该文件刷写boot分区。Google给 文件定义了一个标准的格式,如果遵从这个标准格式,我们可以用下面的办法来修改它,但是如果不遵从,需要逛论坛详细的了解如何修改boot分区。
我们在patchrom 目录下,给定一个,输入命令解压:
tools/bootimgtools/split_
解压后会看到一个文件,该文件即是根文件系统的压缩包。还有一个-kernel 文件,该文件即是Linux 内核。
创建一个新的名叫ramdisk的目录,用于存放ramdisk盘中的文件。然后,提取出ramdisk文件。命令如下:
mkdir ramdisk
cd ramdisk
gzip -dc ../ | cpio –i
ramdisk目录即为手机启动后的根文件系统目录,用任何编辑器修改文件和文件。
修改和able的值为:
=0
able=1
修改导入。如果对进行了手动分包,此处也需要导入。
export BOOTCLASSPATH
/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/
修改完成后开始打包
tools/bootimgtools/mkbootfs ramdisk | gzip >
tools/bootimgtools/mkbootimg --kernel -kernel --ramdisk -o
5
然后,复制到刷机目录中,替换原来的。需要重命名为。
1.4 修改
必须在文件中按照要求进行相应的修改。修改版本号,添加作者名和渠道。为了OPPO能够进行统计,以更好的帮助开发者解决问题。
在任意位置添加:
=输入开发者名
l=输入渠道名,个人开发者统一填“OPPO”
修改版本号:
=ColorOS_机型_开发者_日期
(例如:ColorOS_I9500_CircleLee_140312)
1.5 刷机
不同机器刷机步骤略有不同,这里以三星为例:
1、将制作好的zip升级包push到SD卡,通过adb shell命令到sd卡中查看包的大小是否一致保证zip包完整。如果确认无误后关机,进入下一步操作。
2、手机先完全的关机,然后同时按住下音量下键 + HOME键 + 电源键,等待出现英文界面
3、然后再按音量上键,进入界面为绿色机器人,此为刷机模式
4、 用odin刷机工具刷入第三方recovery
5、关机后,同时按住音量上键 + HOME键 + 电源键进入 recovery模式
6、选择―wipe data/factory reset ―和‖wipe cache partition‖恢复一下出厂
7、选择―install zip‖
8、再选―choose zip from sdcard‖
9、选择刚下载的zip刷机包,点确认后,选择Yes
10、刷完后,返回首菜单,选择―reboot system now‖重启手机。
6
2 移植介绍
2.1 移植详解
移植ColorOS过程大致分为五步——确定需要注入的Samli代码,确定注入位置,注入Smali代码,编译Smali代码,调试Smali代码。
总体流程如下图:
Google 4.2原始apk或jar包第三方目标机原始apk或jar包修改源码重新编译反编译apk或jar包Color apk或jar包待注入Smali上下文通过反编译工具和比较工具确定修改的Smali代码通过比较工具确定注入区域待注入的Smali代码待注入的Smali区域根据dalvik虚拟机指令 进行smali代码注入注入后的Smali代码编译、打包注入后的apk或jar包push到第三方手机进行调试完成
1、确定需要注入的Smali代码
首先,确定基线文件——Google源码的apk包或jar包,使用apktool反汇编,生
7
成原始的Smali文件。
其次,修改对应Color 的apk包或jar包的java源代码,使用编译系统重新生成新的apk包或jar包,并用apktool反汇编,生成包含修改后的Smali文件。
最后,使用比较工具(例如BeyondCompare)比较两次Smali文件,即可提取出需要注入的Smali代码。
2、确定注入位置
首先,使用apktool反汇编第三方目标机的apk包或jar包,生成Smali文件。
其次,使用比较工具(例如BeyondCompare)与基线文件进行对比,比较两次Smali文件,确定需要注入Smali位置。
1、 注入代码
首先,将Color的Smali代码注入对应的第三方目标机代码区域。
其次,对注入的Smali代码进行本地修改——修改变量、跳转标号、逻辑判断标号等,使之符合当前的Smali代码实现,完成―嫁接‖工作。当然,如果情况很复杂,需要重写对应的Smali代码或者重构java源代码,来完成最终的代码注入。
2、 编译和调试
1)使用命令可将Smali代码编译成jar包。
apktool b smali/ out/framework/
2)调试方法
命令:
adblogcat | grep dalvikvm
Dalvikvm: 给出调用栈,上下文执行过程。
adblogcat | grep VFY
VFY:会给出Smali代码出错的文件、函数以及错误原因。
3)常见运行错误及分析思路
函数变量列表与声明不同A 调用时传入类型与声明不一致
B 调用时参数个数与声明不一致
函数调用方式不正确
A public和package级别的方法用:invoke-virtual
8
B private级别的方法用: invoke-director
C interface 级别的用: invoke-interface
类接口没有实现
添加父类接口空实现即可。
签名不正确
adb logcat | grep mismatch查看前面错误的package。
资源找不到
A 系统资源apk包签名异常,导致找不到系统资源。
B Smali代码中资源ID错误,导致无法在系统资源找到。
C 资源相关类移植异常,导致资源加载异常。
2.2 工具介绍
apktool 编译和反编译jar包和apk
aapt 重新打包资源
将odex转换为smali
将jar包转换为java字节码
将smali转换为dex文件
signapk 签名工具
打包bootimage 工具 minigzip
mkbootfs
mkbootimg
split_ boot解包工具
patch_color_ 将color与原版的差异patch到目标机型的framework
使用方法:patch_color_ google_framework color_framework
target_framework
2.3 移植ColorOS Framework
在device路径下,执行完“make firstpatch”命令后,生成5个子目录:
9
device/update:第三方ROM包解压后的文件;
device/tmp_system:第三方ROM包解压出来的jar包;
device/smali:用来制作ColorOS订制ROM的Smali文件;
device/out:资源文件;
device/temp路径下也有5个子目录:
temp/android_smali:android源码反编译Smali文件(MTK对应的是MTK6589源码 Smali文件);
temp/color_smali:ColorOS反编译Smali文件;
temp/dst_smali_orig:第三方ROM反编译Smali文件;
temp/dst_smali_patched:经过脚本插桩后的第三方ROM的Smali文件;
temp/reject:ColorOS插桩失败的Smali文件。
修改Smali主要依据5大方法,即比较差异、直接替换、线性代码、条件判断、逻辑推理。通过5大方法将temp/reject目录修改插桩失败文件,手动移植到device/smali目录下的文件。最后,执行“make fullota”,在device目录下生成就是生成的ColorOS订制升级包。
2.4 移植ColorOS App
所有需要移植的ColorOS app放在/system/app 目录下。移植app很简单,直接把对应的apk放到system 分区app 目录下即可。
ColorOS APP总表
APK
说明
电话
浏览器
电话本
电话本数据库
电子邮件
短信
电话归属地
短信相关数据库
电子邮件
桌面
桌面辅助功能
状态栏
锁屏管理
10
翻转解锁
旅行解锁
天气解锁
卡片解锁
密码解锁
图案解锁
SIM卡解锁
时钟widget
日历widget
时钟天气widget
心情相册专属页面
心情音乐专属页面
程序安装
动态壁纸
SIM卡解锁
时钟widget
日历widget
时钟天气widget
心情相册专属页面
心情音乐专属页面
程序安装
动态壁纸
计算器
日历备忘录
日历备忘录数据库
时钟
文件管理器
指南针
一键锁屏
OTA
USB选择界面
天气
天气数据库
省电管家
设置
设置数据库
多媒体数据库
录音
相册
音乐
视频
11
2.5 相机、相册问题
在适配过程中开发者可能会到这样一个问题,相机使用的是第三方自带的,而相册使用的是ColorOS自带的。这样就会导致相机相册无法关联起来,现象是拍照后点击照片缩略图不能跳转到OPPO的相册。解决方法如下:
1、使用apktools反编译相机的APK包,根据定位照片缩略图所在的Activity类(一般为相机启动时显示的Activity,比如S4和HTC ONE);
2、解压相机的APK包,使用dex2jar等工具反编译其中的文件,得到jar包,使用JD-GUI等工具查看jar包中的java代码,找到步骤1中定位的Activity所在的java类;
3、一般情况下,在该Activity类中可以找到响应缩略图点击事件的回调函数,跟踪并找到跳转到相册的java代码。同样在步骤1解压出来的Smali文件中定位该Activity所在的Smali文件,找到与跳转到相册的java代码对应的Smali代码;
4、如果java代码是通过包名进行跳转,则需要在Smali代码中把包名修改为OPPO相册的包名y3d;如果java代码是通过特定Action进行跳转,则需要把Action修改为;
5、修改后,使用apktools重新打包为APK,并且进行签名。
3 注意事项
1、在Smali文件查找OppoHook即可找到OPPO修改代码的大致位置;
2、import语句在Smali文件是没有的,直接在实现中引用了头文件,因此移植时可以不管import的移植;
3、与aidl对应的Smali文件一般有多个,移植时要注意对齐并确认是ROM加的接口;
4、ColorOS新增的Smali文件可以直接复制过去;
5、具有平台区分性:MTK平台和非MTK平台。ColorOS会提供两套不同的,MTK平台的Phone适用于MTK6589、6582、6572等平台,非MTK平台Phone适用于高通、英伟达、展讯等平台;
6、,,相机,这四个apk需使用第三方自带
12
apk。这里需特别注意必须保留在刷机包中,否则将无法正常开机;
7、处理完rej文件后,打包升级。通常情况下是无法正常开机,这时候需要通过adb logcat打印log进行调试。这里有个小技巧,可以先保留、、 、 、 、这6个apk,其它apk全部删除。等能够正常开机后再导入其它apk,这样做可以排除其它异常干扰,方便调试;
8、可以用来测试系统控件。如果点击出现异常,说明Smali移植有问题,找到报错文件进行修改;
9、如果遇到以dalvik开头,后面跟着VFY这样的错误导致不能开机,一般都是寄存器使用出了问题,可以根据后面提示,到相应位置检查寄存器使用是否正确。
10、对于一些第三方机器由于system分区相对较小,比如米2。会导致ColorOS订制ROM包刷机失败。解决方法,可以将一些较大的apk放到data/app下以减少对system分区空间的占用,建议优先放入小欧助手(,,);
13
2024年2月29日发(作者:童孤晴)
ColorOS适配教程
更改记录
版本
V0.1
更改日期
2014-03-13
创建
更改内容 修订人
Circle Lee
1
目 录
1
PatchRom使用介绍 ...................................................... 3
1.1
选择合适的ROM包 ................................................. 3
1.2
使用PatchRom .................................................... 3
1.3
修改 .................................................... 4
1.4
修改 .................................................. 6
1.5
刷机 ............................................................. 6
2
移植介绍 .............................................................. 7
2.1
移植详解 ......................................................... 7
2.2
工具介绍 ......................................................... 9
2.3
移植ColorOS Framework ........................................... 9
2.4
移植ColorOS App ................................................ 10
2.5
相机、相册问题 .................................................. 12
3
注意事项 ............................................................. 12
2
1 PatchRom使用介绍
1.1 选择合适的ROM包
市面上的手机都有着众多的ROM,我们应该如何选择一个合适的ROM包作为基础包呢?
目前提供的两套ColorOS分别基于4.2 Google源码和MTK6589平台开发,第三方机型4.2的原厂ROM 版本都是合适的。
原厂ROM版本虽然稳定性高,但是通常情况下原厂都会对自己的ROM进行大规模的修改。对于开发者而言,适配难度较大。因此开发者可以选择更接近Google源码的CM或者AOKP的包作为底包。当然,所选择的ROM包功能要尽量完善,稳定性尽量的高。
1.2 使用PatchRom
ColorOS基于不同平台发布两款不同的PatchRom脚本:color_2.0_patchrom_for_
4.2_[版本号].zip和color_2.0_patchrom_for_mtk4.2_[版本号].zip。
color_2.0_patchrom_for_4.2_[版本号].zip基于AOSP开发,适用于非MTK平台。color_2.0_patchrom_for_mtk4.2_[版本号].zip基于MTK 6589平台开发,适用于MTK
6589、6572、6582平台。MTK 6592平台代码差异较大,用该PatchRom适配难度大,目前暂不支持。
build: 该目录存放ColorOS特色APK,资源文件,库文件,smali代码以及使用到的工具。
tools: 该目录存放一些工具和脚本,在订制ROM和编译过程中需要使用这些工具和脚本。
device: 第三方ROM包放在该目录下。执行完脚本会打包生成一个第三方订制的ColorOS ROM包。
PatchRom使用步骤:
1.将升级包命名为放在device目录下;
2.在当前目录执行". build/";
3
3."cd device;make firstpatch",根据device目录下的temp/reject文件,在device/smali路径下修改插桩失败文件;
4.对于非MTK平台机器,如果smali/文件夹太大会导致打包失败,需要进行手动分包;
5.在device目录下执行"make fullota",在device目录下生成就是生成的color升级包。
注意事项:
1.修改,默认打开USB调试,加载。
2.对于非MTK平台机器,当第三方ROM包包含两个时(例如ROM包包含和情况),需要修改device/makefile里的两个变量:
ORGIN_SECOND_FRAMEWORK_NAME: 填入欲编译机器第二个framework文件名;
COLOR_FRAMEWORK_JARS: 填入欲编译机器的framework文件,主要看是否有第二个framework。
3.对于非MTK平台机器,如果需要分包,请在smali文件夹下新建格式的文件夹(例如:),并手动进行分包;
4."device/custom-update":定制的文件夹,make fullota时会直接覆盖过去,所以文件夹结构需要和升级包的保持一致,里面放一些原版不可删除的system/app/下面的apk或者自己新增或修改的一些文件;
5.如果获取到的升级包是odex的,需要先使用deodex工具合并,默认使用apilevel15
合并命令如下:
如果执行出错,请尝试指定apilevel值,如下:
-a 17
1.3 修改
内核root 的关键是根文件系统中文件的两个属性和able 的值。根文件系统和内核一起放在boot分区中,如果我们能够修改boot分区中的这个文件,那么我们就可以自己root 内核了。
4
一般来说某个机型的完整刷机包下有一个 文件,该文件就是boot分区的镜像文件,安装刷机包时,会使用该文件刷写boot分区。Google给 文件定义了一个标准的格式,如果遵从这个标准格式,我们可以用下面的办法来修改它,但是如果不遵从,需要逛论坛详细的了解如何修改boot分区。
我们在patchrom 目录下,给定一个,输入命令解压:
tools/bootimgtools/split_
解压后会看到一个文件,该文件即是根文件系统的压缩包。还有一个-kernel 文件,该文件即是Linux 内核。
创建一个新的名叫ramdisk的目录,用于存放ramdisk盘中的文件。然后,提取出ramdisk文件。命令如下:
mkdir ramdisk
cd ramdisk
gzip -dc ../ | cpio –i
ramdisk目录即为手机启动后的根文件系统目录,用任何编辑器修改文件和文件。
修改和able的值为:
=0
able=1
修改导入。如果对进行了手动分包,此处也需要导入。
export BOOTCLASSPATH
/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/:/system/framework/
修改完成后开始打包
tools/bootimgtools/mkbootfs ramdisk | gzip >
tools/bootimgtools/mkbootimg --kernel -kernel --ramdisk -o
5
然后,复制到刷机目录中,替换原来的。需要重命名为。
1.4 修改
必须在文件中按照要求进行相应的修改。修改版本号,添加作者名和渠道。为了OPPO能够进行统计,以更好的帮助开发者解决问题。
在任意位置添加:
=输入开发者名
l=输入渠道名,个人开发者统一填“OPPO”
修改版本号:
=ColorOS_机型_开发者_日期
(例如:ColorOS_I9500_CircleLee_140312)
1.5 刷机
不同机器刷机步骤略有不同,这里以三星为例:
1、将制作好的zip升级包push到SD卡,通过adb shell命令到sd卡中查看包的大小是否一致保证zip包完整。如果确认无误后关机,进入下一步操作。
2、手机先完全的关机,然后同时按住下音量下键 + HOME键 + 电源键,等待出现英文界面
3、然后再按音量上键,进入界面为绿色机器人,此为刷机模式
4、 用odin刷机工具刷入第三方recovery
5、关机后,同时按住音量上键 + HOME键 + 电源键进入 recovery模式
6、选择―wipe data/factory reset ―和‖wipe cache partition‖恢复一下出厂
7、选择―install zip‖
8、再选―choose zip from sdcard‖
9、选择刚下载的zip刷机包,点确认后,选择Yes
10、刷完后,返回首菜单,选择―reboot system now‖重启手机。
6
2 移植介绍
2.1 移植详解
移植ColorOS过程大致分为五步——确定需要注入的Samli代码,确定注入位置,注入Smali代码,编译Smali代码,调试Smali代码。
总体流程如下图:
Google 4.2原始apk或jar包第三方目标机原始apk或jar包修改源码重新编译反编译apk或jar包Color apk或jar包待注入Smali上下文通过反编译工具和比较工具确定修改的Smali代码通过比较工具确定注入区域待注入的Smali代码待注入的Smali区域根据dalvik虚拟机指令 进行smali代码注入注入后的Smali代码编译、打包注入后的apk或jar包push到第三方手机进行调试完成
1、确定需要注入的Smali代码
首先,确定基线文件——Google源码的apk包或jar包,使用apktool反汇编,生
7
成原始的Smali文件。
其次,修改对应Color 的apk包或jar包的java源代码,使用编译系统重新生成新的apk包或jar包,并用apktool反汇编,生成包含修改后的Smali文件。
最后,使用比较工具(例如BeyondCompare)比较两次Smali文件,即可提取出需要注入的Smali代码。
2、确定注入位置
首先,使用apktool反汇编第三方目标机的apk包或jar包,生成Smali文件。
其次,使用比较工具(例如BeyondCompare)与基线文件进行对比,比较两次Smali文件,确定需要注入Smali位置。
1、 注入代码
首先,将Color的Smali代码注入对应的第三方目标机代码区域。
其次,对注入的Smali代码进行本地修改——修改变量、跳转标号、逻辑判断标号等,使之符合当前的Smali代码实现,完成―嫁接‖工作。当然,如果情况很复杂,需要重写对应的Smali代码或者重构java源代码,来完成最终的代码注入。
2、 编译和调试
1)使用命令可将Smali代码编译成jar包。
apktool b smali/ out/framework/
2)调试方法
命令:
adblogcat | grep dalvikvm
Dalvikvm: 给出调用栈,上下文执行过程。
adblogcat | grep VFY
VFY:会给出Smali代码出错的文件、函数以及错误原因。
3)常见运行错误及分析思路
函数变量列表与声明不同A 调用时传入类型与声明不一致
B 调用时参数个数与声明不一致
函数调用方式不正确
A public和package级别的方法用:invoke-virtual
8
B private级别的方法用: invoke-director
C interface 级别的用: invoke-interface
类接口没有实现
添加父类接口空实现即可。
签名不正确
adb logcat | grep mismatch查看前面错误的package。
资源找不到
A 系统资源apk包签名异常,导致找不到系统资源。
B Smali代码中资源ID错误,导致无法在系统资源找到。
C 资源相关类移植异常,导致资源加载异常。
2.2 工具介绍
apktool 编译和反编译jar包和apk
aapt 重新打包资源
将odex转换为smali
将jar包转换为java字节码
将smali转换为dex文件
signapk 签名工具
打包bootimage 工具 minigzip
mkbootfs
mkbootimg
split_ boot解包工具
patch_color_ 将color与原版的差异patch到目标机型的framework
使用方法:patch_color_ google_framework color_framework
target_framework
2.3 移植ColorOS Framework
在device路径下,执行完“make firstpatch”命令后,生成5个子目录:
9
device/update:第三方ROM包解压后的文件;
device/tmp_system:第三方ROM包解压出来的jar包;
device/smali:用来制作ColorOS订制ROM的Smali文件;
device/out:资源文件;
device/temp路径下也有5个子目录:
temp/android_smali:android源码反编译Smali文件(MTK对应的是MTK6589源码 Smali文件);
temp/color_smali:ColorOS反编译Smali文件;
temp/dst_smali_orig:第三方ROM反编译Smali文件;
temp/dst_smali_patched:经过脚本插桩后的第三方ROM的Smali文件;
temp/reject:ColorOS插桩失败的Smali文件。
修改Smali主要依据5大方法,即比较差异、直接替换、线性代码、条件判断、逻辑推理。通过5大方法将temp/reject目录修改插桩失败文件,手动移植到device/smali目录下的文件。最后,执行“make fullota”,在device目录下生成就是生成的ColorOS订制升级包。
2.4 移植ColorOS App
所有需要移植的ColorOS app放在/system/app 目录下。移植app很简单,直接把对应的apk放到system 分区app 目录下即可。
ColorOS APP总表
APK
说明
电话
浏览器
电话本
电话本数据库
电子邮件
短信
电话归属地
短信相关数据库
电子邮件
桌面
桌面辅助功能
状态栏
锁屏管理
10
翻转解锁
旅行解锁
天气解锁
卡片解锁
密码解锁
图案解锁
SIM卡解锁
时钟widget
日历widget
时钟天气widget
心情相册专属页面
心情音乐专属页面
程序安装
动态壁纸
SIM卡解锁
时钟widget
日历widget
时钟天气widget
心情相册专属页面
心情音乐专属页面
程序安装
动态壁纸
计算器
日历备忘录
日历备忘录数据库
时钟
文件管理器
指南针
一键锁屏
OTA
USB选择界面
天气
天气数据库
省电管家
设置
设置数据库
多媒体数据库
录音
相册
音乐
视频
11
2.5 相机、相册问题
在适配过程中开发者可能会到这样一个问题,相机使用的是第三方自带的,而相册使用的是ColorOS自带的。这样就会导致相机相册无法关联起来,现象是拍照后点击照片缩略图不能跳转到OPPO的相册。解决方法如下:
1、使用apktools反编译相机的APK包,根据定位照片缩略图所在的Activity类(一般为相机启动时显示的Activity,比如S4和HTC ONE);
2、解压相机的APK包,使用dex2jar等工具反编译其中的文件,得到jar包,使用JD-GUI等工具查看jar包中的java代码,找到步骤1中定位的Activity所在的java类;
3、一般情况下,在该Activity类中可以找到响应缩略图点击事件的回调函数,跟踪并找到跳转到相册的java代码。同样在步骤1解压出来的Smali文件中定位该Activity所在的Smali文件,找到与跳转到相册的java代码对应的Smali代码;
4、如果java代码是通过包名进行跳转,则需要在Smali代码中把包名修改为OPPO相册的包名y3d;如果java代码是通过特定Action进行跳转,则需要把Action修改为;
5、修改后,使用apktools重新打包为APK,并且进行签名。
3 注意事项
1、在Smali文件查找OppoHook即可找到OPPO修改代码的大致位置;
2、import语句在Smali文件是没有的,直接在实现中引用了头文件,因此移植时可以不管import的移植;
3、与aidl对应的Smali文件一般有多个,移植时要注意对齐并确认是ROM加的接口;
4、ColorOS新增的Smali文件可以直接复制过去;
5、具有平台区分性:MTK平台和非MTK平台。ColorOS会提供两套不同的,MTK平台的Phone适用于MTK6589、6582、6572等平台,非MTK平台Phone适用于高通、英伟达、展讯等平台;
6、,,相机,这四个apk需使用第三方自带
12
apk。这里需特别注意必须保留在刷机包中,否则将无法正常开机;
7、处理完rej文件后,打包升级。通常情况下是无法正常开机,这时候需要通过adb logcat打印log进行调试。这里有个小技巧,可以先保留、、 、 、 、这6个apk,其它apk全部删除。等能够正常开机后再导入其它apk,这样做可以排除其它异常干扰,方便调试;
8、可以用来测试系统控件。如果点击出现异常,说明Smali移植有问题,找到报错文件进行修改;
9、如果遇到以dalvik开头,后面跟着VFY这样的错误导致不能开机,一般都是寄存器使用出了问题,可以根据后面提示,到相应位置检查寄存器使用是否正确。
10、对于一些第三方机器由于system分区相对较小,比如米2。会导致ColorOS订制ROM包刷机失败。解决方法,可以将一些较大的apk放到data/app下以减少对system分区空间的占用,建议优先放入小欧助手(,,);
13