记一次折腾的lineageOS编译

本来AOSP也是编译完了,但只能跑在模拟器上。由于没有谷歌亲儿子,打算利用一下手上的一批老年机。从小米、魅族,华为、三星等等各种找到的手机里面最后选择了三星S4(因为它的电池非常好)。

因为后期需要修改安卓系统的源码,所以要找开源且社区活跃一些的os。开始一波搜索,除了AOSP以外,活跃且开源的Android OS屈指可数。最后选择了lineage OS,这是基于已经不再维护的CM系统继续开发的,而且适配的机型相当多。

源码准备

首先就是去官网找对应机型的安装说明。
比如这是S4的build说明
前面的步骤和AOSP编译步骤一样,安装一些依赖库

sudo apt install -y bc bison build-essential ccache curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev liblz4-tool libncurses5-dev libsdl1.2-dev libssl-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush rsync schedtool squashfs-tools xsltproc zip zlib1g-dev

而后安装OpenJDK具体版本看os的要求。装好之后用update-alternative配置好java,javac,jar路径。

这里百度网盘上传了openjdk-11.04_linux.tar.gz的版本
链接:https://pan.baidu.com/s/10gGqdTC5JAawWe8VtjH2DQ
提取码:n7b1

而后创建源码目录

mkdir -p ~/android/lineage

然后安装repo (连不上可以用清华源)

sudo curl https://storage.googleapis.com/git-repo-downloads/repo > /usr/bin/repo
chmod a+x /usr/bin/repo

开始初始化

cd ~/android/lineage
repo init -u https://github.com/LineageOS/android.git -b lineage-16.0

init后修改一下.repo/manifests/default.xml文件

  <remote  name="github"
           fetch=".."
           review="review.lineageos.org" />

修改为

  <remote  name="github"
           fetch="https://github.com/" />

  <remote  name="lineage"
           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
           review="review.lineageos.org" />
  <remote  name="aosp"
           fetch="https://android.googlesource.com"

修改为

  <remote  name="aosp"
           fetch="https://aosp.tuna.tsinghua.edu.cn"
  <default revision="..."
           remote="github"

修改为

  <default revision="..."
           remote="lineage"

修改完之后的前半部分:

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="github"
           fetch="https://github.com/" />

  <remote  name="lineage"
           fetch="https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/"
           review="review.lineageos.org" />

  <remote  name="private"
           fetch="ssh://git@github.com" />

  <remote  name="aosp"
           fetch="https://aosp.tuna.tsinghua.edu.cn"
           review="android-review.googlesource.com"
           revision="refs/tags/android-9.0.0_r46" />

  <default revision="refs/heads/lineage-16.0"
           remote="lineage"
           sync-c="true"
           sync-j="4" />

然后下载源码

repo sync -c -j8 --no-clone-bundle
  • --no-clone-bundle 可以避免bundle的警告
  • -c仅同步当前分支
    如果网络波动大,可以用下面的脚本
#!/bin/bash  
echo "======start repo sync======"  
repo sync -j8 -c
while [ $? = 1 ]; do  
        echo "======sync failed, re-sync again======"  
        sleep 3  
        repo sync -j8 -c
done 

下载好的repo初始化包
链接:https://pan.baidu.com/s/1SVTfeLiwT9uiVgBYPTfhiA
提取码:12pt
下载解压后直接repo sync -l一遍就能提取源码了。

提取proprietary blobs

