一加七Pro刷Lineageos21(kernelsu+MicroG)
前言
前几天我已经刷了Lineageos21(一加七Pro刷lineageos21(kernelsu+gapps)),但是体验下来有两个很严重的bug:无法接打电话,没有声音。
收短信倒是很正常,但电话打进来只会显示号码,不会显示接听界面(对方那边显示正在通话中,也就是挂断了),拨打电话会显示已结束。
测试发现是刷了kernelsu内核导致的,如果只是刷gapps使用正常,所以想自己编译一个kernelsu试试。
MicroG
下载地址: https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases
正好又在酷安看到这个可以替代gapps的东西,在酷安搜索沐浴森林客
这个人,他有几篇关于MicroG的安装和使用说的很详细。
相比于gapps的优点:
- 开源
- 省电
- 简洁,可以只安装gapps里面某个APP
安装方式
- 作为magisk/kernelsu插件刷入
- 在recovery模式下刷入
- 刷入带有MicroG的系统
这里为了方便我直接选择第三种,MicroG专门为lineage创建了一个项目(LineageOS for microG)①,将microg直接内置在系统刷机包里。这个项目也是开源的:https://github.com/lineageos4microg/lineageos4microg.github.io
,里面还提供了docker镜像用于编译。
microg需要依赖签名欺骗(Signature Spoofing
),因为microg提供的组件和谷歌官方的APP签名不一样,这样就无法过谷歌的验证。
而lineage官方拒绝加入该补丁②, 所以microG组织只能自己另开一个项目。 另外,其他一些支持签名欺骗的ROM:https://github.com/microg/GmsCore/wiki/Signature-Spoofing
如果不想重新刷系统,可以用一个叫FakeGApps③的xposed插件达到同样的效果。使用看后面
LineageOS for microG
去官网下载刷机包刷入即可,步骤和官方的lineage是一样的,而且也提供了很多设备的刷机包。
kernelsu
编译具体可以看之前的两篇文章:
这里补充几个内容
下载设备树
breakfast guacamole
下载设备树提示失败(只有Lineageos21才需要自己下载,之前的版本都会自动下载),原因应该是下面的提示:
那只能自己去github下载了,首先在官方仓库(https://github.com/LineageOS
)里搜索guacamole
可以知道一加七Pro的仓库是android_device_oneplus_guacamole
下载到指定的目录里:
git clone https://github.com/LineageOS/android_device_oneplus_guacamole -b lineage-21 device/oneplus/guacamole
根据仓库里的lineage.dependencies
文件可以知道还需要另一个仓库:
git clone https://github.com/LineageOS/android_device_oneplus_sm8150-common -b lineage-21 device/oneplus/sm8150-common
[
{
"repository": "android_device_oneplus_sm8150-common",
"target_path": "device/oneplus/sm8150-common"
}
]
以此类推把剩下的仓库也下载了:
git clone https://github.com/LineageOS/android_hardware_oplus -b lineage-21 hardware/oplus
git clone https://github.com/LineageOS/android_kernel_oneplus_sm8150 -b lineage-21 kernel/oneplus/sm8150
提取blob
温馨提示:有时候从刷机包里提取会有一些文件说不存在,这个时候试试从已安装的手机利用adb提取。 我在Lineage21从刷机包里提取没问题,但是Lineage20很多文件不存在,用adb提取正常
官方文档: https://wiki.lineageos.org/extracting_blobs_from_zips#extracting-proprietary-blobs-from-payload-based-otas
首先假设当前路径就是lineage源码的根路径,接着执行以下步骤:
mkdir system_dump/
cd system_dump/
安装依赖:
sudo apt-get install python3-protobuf
下载对应的工具(此时在system_dump
目录):
git clone https://github.com/LineageOS/android_prebuilts_extract-tools android/prebuilts/extract-tools
git clone https://github.com/LineageOS/android_tools_extract-utils android/tools/extract-utils
git clone https://github.com/LineageOS/android_system_update_engine android/system/update_engine
然后去官网下载最新的刷机包解压:
unzip lineage-*.zip
提取payload.bin里的img文件
./android/prebuilts/extract-tools/linux-x86/bin/ota_extractor --payload ./payload.bin
挂载img文件,后面三个文件不存在,可以不执行
mkdir system/
sudo mount -o ro system.img system/
sudo mount -o ro vendor.img system/vendor/
sudo mount -o ro odm.img system/odm/
sudo mount -o ro product.img system/product/
sudo mount -o ro system_ext.img system/system_ext/
接着cd到设备的根路径,提取文件:
pwd
看一下当前绝对路径
cd ../device/oneplus/guacamole/
./extract-files.sh 上面看到的绝对路径
也就是system_dump
返回源码根路径,卸载并删除多余文件
sudo umount -R system_dump/system/
rm -rf system_dump/
从adb设备提取blob
连接adb,在device/oneplus/guacamole/
下执行./extract-files.sh
就会提取。
如果从刷机包提取有很多失败,就可以用这种方式,需要先在手机刷入相应的系统。
编译内核
source build/envsetup.sh
breakfast guacamole
make bootimage
然后就能看到内核文件,刷入手机依旧是老问题,无法接打电话,没有声音。翻了下issue,没有人提出这个问题,难道只有一加七Pro这个设备存在这个问题。
本来顺便编译下系统,但是不通过,也没显示错误,只看到一堆警告,就没再试了。
排查原因
因为之前使用Lineageos17+kernelsu没问题,为了进一步确认是新系统还是新版本kernelsu的问题,我又试了kernelsu之前的版本,还是一样,一刷就没声音。
那感觉是Lineageos21和kernelsu存在兼容问题,我又去测试了Lineageos20
降级Lineageos20(Android13)
直接在recovery刷的话会显示denying OTA because it's SPL downgrade
,需要重新刷一遍dtbo.img、vbmeta.img和 boot.img。
如果没有这三个文件,可以看上面提取blob的方法用ota_extractor提取img。
降级到Lineageos20没出现没声音和无法接打电话的情况,那就是Lineageos21和kernelsu不兼容的问题了。不过在Lineageos20刚开始打开kernelsu管理器看没生效,当我第二天打算继续降级到Lineageos19.1的时候,打开管理器一看又生效了,也是奇怪,重启又没了。
内核使用github的和自己编译的都有这种情况,只能继续降级到Lineageos19.1了。
降级Lineageos19.1(Android12)
也是一样的问题,编译内核时下载的源码kernelsu版本换成v0.9.4(11838)
就可以了,看来是0.9.5就开始加入了不支持gki设备的代码。
刷机
最后就选择了Lineageos19.1+kernelsu v0.9.4(11838),然后开始刷microg
microg
https://github.com/FriendlyNeighborhoodShane/MinMicroG_releases/releases
选MinMicroG-Minimal-2.12.0-20230729205934.zip
或MinMicroG-MinimalIAP-2.12.0-20230729205917.zip
,后者就多个了谷歌商店。
我在kernelsu作为模块刷入失败,所以在recovery刷入,输完重启打开运行adb shell npem
给microg授权一些权限,因为我发现有两个权限在界面授权没响应。
ZygiskNext
https://github.com/Dr-TSNG/ZygiskNext/releases
刷这个是因为需要安装lsposed,下载zip在kernelsu管理器作为模块刷入
lsposed
https://github.com/mywalkb/LSPosed_mod
下载LSPosed-v1.9.3_mod-7244-zygisk-release.zip
作为模块刷入
FakeGApps
https://github.com/whew-inc/FakeGApps/releases
下载安装,然后在lsposed启用勾选系统框架,重启就会看到microg设置的自我检查->签名伪装支持生效了,然后把其他未勾选的权限勾选上就可以,这个时候打开microg的自我检查应该全部都勾选了
safetynet-fix
https://github.com/Displax/safetynet-fix/releases/tag/v2.3.1-MOD_3.0
下载后作为模块刷入,用于通过safetynet验证。
Shamiko
https://github.com/LSPosed/LSPosed.github.io/releases
下载后作为模块刷入,这个是为了隐藏Zygisk注入痕迹的,如果没安装lsposed,就不需要用它来隐藏
Hide-My-Applist
https://github.com/Dr-TSNG/Hide-My-Applist
在lsposed里启用,用来隐藏root有关的应用的
测试
然后在microg设置里添加谷歌账号->注册设备->开启云端消息推送->开启SafetyNet, (这些过程都需要科学)
可以看到safetynet测试都通过了,但是我在谷歌商店下载的一些测试软件都显示未通过,不清楚哪里的问题,遇到了打不开的APP再说。
APP检测
Momo
没有检测到root和lsposed,这几个就不用管了,一般APP都懒得检测这些。
Ruru
全部通过检测
Hunter
这个可能存在shamiko就很牛逼了,不过只是maybe,只要不是很严的APP都是疑罪从无。下面几个就不用看了,APP如果检测lineage系统的话感觉也不合理。并不是只有逆向人员才用lineage,正常用户也会使用。
引用链接
https://lineage.microg.org/#
https://review.lineageos.org/c/LineageOS/android_frameworks_base/+/195284
https://github.com/whew-inc/FakeGApps/releases
本文由博客一文多发平台 OpenWrite 发布!