编译LineageOS
编辑说在前面
之前一直想自己编译一次LineageOS,同时修改一些源码来自定义,然后在寒假折腾双系统,重新分区(原来的分区小了),然后升级配置之类的。最后在上个月成功编译了自己的第一个版本,编译的过程并不算难,网上很多流程,而且官方也有流程,所以一次编译成功了。只是这第一次编译花费了我3个小时。 虽然说编译成功了说明我的机器编译还是没问题的,但是在编译的这三个小时里,我的机器cpu4个核心全部占用100%,同时8g的内存也是95%+,swap也占了一半多,虽说有一定好处,但是一定程度上妨碍了我学习和工作。 考虑到学习工作问题以及想要提升一下编译速度,所以我在网友的推荐下,去Vultr租了一台高配置服务器专门用于编译(一个月500来不起,只能租)。
准备
虽然是在服务器上,但是如果在自己的电脑上编译过程也是一样的。 需要如下:
- 一台运行Ubuntu系统64位的PC(至少8个g的内存同时拥有100g以上的空闲硬盘空间)
- 一个好的网络
编译
安装编译环境
我们在电脑上写软件都需要搭建软件的开发环境,同理,编译系统也需要搭建环境,既然是编译源码,我们只需要安装编译需要的软件就行了。
sudo apt-get update && sudo apt-get install git-core gnupg flex bison gperf libsdl1.2-dev libesd0-dev libwxgtk3.0-dev squashfs-tools build-essential zip curl libncurses5-dev zlib1g-dev openjdk-8-jre openjdk-8-jdk pngcrush schedtool libxml2 libxml2-utils xsltproc lzop libc6-dev schedtool g++-multilib lib32z1-dev lib32ncurses5-dev gcc-multilib maven tmux screen w3m ncftp liblz4-tool python
如果编译完成之后想要将包直接通过usb传到手机,可以安装一个 adb
包,然后通过 adb push
传到手机上,具体的使用以及安装方法自行 google
。
创建bin目录并且安装repo
mkdir -p ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
接下来将 ~/bin
目录配置到 PATH
环境变量中。
可以直接在终端使用以下代码配置环境变量,但是重开终端后会失效。
PATH=~/bin:$PATH
如果以后也要编译的话,我们可以将bin目录永久添加到环境变量中。
使用编辑器编辑 ~/.profile
文件,然后在其中添加以下代码。
# set PATH so it includes user's private bin if it exists
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
然后运行 source ~/.profile
来使环境变量生效。
初始化LineageOS源码仓库
设置的你Github用户名和邮箱
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
然后执行:
cd ~/LineageOS
repo init -u https://github.com/LineageOS/android.git -b cm-14.1
同步源码到仓库
直接执行以下代码:
repo sync -j4
其中 -j4
是使用四个线程同步源码的意思。
然后执行:
. build/envsetup.sh
breakfast "device name"
这里是同步机型的信息以及内核文件。
添加厂商 vendor
LineageOS
官方的文档中使用的是一个脚本然后用 adb
从你的设备中提取 vendor
,我觉得这种方法太麻烦了,因为不一定是每一台设备都正好装了 adb
,比如说服务器上这种办法就不行了。
于是,在另外一篇博客教程上我找到了替代的方法,现在应该都是这样做的了。
github项目地址:https://github.com/TheMuppets
仓库中有一个清单的项目,里面提供了所有的清单,你只需要将对应你机型的厂商 vendor
的代码添加到 LineageOS/.repo/local_manifests/roomservice.xml
文件中就行了。
例如我的机型是 Nexus6
,设备代号 shamu
,对应的 vendor
是 motorola
,我往清单文件中添加的代码应该是如下这样的:
<project name="TheMuppets/proprietary_vendor_motorola" path="vendor/motorola" remote="github" revision="cm-14.1" />
其中的 remote
是原项目清单文件中没有的,要添加上,后面的是分支还是版本忘了,反正如果编译 LineageOS 14.1
就填 cm-14.1
。
添加完毕之后再次执行repo sync,此时就开始同步厂商vendor到你的LineageOS项目下了。
现在我们应该是准备好了,开始编译吧
在编译之前我们要进行一些配置。
配置缓存
export USE_CCACHE=1
~/LineageOS/prebuilts/misc/linux-x86/ccache/ccache -M 50G
export CCACHE_COMPRESS=1
上面的代码是设置编译过程中的缓存为50g,如果你第二次使用这台设备编译的话,你会发现编译的过程快了很多,其实是因为每一次源码更新都之更新了一部分,对于我们编译的旧版本来说,新版本有些地方压根就没有更改,所以我们的旧版本依旧可用。而编译生成的就存储在这个缓存中。这也就是为什么源码只有20g,编译完成之后就有100g左右的原因。
配置jack
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8G"
jack
好像是 jdk1.8
的新特性,官方说要加上就加上。
开始编译
配置完成,然后就开始编译吧。
source build/envsetup.sh
croot
brunch shamu
如果编译过程中出现问题,然后从新开始编译的话,请依次执行上面的语句,确保源码完整。 不出意外的话,现在就应该开始编译了,然后你可以选择静静的等待。
编译完成
编译完成之后只需要在命令行界面输入以下代码,就可以自动定位到生成的包的位置,当然,也可以手动 cd
到对应目录( ~/LineageOS/out/target/product/'设备型号'/
)。
cd $OUT
编译生成的文件名为 lineage-‘日期’-14.1-‘设备代号’.zip
以及对应的 zip.md5sum
,还有 recovery.img
。
到此,教程结束。
- 0
- 0
-
分享