可以从已经安装lineageOS的同机型设备中提取(https://wiki.lineageos.org/devices/jfltexx/build#extract-proprietary-blobs)。
还可以从全量包或者OTA包中提取。这里采用后者,更加方便。
方法参见https://wiki.lineageos.org/extracting_blobs_from_zips.html
首先下载对应设备的lineageOS全量包,
然后

mkdir ~/android/system_dump/
cd ~/android/system_dump/

然后提取

unzip path/to/lineage-*.zip system.transfer.list system.new.dat*

如果提取出来的文件有system.new.dat.br(a brotli archive),要先用brotli来解压

sudo apt-get install brotli
brotli --decompress --output=system.new.dat system.new.dat.br

然后用sdat2img脚本转换镜像

git clone https://github.com/xpirt/sdat2img
python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img

然后挂载镜像

mkdir system/
sudo mount system.img system/

而后就能在编译目录中提取blob了

cd  ~/android/lineage/device/samsung/jfltexx 
./extract-files.sh ~/android/system_dump/

然后所有的blob就会提取到~/android/lineage/vendor/samsung中了。注意,这里给extract-files.sh传的路径并不包括system目录,因为这个脚本内部会自动去找传入目录下的system目录。
最后取消挂载

sudo umount ~/android/system_dump/system
rm -rf ~/android/system_dump/

验证源码

这一步是验证之前所有工作的成功与否了。如果有源码确实的错误,例如缺少***mk,可能是之前源码sync没有完整,建议重新repo sync -c一遍(速度还是很快的),也可能是blob没有提取出来。
对于三星S4

source build/envsetup.sh
breakfast jfltexx

如果没有报错,那么就成功了一半了。

编译

使用ccache加速编译过程(用空间换时间)

sudo apt install ccache -y

然后设置大小

export USE_CCACHE=1
ccache -M 50G
export CCACHE_COMPRESS=1

可以把export加到bashrc文件中。

关于给ccache的大小,官方的原文
where 50G corresponds to 50GB of cache. This needs to be run once. Anywhere from 25GB-100GB will result in very noticeably increased build speeds (for instance, a typical 1hr build time can be reduced to 20min). If you’re only building for one device, 25GB-50GB is fine. If you plan to build for several devices that do not share the same kernel source, aim for 75GB-100GB. This space will be permanently occupied on your drive, so take this into consideration.
You can also enable the optional ccache compression. While this may involve a slight performance slowdown, it increases the number of files that fit in the cache. To enable it, run:

NOTE: If compression is enabled, the ccache size can be lower (aim for approximately 20GB for one device).

然后开始编译吧(中途如果提示少包,就按照提示装上即可。如果预装了本文开头的包,那就没问题了)

croot
brunch jfltexx

注:注意一下我的java版本号


如果要给build签名,参见https://wiki.lineageos.org/signing_builds.html

最后编译成功的话,会显示

#### build completed successfully (01:06 (mm:ss)) ####

然后去生成目录看一眼

cd $OUT


这其中的lineage-16.0-20200327-UNOFFICIAL-jfltexx.zip就是卡刷包了。recovery.img是对应的recovery镜像。

刷入recovery

为了把卡刷包刷入手机,一个好用的recovery必不可少。听网上有说lineageOS的那个recovery不太好刷,而且我之前给小米用的也是TWRP,所以这里就给三星S4刷TWRP了。

TWRP可以在这里找到对应的包。但是我找了对应s4的,结果只找到一个app,提示说要用app去下载对应的包,太麻烦了。于是百度上搜到一个适用于S4(l905/l908的高通版本)的TWRP

S4(l905/l908的高通版本)的TWRP传到百度网盘了
链接:https://pan.baidu.com/s/1imUT-pGiLjaX1Ji80ay0aA
提取码:wk3v

给三星手机刷入recovery的方法参见lineageOS官方
https://wiki.lineageos.org/devices/jfltexx/install

因为三星的fastboot和别的手机不太一样,其称为downloading模式,所以即使装好了三星驱动,但是fastboot device还是识别不出来。三星官方给了一个Odin的软件,可以用来刷入recovery,然后在AP那里要求tar压缩包,尝试把img压缩为tar然后写进去失败了。
最后还是lineageOS给的刷recovery的方法好。具体就不重复说明了,参看https://wiki.lineageos.org/devices/jfltexx/install
注意,要先把三星手机的驱动装上。

其中用到的Heimdall-Windows:https://pan.baidu.com/s/1DnN6CSygz0ppcfb6RqJAag
提取码:66qo
复制这段内容后打开百度网盘手机App,操作更方便哦

刷入系统

一般来说用TWRP直接卡刷放入的zip包即可。但是刷的时候提示devices unknown和已知的设备不同,不让刷。遂修改卡刷包里的
META-INF/com/google/android/updater-script,把最前面的assert去掉以后,重新保存打包即可刷入。
参见https://forum.xda-developers.com/showthread.php?t=2522762

安装root

lineageOS 16.0提供了root权限,但是缺少su的二进制。
在官网找到extra里的su二进制
https://download.lineageos.org/extras
三星S4是arm平台,所以是addonsu-16.0-arm-signed.zip,然后adb push到sdcard,TWRP卡刷入即可。

λ adb shell
jfltexx:/ $ su
:/ #

注:如果是16.0以上的版本,官方默认采用Magisk作为root权限管理,也就不用官方提供的su了。

如果想装Magisk,参见https://github.com/topjohnwu/Magisk/releases

总结

一些adb命令

重启进入fastboot

adb reboot bootloader

重启进入recovery

adb reboot recovery

参考

编译刷机的过程漫长且困难连连,有几篇文章还是比较系统的
https://blog4jimmy.com/2018/11/656.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 148,637评论 1 318
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 63,443评论 1 266
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 99,164评论 0 218
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,075评论 0 188
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,080评论 1 266
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,365评论 1 184
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 30,901评论 2 283
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,649评论 0 176
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,122评论 0 223
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,734评论 2 225
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,093评论 1 236
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,548评论 2 222
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,028评论 3 216
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,765评论 0 9
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,291评论 0 178
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,162评论 2 239
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,293评论 2 242

推荐阅读更多精彩内容