前言
博主之前有写过使用AOSP的源码为Pixel编译系统镜像的文章,这一篇我们不玩AOSP的源码了,我们玩一下Lineage的源码,Lineage是由第三方开发、基于Android的、旨在提供系统性能和稳定性的操作系统,Lineage的前身是Cyanogen ROM。当然这套教程也适合其他Lineage支持的设备,像小米5、一加6之类的设备,Lineage支持的设备可以点击这里查看。
源码准备
要想编译Pixel能够使用的Lineage系统镜像,第一步当然是准备好源码了。至于源码下载、编译系统的搭建大家可以参考网上的教程,这里就不多做说明了。首先是创建自己的工作目录,这里我用lineage-15.1
作为自己的工作目录。然后在工作目录内执行下面的语句:
1 |
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b lineage-15.1 |
这里使用清华大学的镜像源作为下载源。然后repo init完后还要对.repo/manifest.xml
文件做如下修改:
1. 将
1 2 3 |
<remote name="github" fetch=".." review="review.lineageos.org" /> |
修改为
1 2 3 4 5 6 |
<remote name="github" fetch="https://github.com/" /> <remote name="lineage" fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/" review="review.lineageos.org" /> |
2. 将
1 2 |
<remote name="aosp" fetch="https://android.googlesource.com" |
修改为
1 2 |
<remote name="aosp" fetch="https://aosp.tuna.tsinghua.edu.cn" |
3. 将
1 2 |
<default revision="..." remote="github" |
修改为
1 2 |
<default revision="..." remote="lineage" |
到此repo库的初始化和修改就完成了,接下来就是下载开始下载了。Lineage的源码比较大,下载可能比较费时,而且可能会因为网络波动导致repo sync中断,所以我使用的是下面的脚本来下载源码的,脚本很简单就是repo sync失败就让其重新再下载,知道repo sync成功为止。下载过程漫长,依赖你的网络带宽下载时间从2小时到200天不定。另外如果下载过程出现bundle错误的话可以忽略不管。
1 2 3 4 5 6 7 8 |
#!/bin/bash echo "======start repo sync======" repo sync -j4 while [ $? = 1 ]; do echo "======sync failed, re-sync again======" sleep 3 repo sync -j4 done |
下载设备依赖库
上面已经将Lineage通用部分的源码下载下来了,接下来我们就要下载特定设备的依赖库了,这个也很简单,只需要执行下面两条指令即可:
1 2 |
1. source build/envsetup.sh 2. breakfast sailfish |
其中sailfish是手机的设备名,不同型号的手机的设备名是不同的,具体设备名需要自行查看。然后使用对应的设备名替换上面的sailfish即可。另外只有在前言中标注Lineage支持的设备才会有对应的库。执行完breakfast后,会下载device目录下的相关文件以及内核源码,到这里所有源码下载都完成了。接下来就需要提取手机内相关的vendor库文件了。提取vendor库文件的前提是手机需要root,接下来一节讲述如何root手机,如果你的手机已经root过了,那么可以跳过
root设备
root设备需要下载TWRP的recovery镜像、手机已解锁bootloader以及Magisk包。
- TWRP recovery镜像文件可以到这个网址上下载:https://twrp.me/Devices/,将列表中的img文件下载下来,如果有zip文件也下载下来以备后用
- 公开市场的手机一般都是允许解锁bootloader的,解锁bootloader会执行一次恢复出厂设置,所以在执行下面的步骤前请备份好重要数据,解锁步骤如下:进入到开发者模式,然后打开OEM Unlock选项,最后手机关机,同时按音量下和电源键进入fastboot模式,执行指令
fastboot flashing unlock
,如果有提示就选择yes即可。 - Magisk root包可以到如下网址下载:https://github.com/topjohnwu/Magisk/releases
下面开始root设备:
- 手机关机,同时按音量下和电源键进入到fastboot模式
- 执行这条指令
fastboot boot twrp-3.2.3-0-xxxxx.img
,其中twrp-3.2.3-0-xxxxx.img文件就是你下载的TWRP recovery镜像 - 之后手机会进入到recovery模式,这时候电脑端是可以访问手机内部存储的,将Magisk包放到手机内置存储,然后在手机端点击Install,选择按路劲选择到Magisk,滑动安装即可。
安装成功后,重启手机就会看到Magisk管理模块,电脑端执行adb shell,然后执行su,Magisk模块会弹出提示点击允许即可。
准备vendor库
现在回到vendor库准备部分,这里接着上面下载依赖库后面的操作的。然后进入到device/[vendor]/[device_name]目录下,例如:因为pixel设备是在device/google/marlin下,执行./extract-files.sh
即可获得设备对应vendor库。
编译前最后修改
如果只是想拿做开发的话,这部分可以不做修改,如果想编译拿来日常使用的,建议执行下面的操作。
1.高性能CPU,配合较低容量RAM的可以增大ZRAM的size,git路径:device/google/marlin
1 2 3 4 5 6 7 8 9 10 11 12 |
diff --git a/init.common.rc b/init.common.rc index 84bd460..4b838ef 100644 --- a/init.common.rc +++ b/init.common.rc @@ -99,6 +99,7 @@ on init # ZRAM setup write /sys/block/zram0/comp_algorithm lz4 + write /sys/block/zram0/disksize 1073741824 write /proc/sys/vm/page-cluster 0 on fs |
2.为了安全需要生成自己用的各种key,在源码根目录创建一个保存key的文件夹,这里用genkey代替,执行下面语句将key生成工具复制都genkey目录:
1 |
cp development/tools/make_key genkey/ |
然后执行cd genkey/
,在genkey目录执行如下四条指令生成release、platform、shared和media key
1 2 3 4 |
1. ./make_key release '/C=CN/ST=Shenzhen/L=Baoan/O=Android/OU=www.blog4jimmy.com/CN=jimmy-release/[email protected]' 2. ./make_key platform '/C=CN/ST=Shenzhen/L=Baoan/O=Android/OU=www.blog4jimmy.com/CN=jimmy-platform/[email protected]' 3. ./make_key shared '/C=CN/ST=Shenzhen/L=Baoan/O=Android/OU=www.blog4jimmy.com/CN=jimmy-shared/[email protected]' 4. ./make_key media '/C=CN/ST=Shenzhen/L=Baoan/O=Android/OU=www.blog4jimmy.com/CN=jimmy-media/[email protected]' |
在生成key的时候会提示需要密码,这里我们直接按回车表示不需要密码。最后将genkey目录下所有生成的key文件(包含pem和pk8格式)复制到build/target/product/security下
3.修改使用release key编译Android。
如下修改的git路径:build/make
1 2 3 4 5 6 7 8 9 10 11 12 13 |
diff --git a/core/Makefile b/core/Makefile index 9a16e83..40bec91 100644 --- a/core/Makefile +++ b/core/Makefile @@ -169,7 +169,7 @@ endif ifeq ($(DEFAULT_SYSTEM_DEV_CERTIFICATE),build/target/product/security/testkey) BUILD_KEYS := test-keys else -BUILD_KEYS := dev-keys +BUILD_KEYS := release-keys endif BUILD_VERSION_TAGS += $(BUILD_KEYS) BUILD_VERSION_TAGS := $(subst $(space),$(comma),$(sort $(BUILD_VERSION_TAGS))) |
如下修改的git路径:device/google/sailfish
1 2 3 4 5 6 7 8 9 10 11 |
diff --git a/lineage.mk b/lineage.mk index 1abdfa4..4e1b774 100644 --- a/lineage.mk +++ b/lineage.mk @@ -22,5 +22,6 @@ PRODUCT_BUILD_PROP_OVERRIDES += \ PRIVATE_BUILD_DESC="sailfish-user 8.1.0 OPM4.171019.021.P1 4820305 release-keys" BUILD_FINGERPRINT := google/sailfish/sailfish:8.1.0/OPM4.171019.021.P1/4820305:user/release-keys +PRODUCT_DEFAULT_DEV_CERTIFICATE := build/target/product/security/release $(call inherit-product-if-exists, vendor/google/marlin/marlin-vendor.mk) |
编译
编译很简单一句话搞点,在源码根目录执行brunch sailfish
。之后就是根据电脑CPU、硬盘和内存大小整体性能不同,编译时间从1小时到1天不等。
刷机
最后编译成功后在out/target/product/[device_name]
下会有一个lineage-15.1-20181102-UNOFFICIAL-[device_name].zip
类似命名的zip包,这个就是我们刷机的recovery包。刷机前我们还需要准备Open GApp的包,GAPP包可以到这个网站上下载,下载的时候选择mini即可:https://opengapps.org/。 因为Pixel现在使用的是AB system,所以感觉稍微复杂。
支持AB system手机
如果手机使用的是AB system,那么按照下面的步骤执行
- 手机关机,同时按音量下和电源键进入fastboot模式
- 执行这条指令
fastboot boot twrp-3.2.3-0-xxxxx.img
,其中twrp-3.2.3-0-xxxxx.img文件就是你下载的TWRP recovery镜像 - 然后在电脑端将root设备一节中下载的twrp-3.2.3-0-xxxxx.zip文件放到手机内部存储,注意这里拷贝的是zip格式的压缩包,非img。在手机端选择Install,安装twrp-3.2.3-0-xxxxx.zip包
- 安装成功,选择Reboot,这里我们选择Slot A,然后选择Recovery重启手机
- 手机再次进入到Recovery,我们将上面编译得到的
lineage-15.1-20181102-UNOFFICIAL-[device_name].zip
放到手机内部存储,然后在手机上选择Install,选择上面的lineage-15.1-20181102-UNOFFICIAL-[device_name].zip
安装。 - 因为
lineage-15.1-20181102-UNOFFICIAL-[device_name].zip
包中会重新刷写recovery的镜像,而lineage的recovery并不是特别好用,所以这里我们需要在此执行第三步,再刷写一次TWRP recovery镜像 - 因为AB system的缘故,在刷
lineage-15.1-20181102-UNOFFICIAL-[device_name].zip
的时候,如果当前选择的是Slot A的话,那么在刷lineage系统的时候,会安装在Slot B,所以这里我们选择Reboot,然后选择Slot B,之后再选择Recovery重启进入Recovery模式 - 再次进入到recovery模式,现在我们将GAPP包
open_gapps-arm64-8.1-mini-20181031.zip
复制到手机内部存储,然后在手机端选择Install,选择安装上面的GAPP包 - 安装成功后,选择Reboot->Bootloader,进入fastboot模式
- 在fastboot模式下,在电脑端执行
fastboot -w
,然后重启手机进入系统就可以使用了
非AB system
如果手机不是使用AB system的话,那就简单多了
- 手机进入fastboot模式,进入fastboot模式大部分都是音量下加电源键,如果不行可以按照具体设备号百度之
- 在fastboot模式下,在电脑端执行
fastboot flash recovery twrp-3.2.3-0-xxxxx.img
,烧写TWRP recovery镜像到recovery分区 - 之后我们重启手机进入到recovery模式,进入recovery模式的方法,有的可以通过bootloader选项进入,具体进入方法,请按具体设备型号百度之
- 进入到了TWRP的recovery,然后就可以将编译成功的lineage zip包放入手机内部存储了,然后选择Install,选择lineage zip包进行安装
- 在安装lineage zip成功后,最后还需要执行以下双清,或者进入fastboot模式,在电脑端执行
fastboot -w
指令
到此,关于lineage编译、刷机的所有内容都做完了。如果还有不清楚的地方,可以给我留言或者加我微信。