最近闲下来了一会,除了休息了一会,另外还学习了下如何编译一个完整的AOSP(Android 10)项目,并添加人脸解锁功能~耗时一周,网上几乎没啥资料,自己摸索后总结一下呜呜呜…
以Mokee (MK100)为例,Dipper(小米8)为开发机进行说明
下载源代码
1.下载repo可执行文件
安卓使用repo工具组织项目,并提供并行fetch、checkout功能。
此处引用Mokee Github的Git-repo仓库:repo文件
下载后导入任意一个可执行文件路径(
2.下载各源代码仓库
repo会在当前路径下生成
注:如果有自己导入的包,可以在
.repo/manifests/xxx.xml 中进行导入
以魔趣为例:
1 2 | 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中提供的
先在
1 2 3 4 | <remote name="pixel" fetch="https://github.com/PixelExperience" revision="ten" review="gerrit.pixelexperience.org" /> |
在下方定义
1 | <project path="external/motorola/faceunlock" name="external_motorola_faceunlock" remote="pixel" /> |
path 为本地路径name 为远程仓库名- 若要指定具体分支,使用
revision 参数指定
2.修改部分人脸相关系统文件
此处不建议直接手改代码,而是查阅各大项目的代码审查网站下载patch文件,如下图:

下载后使用
1 | base64 --decode xxx.base64 > xxx |
将其进行base64解码
当然使用Cherry Pick这些也行
总共需要两处:
- 在设置中添加人脸解锁入口:Port face unlock feature-1
framework/base 修改FaceManager 等:Port face unlock feature-2
可以使用
若合并后有文件冲突,
编译魔趣AOSP
编译的话,加上上面的源码,总共至少需要200G空间
1.lunch配置机型文件
以dipper(小米8)为例,生成一个类似于MIUI开发版的ROM指令为:
1 | lunch mokee_dipper-userdebug |
若本地还???小米8的设备配置文件、内核等,会调用内核
上述指令通常会在

其中编译类型有以下区别:
| user | userdebug | eng |
|---|---|---|
| 仅安装标签为 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. 编译
若
1 | mka bacon |
进行编译,若一切顺利,则会在
建议内存大小为16G以上
遇到的问题
1. lunch下载机型文件在“下载了device文件还未下载vendor或者kernel”时中断后,再次lunch发现不下载了
解决方法:使用
2.编译时报错但看不出错误

解决方法:使用
3.刷机后发现xxx功能不正常
之前还想集成双行通知栏的代码,后来发现导入后锁屏解不开了
解决方法:使用