生命不止,折腾不息 —— LineageOS编译指南

前言

CM解散后,全部项目都转移到了LineageOS上,看到官网上还在支持着一加手机,既然如此,那今天就来下载源码编译一把,看看LineageOS都做了什么改动。

准备工作

  1. 一台支持LineageOS 的手机,可以查看官方支持列表 看看你的手机是否在支持列表,我的是oneplus one
  2. 一台安装了Ubuntu的机器,硬盘空间至少100G以上。
  3. 科学上网——这个自己搞定吧,我这边是自动科学上网的

准备环境

安装编译包

Ubuntu 16.4 以下的机器执行以下命令:

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

Ubuntu 16.4 以上的机器执行以下命令:

 sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git  
 gnupg gperf imagemagick lib32ncurses5-dev lib32readline-dev lib32z1-dev libesd0-
 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 ImageMagick

安装JDK

我们今天编译的是基于 Android 7.1.1 的 LineageOS 14.1,所以需要安装OpenJDK 1.8,网上太多教程了,就不详细介绍了,可以搜索 “openjdk-8-jdk ubuntu” 关键字安装。

创建编译目录

mkdir -p ~/android/lineage

下载repo命令

Android代码是由repo管理的,所以需要下载 repo 这个二进制文件

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

初始化仓库

cd ~/android/lineagerepo init -u https://github.com/LineageOS/android.git -b cm-14.1

下载源码

repo sync -j8 --no-clone-bundle

顺便可以了解下参数哦(来自网络):

 -j:开启多线程同步操作,会加快sync命令的执行速度。默认情况下,使用4个线程并发进行sync。
 -c, –current-branch:只同步指定的远程分支。默认情况下,sync会同步所有的远程
 分支,当远程分支比较多的时候,下载的代码量就大。使用该参数,可以缩减下载时
 间,节省本地磁盘空间。
 -d, –detach:脱离当前的本地分支,切换到manifest.xml中设定的分支。在实际操作
 中这个参数很有用,当我们第一次sync完代码后,往往会切换到dev分支进行开发。
 如果不带该参数使用sync, 则会触发本地的dev分支与manifest设定的远程分支进行
 合并,这会很可能会导致sync失败。
 -f, –force-broken:当有git库sync失败了,不中断整个同步操作,继续同步其他的git
 库。
 –no-clone-bundle:在向服务器发起请求时,为了做到尽快的响应速度,会用到内容
 分发网络(CDN, Content Delivery Network)。同步操作也会通过CDN与就近的服务器
 建立连接, 使用HTTP/HTTPS的$URL/clone.bundle来初始化本地的git库,
 clone.bundle实际上是远程git库的镜像,通过HTTP直接下载,这会更好的利用网络
 带宽,加快下载速度。

解压proprietary blobs

挂载system文件

proprietary blobs 可以从刷写了LineageOS的设备或者LineageOS的OTA全量包中解压出来,为了方便,我们直接从OTA升级包中解压就好。
下载一加的LineageOS全量升级包,如果你找不到,我帮你传到百度云了。下载完成后就可以开始解压了
首先创建文件夹

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

解压OTA包到system_dump中

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

接下来得转换dat这个文件成img,需要下载一个sdat2img

git clone [https://github.com/xpirt/sdat2img](https://github.com/xpirt/sdat2img)

下载完成后,解压dat

python sdat2img/sdat2img.py system.transfer.list system.new.dat system.img

解压完成后挂载system.img

mkdir system/sudo mount system.img system/

抽取proprietary blobs

好了,接下来就可以把system中的文件抽取出来了,回到~/android/lineage/device/oneplus/bacon目录

cd ~/android/lineage/device/oneplus/bacon
./extract-files.sh ~/android/system_dump/

抽取完毕,卸载system.img

sudo umount ~/android/system_dump/systemrm -rf ~/android/system_dump/

准备编译

source build/envsetup.shbreakfast bacon

加快编译速度

为了加快编译,建议添加 ccache

export USE_CCACHE=1
export CCACHE_COMPRESS=1  

以上可以添加到~/.bashrc文件中
配置ccache大小

prebuilts/misc/linux-x86/ccache/ccache -M 50G

配置jack

jack是LineageOS 14.1使用的JAVA编译器,需要配置一下避免内存不足

export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4G"

这个也可以配置到~/.bashrc文件中

开始编译

终于可以开始编译了,输入

crootbrunch bacon

生成OTA包

假设我们的编译成功了,那么我们进入输入目录


cd $OUT

你会看见以下两个文件:

  1. recovery.img 这个是系统的recovery image.
  2. lineage-14.1-20170515-UNOFFICIAL-bacon.zip OTA安装包

你可能感兴趣的:(生命不止,折腾不息 —— LineageOS编译指南)