编译user版本的镜像
在上一篇博客中,我们使用的是userdebug版本编译,至于user、userdebug和eng之间的区别可以看下面来自AOSP官网的图片
所以看需求,如果需要root权限就继续用userdebug版本好了,这一步就不用做,直接看下一步的更改签名,如果想稳定和性能优先可以按照下面的步骤来编译user版本
- 打开device/google/marlin/vendorsetup.sh文件
- 最下面添加一行add_lunch_combo aosp_sailfish-user
- 在源码根目录执行source build/envsetup.sh
- 然后执行lunch,选择刚刚添加进去的aosp_sailfish-user选项
- 最后执行make -j4 2>&1 | tee build.log就行
按照上面编译完之后,使用fastboot烧写镜像即可,具体烧写步骤可以参考上一篇博客
替换test key
在这之前,我们使用给系统签名的key使用的都是google提供的test key。因为Android是开源的,任何人都可以获得这个key,如果我们不更换这个key,一些恶意软件就可以使用这个key进行签名,从而获得系统权限,对其他应用进行破换或者读取用户的敏感数据。
生成自己的release key
要生成自己的key可以依次执行下面的语句:
- 首先执行
subject='/C=CN/ST=GuangDong/L=ShenZhen/O=None/OU=None/CN=jimmy/[email protected]'
语句 - 然后创建存储key的文件夹
mkdir ~/.android-certs
- 最后生成key,
for x in releasekey platform shared media; do ./development/tools/make_key ~/.android-certs/$x "$subject"; done
,在需要输入密码的时候直接按回车就好
上面的第一步中对应编号的意思为
1 2 3 4 5 6 7 |
C ---> Country Name (2 letter code) ST ---> State or Province Name (full name) L ---> Locality Name (eg, city) O ---> Organization Name (eg, company) OU ---> Organizational Unit Name (eg, section) CN ---> Common Name (eg, your name or your server’s hostname) emailAddress ---> Contact email address |
生成release img
- 首先执行
make dist -j4 2>&1 | tee dist.log
- 然后
./build/tools/releasetools/sign_target_files_apks -o -d ~/.android-certs out/dist/*-target_files-*.zip signed-target_files.zip
- 最后生成fastboot烧写的img,
./build/tools/releasetools/img_from_target_files signed-target_files.zip signed-img.zip
刷机
手机进入fastboot模式后,首先要清除userdata的数据,因为release img里面的apk已经使用过对应的key签名了,不清除userdata分区的话,手机是无法正常开机的。最后通过fastboot update signed-img.zip
烧写新编译的镜像即可。升级完后手机会自动开机,开机后查看Build number的信息如下,test key的字样就没有