该文章属于转载,感谢原作者:曦顏XY
一、开发环境
推荐使用Ubuntu14.04及其以上系统
自用镜像:https://pan.baidu.com/s/1b17o0u
需要安装的依赖:curl、git、openjdk-7、android-tools-adb
sudo apt-get install openjdk-7-jdk git curl android-tools-adb
[color=rgb(0, 83, 122) !important]复制代码
(可能还需要安装其他依赖、视插桩时的报错信息而定)
当然miui适配工具还是支持macOS平台、mac用户也可以下载玩耍
二、同步代码
1.下载repo
魔趣的repo不需要挂ss下载,推荐使用!
mkdir -p ~/bin
curlhttp://download.mokeedev.com/git-repo-downloads/repo> ~/bin/repo
chmod a+x ~/bin/repo
echo "export PATH=~/bin
PATH" >> ~/.bashrc
echo "export PATH=~/bin/PATH" >> ~/.bashrc
[color=rgb(0, 83, 122) !important]复制代码
2.下载适配代码
miui开源地址在这里https://github.com/MiCode
下载miui代码命令:
mkdir patchrom
cd patchrom
repo init -u git://github.com/MiCode/patchrom.git -b marshmallow
[color=rgb(0, 83, 122) !important]复制代码
整个代码同步大概需要一小时左右,请喝杯茶等待
如果发现速度过慢,请自带梯子,传送门:http://www.jianshu.com/p/b085b4832fd0
三、选择合适的底包
由于miui开发的代码是针对android6.0也就是marshmallow、所以你的底包也应该是基于Android 6.0 的推荐开发者在有实际手机的情况下进行适配,一方面,在 Android 6.0 上,有一些必要的文件信息需要从手机上获取;另一方面,很多适配出现的问题,是需要在真机上调试才能解决的。
四、拉取底包vendor
首先新建机型目录
. build/envsetup.sh
mkdir xblade
cd xblade
[color=rgb(0, 83, 122) !important]复制代码
然后将手机重启到rec模式、
adb reboot recovery
[color=rgb(0, 83, 122) !important]复制代码
接下来运行如下命令来拉取vendor
../tools/releasetools/ota_target_from_phone -r
[color=rgb(0, 83, 122) !important]复制代码
“-r”的意思是在rec模式下拉包
五、拷贝makefile并进行配置
从angler文件夹拷贝makefile、参考它进行相关配置
六、反编译framework
在 makefile 准备完毕后,便可以开始构建新的机型工程。以下命令会自动反编译
make workspace
[color=rgb(0, 83, 122) !important]复制代码
七、首次插桩
在新机型工程生成完毕之后,执行以下命令会完成自动插桩:
make firstpatch
[color=rgb(0, 83, 122) !important]复制代码
此时工具将会自动进行插桩、
由于原厂rom和miui官方逻辑问题、会导致部分patch失败、从而产生冲突、产生的冲突在temp/rej下、
八、解决冲突
有些smali冲突容易解决,甚至可以瞬间解决。一些难以解决的冲突依赖于冲突位置处的上下文,很多时候都是由于 board 和 vendor 在 smali 寄存器变量的使用差异导致的,我们需要从上下文中判断出寄存器变量的语义。这考察开发者着耐心。
没有相关基础的同学、朕赐你一本秘籍:
https://pan.baidu.com/s/1dFHqyvZ
九、打包
运行如下命令即可在out目录下面生成fullota.zip刷机包
make fullota
[color=rgb(0, 83, 122) !important]复制代码
如果你需要重新编译rom、则需要运行
make clean
[color=rgb(0, 83, 122) !important]复制代码
clean完成了再次fullota即可
十、调试
对新手来讲,适配miui是个相对很难的过程,仅仅解决了冲突并不一定能直接开机。
那就需要运用好logcat来抓取错误log、进行相关的分析
adb logcat
[color=rgb(0, 83, 122) !important]复制代码
Github上面有很多优秀开发者的开源miui项目,可以参考他们的开源项目进行冲突的修改以及bug的修复