小米8(Dipper)编译魔趣MK100全流程记录

最近闲下来了一会,除了休息了一会,另外还学习了下如何编译一个完整的AOSP(Android 10)项目,并添加人脸解锁功能~耗时一周,网上几乎没啥资料,自己摸索后总结一下呜呜呜…

以Mokee (MK100)为例,Dipper(小米8)为开发机进行说明

下载源代码

1.下载repo可执行文件

安卓使用repo工具组织项目,并提供并行fetch、checkout功能。

此处引用Mokee Github的Git-repo仓库:repo文件

下载后导入任意一个可执行文件路径(/usr/bin/bin等)

2.下载各源代码仓库

repo会在当前路径下生成.repo文件夹,里面存放着所有索引到的仓库名。

注:如果有自己导入的包,可以在.repo/manifests/xxx.xml中进行导入

魔趣为例:

repo init -u https://github.com/MoKee/android -b mkq-mr1 --depth 1
repo sync
  • 作为一个编译用户来说,--depth=1只会获取最近一次提交,大大减小本地占用大小
  • mkq-mr1为mokee/android仓库定义的Android 10分支
  • repo sync较为耗时,完成后会把整个仓库拉出来,需要100GB空间左右

添加人脸解锁功能

注:多翻各大AOSP项目的Gerrit!会有很大收获!

1.依赖人脸解锁插件

安卓10官方阉割了支持的人脸解锁,取而代之的是motorola开发的faceunlock插件,插件仓库使用pixel experience中提供的

先在.repo/manifessts/snippets/mokee.xml定义远程源:

<remote name="pixel"
          fetch="https://github.com/PixelExperience"
          revision="ten"
          review="gerrit.pixelexperience.org" />

在下方定义project源:

<project path="external/motorola/faceunlock" name="external_motorola_faceunlock" remote="pixel" />
  • path为本地路径
  • name为远程仓库名
  • 若要指定具体分支,使用revision参数指定
2.修改部分人脸相关系统文件

此处不建议直接手改代码,而是查阅各大项目的代码审查网站下载patch文件,如下图:

下载后使用

base64 --decode xxx.base64 > xxx

将其进行base64解码

当然使用Cherry Pick这些也行

总共需要两处:

可以使用git apply/am进行打补丁,但建议使用git am指令进行合并,am可以在合并完成个自动创建commit

若合并后有文件冲突,am会自动暂停并告知冲突文件,解决冲突后,可使用git am --continue继续合并。若不想改了,则执行git am --abort放弃本次合并

编译魔趣AOSP

编译的话,加上上面的源码,总共至少需要200G空间

1.lunch配置机型文件

以dipper(小米8)为例,生成一个类似于MIUI开发版的ROM指令为:

lunch mokee_dipper-userdebug

若本地还🈚️小米8的设备配置文件、内核等,会调用内核

上述指令通常会在device/xiaomi/dipper/AndroidProducts.mk中定义

其中编译类型有以下区别:

useruserdebugeng
仅安装标签为 user 的模块安装标签为 user、debug 的模块安装标签为 user、debug、eng 的模块
设定属性 ro.secure=1,打开安全检查功能设定属性 ro.secure=1,打开安全检查功能设定属性 ro.secure=0,关闭安全检查功能
设定属性 ro.debuggable=0,关闭应用调试功能设定属性 ro.debuggable=1,启用应用调试功能设定属性 ro.debuggable=1,启用应用调试功能
设定属性 ro.kernel.android.checkjni=1,启用 JNI 调用检查
默认关闭 adb 功能默认打开 adb 功能默认打开 adb 功能
打开 Proguard 混淆器打开 Proguard 混淆器关闭 Proguard 混淆器
打开 DEXPREOPT 预先编译优化打开 DEXPREOPT 预先编译优化关闭 DEXPREOPT 预先编译优化
2. 编译

lunch没遇到什么问题,可执行

mka bacon

进行编译,若一切顺利,则会在out/target/product/dipper下生成MK100xxx.zip文件。将其通过adb sideload或者adb push xxx.zip /sdcard导入手机后进行刷机。

建议内存大小为16G以上

遇到的问题

1. lunch下载机型文件在“下载了device文件还未下载vendor或者kernel”时中断后,再次lunch发现不下载了

解决方法:使用repo sync path/to/vendor_or_kernel直接进行手动同步

2.编译时报错但看不出错误

解决方法:使用mka bacon -j1单线程执行,方便查看

3.刷机后发现xxx功能不正常

之前还想集成双行通知栏的代码,后来发现导入后锁屏解不开了

解决方法:使用adb shell进入手机终端,使用su获取root权限,执行logcat | grep (功能),如果是系统问题则一般为AndroidRuntime,如果是具体app的话就换成app包名。查看问题后查阅相关代码,找到出错原因并解决。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值