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

13 篇文章 0 订阅

最近闲下来了一会,除了休息了一会,另外还学习了下如何编译一个完整的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包名。查看问题后查阅相关代码,找到出错原因并解决。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 好的,钉钉服务助手的 pom 依赖如下: ``` <dependency> <groupId>com.dingtalk</groupId> <artifactId>open-service-java-sdk</artifactId> <version>4.3.3</version> </dependency> ``` 这是 maven 依赖,如果您使用的是其他的构建工具,可能会有所不同。 钉钉服务助手是钉钉开放平台提供的一种服务类型,可以用于开发企业应用、机器人和小程序。使用钉钉服务助手,可以方便地与钉钉服务器进行交互,实现各种功能。 如果您在使用过程中遇到问题,可以在官方文档中查找相关资料或者尝试搜索网上的解决方案。 ### 回答2: 钉钉服务助手是一种实用的工具,可用于帮助开发人员和企业快速接入和使用钉钉开放平台的各种功能和服务。在使用钉钉服务助手时,我们通常会将其作为一个项目的依赖项,以方便在项目中引入和调用相关的功能。 在项目的pom.xml文件中,我们可以通过添加以下依赖项来引入钉钉服务助手: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>dipper</artifactId> <version>1.0.0</version> </dependency> ``` 这个依赖项给我们提供了使用钉钉服务助手所需的核心功能和类库。在引入依赖项后,我们可以在项目中使用相关的类和方法来调用不同的钉钉服务。 钉钉服务助手提供了许多功能,包括发送消息、获取通讯录信息、创建日程等。我们可以根据自己的需求选择合适的方法进行调用,并通过传递相应的参数来实现具体的功能。 此外,钉钉服务助手还提供了一些配置项,我们可以在项目中对这些配置项进行相应的配置,以满足我们的需求。例如,我们可以配置钉钉开放平台的AppKey和AppSecret等信息,以便能够正常使用相关的功能。 总而言之,钉钉服务助手是一个非常实用的工具,可以帮助我们快速接入和使用钉钉开放平台的各种功能和服务。通过引入相应的pom依赖,我们可以在项目中方便地调用相关的方法,实现我们所需要的功能。 ### 回答3: 钉钉服务助手(DingTalkServiceHelper)是一个方便开发者集成钉钉业务功能的开发者工具。在Java项目中,如果需要使用钉钉服务助手,可以通过在项目的pom.xml文件中添加相关的依赖来实现。 pom.xml文件是一个项目的Maven配置文件,其中定义了项目的依赖关系和构建设置。要使用钉钉服务助手,需要在pom.xml文件中添加以下的依赖: ``` <dependency> <groupId>com.alibaba</groupId> <artifactId>dingtalk-sdk-servicehelper</artifactId> <version>1.0.0</version> </dependency> ``` 这个依赖会自动从Maven中央仓库中下载钉钉服务助手的相关jar包,并将其引入项目中。添加完依赖后,就可以在项目中使用钉钉服务助手提供的各种功能了。 钉钉服务助手提供了丰富的API和工具类,可以方便地进行用户认证、发送消息、管理通讯录等操作。开发者可以通过调用这些API来实现各种与钉钉相关的业务功能。 通过添加钉钉服务助手的pom依赖,开发者可以简化开发流程,快速集成钉钉的功能,并且根据自己的需求进行二次开发。同时,钉钉服务助手也提供了详细的文档和示例代码,开发者可以参考文档和示例进行开发和调试。 总结起来,钉钉服务助手的pom依赖使得在Java项目中集成钉钉业务功能变得更加简单和高效,为开发者提供了便捷的开发工具和丰富的API,可以满足各种钉钉相关的应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值