魔趣 ROM 基于 Android 开源项目 (AOSP) 二次开发的三方定制 ROM。
选择魔趣作为主要的学习方向,是因为魔趣本地化定制的部分、以及中国开发者更加活跃,魔趣在国内的开发氛围更为友善。
首先,为自己定下一些小目标
- 指纹
- NFC
- 声音
- 蓝牙
- 微信指纹支付
- 支付宝指纹支付
- 帧率切换
- Others
我的 CMI 开源代码
20201212 小记
基本确定了第一版搞定了。小白入场基本都是靠前人肩膀了。
小米 10 系列机型有很多个大佬在维护( markakash, Manuel, VladV1V ),我维护的版本基本基于 markakash 的 PE ten 分支和 Manuel 的 lineage 17.1 分支。
前人的肩膀还是比较坚实的,当我编译出包时 NFC、蓝牙这些东西就已经好了。
这里说几个自己学到的东西。
底包
由于目前小米 865 系列主要还是通过预编译内核形式来编译三方 ROM ,因此强调底包还是比较重要的。
通过 XINGRZ 大佬维护的 Web 解包工具 可以方便地将 boot.img
中的 kernel.img
和 dtb.img
提取出来,替换进 device 的 prebuilt 目录中,dtbo.img
的话则在线刷包的解压包中可以找到。
此外还有 vendor 的部分也需要更新,主要还是通过解压 system, product, vendor 三个镜像来处理,具体操作可以通过 这篇博客 中的介绍学习。
Sepolicy
由于使用了预编译内核,last_kmsg 中的配置似乎是炸的,所以我们需要把 AOSP 中关于这部分的定义都先去掉。否则会出现开机看不到开机动画直接重启到 Recovery 的现象。
参考 这条提交 Pick 一下即可。
信号
当不更新 vendor 时信号是好的,但是一旦更新了 vendor 信号就炸了,vendor 也未知了。
有一个 qti-telephony-common.jar
的包是负责基带通信的。但是如果更新成 MIUI 自带的 jar 是不行的。应该是 MIUI 进行了定制,所以这里我沿用了 markakash vendor 仓库中的 jar,并在 proprietary-files.txt
中增加 sha1sum 避免下次同步时此文件被覆盖。
另外还有一个情况,是之前我用 umi 的 device 修改来跑 cmi 的时候遇到的。如果 device 没有声明对的话,也有可能导致基带未知。
声音破音
这个主要出现在 markakash 维护的版本中,而 Manuel 的版本并没有这个问题。通过一系列搜索和验证,主要的根由是从 MIUI vendor 中拉出的 soundfx 库应该是小米自己修改过的版本,使用 Manual 的版本(虽然不知道哪来的)就不会出现这个问题了,与此同时,我们也同步修改 proprietary-files.txt
进行标记。
指纹支付
微信和支付宝指纹支付其实我是同步开始调研的,但是目前只有支付宝的在之前编译 RR 时是通了的,到魔趣这边时还没调通。
两家方案的关键字分别是 IFAA
和 Soter
,直接 Google 相关关键字其实就可以搜到很多参考资料了。
这个提交 中可以看到相关的一些实现,主要就是定义了 org.ifaa.android.manager
的模块来调用支付宝和微信的指纹支付。
对于小米而言,另外还涉及了 Mlipay
这个服务,小米对两家指纹支付方案进行了封装。我们需要在 propriety-files.txt
中定义好 Mlipay
和 Soter
相关文件的引用。
1 |
# Mlipay |
然后就开始最关键的地方,配置 sepolicy
。
1 |
// TO BE CONTINUE |
屏幕刷新率切换
AOSP 直接就是支持配置刷新率的,但是设置界面的话就需要我们自己撸了。如果不想撸界面的话,可以直接配置一个默认的刷新率。
在 framework 的 overlay 中,配置
1 |
<!-- 文件位于 framework/base/res/res/values/config.xml --> |