您好,欢迎访问三七文档
ROM逆向适配手册1目录1概览..................................................................................................................................31.1基本原理...................................................................................................................31.2适配工具...................................................................................................................42.准备工作.........................................................................................................................52.1系统环境...................................................................................................................52.2开发环境...................................................................................................................52.3选择底包...................................................................................................................63.机型适配.........................................................................................................................63.1前提条件...................................................................................................................73.1.1获取ROOT权限..................................................................................................73.1.2环境初始化.........................................................................................................73.1.3新建机型目录.....................................................................................................73.2适配流程...................................................................................................................83.2.1配置机型(config).................................................................................................83.2.2构建工程(newproject).........................................................................................83.2.3自动插桩(patchall)..............................................................................................93.2.4冲突处理(conflict).............................................................................................103.2.5编译机型(fullota)..............................................................................................113.2.6版本升级(upgrade)............................................................................................113.3适配技巧.................................................................................................................123.3.1flyme命令集......................................................................................................123.3.2upgrade两个ROM包........................................................................................123.3.3porting已有机型................................................................................................134.常用命令.......................................................................................................................152文档修改记录修改时间修改人备注2015/6/30段启智初始文档31概览1.1基本原理AndroidROM逆向适配,是指利用逆向工具对已有的ROM包进行定制处理,重新生成一个与已有ROM类似且包含定制功能的ROM包。逆向工具有一个共同的特点:将机器解析的文件格式,还原为人可读的文件格式。ROM逆向适配主要涉及到以下一些逆向工具:1).Apktool:用于对APK和JAR包进行反汇编,生成可读的smali文件和XML文件。2).bootimgpack:用于对boot.img进行解包,生成可供修改的文件系统RAMDISK,另外linux内核也会被解包出来,通常命名为kernel或zImage。3).systemimgpack:用于对system.img进行解包,生成可供修改的文件目录SYSTEM,这个目录下包含了我们需要定制的APK和JAR。定制处理是将两个ROM包进行融合的过程,通常我们是将自己的系统移植到厂商的某一款手机上。我们的ROM包命名为board,厂商的ROM包命名为vendor,完整定制一个ROM包会涉及到应用层Apk,框架层Jar,Native层Lib以及配置文件Conf。借助于自动化工具,只需要简单的运行命令,就能完成繁琐的定制过程,最终融合后merged的ROM包,主体框架还是厂商的,因为我们不对厂商的驱动层和HAL层做任何修改,框架层也只做部分修改。这样,硬件相关的功能,譬如蓝牙、功能、相机等,还是由厂商保证的。ApkApkJarJarLibLibConfConfApkJarLibConfBoardVendorMerged图1.ROM定制处理的过程41).应用层主要被board的Apk占据,同时包含少量vendor的Apk。这是符合定制需要的,因为应用层体现了用户交互,移植的目的,就是为了让用户体验我们的交互,所以主要还是以我们的应用为主。2).框架层主要还是vendor的Jar,同时我们会对vendor的部分Jar进行修改。对厂商的Jar进行修改,目的还是为了让我们的应用能够正常的运行,并植入我们一些影响系统行为的功能。3).Native层主要还是vendor的Lib,同时会新增一些board的Lib。对Lib的逆向分析是比较困难的,所以ROM逆向适配,一般不会对厂商的Lib进行修改,仅仅是新增我们需要的Lib。4).配置文件主要还是vendor的,譬如build.prop,system/etc目录下的一些配置,这些都是与系统功能相关,我们修改的配置一般就是为了配合框架层的修改。1.2适配工具适配工具是一整套子工具的合集,它对逆向工具、打包工具、自动化工具进行封装整合,提供机型适配环境和编译环境,梳理出了完整易用的适配流程。对适配工具而言,输入就是两个ROM包,即board和vendor;输出就是一个融合的ROM包,即merged。适配工具已经内置了board的ROM包,需要做的就是将其适配到厂商的某款手机上。通常,可以从手机厂商的官网或者第三方渠道(譬如Cyanogenmod)找到待适配手机的ROM包,即vendor。找到一个稳定的厂商ROM包,刷入手机后功能正常,就可以开始这款机型的适配了:1).配置适配信息(config),目的是为了生成待适配机型的配置文件Makefile,这个文件的内容将指导后续的行为。Makefile中一些配置项的值,是工具自动从当前机型中获取的,譬如机型的屏幕密度DENSITY、分辨率RESOLUTION,这要求连接上手机才能正确获取这些配置项。2).新建机型适配工程(newproject),目的是为了生成一个与机型适配相关的文件目录。后续的适配工作都会聚焦在这个目录。工具会从厂商的ROM包中提取出适配需要的内容,包括:SYSTEM分区的所有文件、文件的属性和访问权限、APK签名信息等。提取完成后,会对文件做一次处理,譬如将odex格式还原为dex格式、将部分Jar包反汇编。53).自动化插桩(patchall),目的是为了将我们在框架层的改动,自动合入到厂商的框架层代码中去。这个过程的原理是“diff-patch”,对比board和aosp,将差异的代码以补丁的形式打到vendor的代码中去。自动化插桩可能会导致文件冲突(conflict),因此这个过程后,还需要开发人员手工解决冲突。工具采用了“三路对比”、“Smali文件拆分”、“Smali内容转换”等技术,来减少自动化插桩产生的冲突。同时,“多BASE机型”设计也可以极大的减少冲突。这些技术字眼很生涩,需要开发者在使用的过程中慢慢体会。4).生成新的ROM包(fullota),目的是为了生成可以刷入手机的文件。这个过程会根据Makefile的指导,来完成不同的动作,譬如:配置厂商的哪些文件是需要保留的或者修改的、配置哪些APK需要转换资源ID、配置最终生成产物的形式等。工具提供的编译环境,来完成对文件的重新打包,包括重新打包boot.img、apk、jar、system.img等。大部分apk会被重新签名(在Selinux环境下尤为重要)。2.准备工作2.1系统环境推荐使
本文标题:Flyme适配教程
链接地址:https://www.777doc.com/doc-4234320 .html