前言
CM解散后,全部项目都转移到了LineageOS上,看到官网上还在支持着一加手机,既然如此,那今天就来下载源码编译一把,看看LineageOS都做了什么改动。
准备工作
- 一台支持LineageOS 的手机,可以查看官方支持列表 看看你的手机是否在支持列表,我的是oneplus one
- 一台安装了Ubuntu的机器,硬盘空间至少100G以上。
- 科学上网——这个自己搞定吧,我这边是自动科学上网的
准备环境
安装编译包
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
你会看见以下两个文件:
- recovery.img 这个是系统的recovery image.
- lineage-14.1-20170515-UNOFFICIAL-bacon.zip OTA安装包
网友评论