参考于这篇文章
https://www.isthnew.com/build-lineageos
编译必备软件都已装好
1.设置repo
$ mkdir ~/bin
$ PATH=~/bin:$PATH
$ curl https://download.mokeedev.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
2.建立LineageOS目录并同步源码和依赖
$ mkdir ~/LineageOS
$ cd ~/LineageOS
2(1.安装LineageOS的repo
$ repo init -u git://github.com/LineageOS/android.git -b cm-14.1
2(2.同步代码
$ repo sync
2(3.同步完成后执行(”device name”为你的机器型号)
$ cd ~/LineageOS
$ . build/envsetup.sh
$ breakfast armani
这步是同步你的手机相关代码,不过完成后需要加入你机器的厂商vendor文件,可以从手机上获取,也可以在这里找到https://github.com/TheMupp
从手机导入专有文件:
./extract-files.sh
如我是编译LG D802的ROM,就在上面的地址找到lge的vendor按照下面格式(name=”github路径” path=”本地路径”)把他加入
~/LineageOS/.repo/local_manifests/roomservice.xml
中
<project name="TheMuppets/proprietary_vendor_lge" path="vendor/lge" remote="github" revision="cm-14.1" />
之后在repo sync
就会把这些文件同步到vendor/lge
文件夹中
开始编译
设定缓存加快编译
$ export USE_CCACHE=1
$ ~/LineageOS/prebuilts/misc/linux-x86/ccache/ccache -M 50G
开始编译
$ . build/envsetup.sh
$ brunch "device name"
如果编译成功,Zip包可以在~/LineageOS/out/target/product/
中找到;如果不成功,善用Google。
1月26日更新(不可用):LineageOS默认取消了ROOT,如果希望编译的ROM自带ROOT,需要加入环境变量
$ export WITH_SU=true
2月15日更新:高通有一个叫 Snapdragon LLVM
的编译器,听说有些优化(反正高通就是喜欢发布点黄油玩),具体效果自己试,编译速度会变慢一些。
编译器在这里取得Snapdragon LLVM Compiler for Android
,不支持MacOS。
解压其中的Extract Snapdragon-llvm-3.8.*-toolchain.tar.gz
将./toolchains/llvm-Snapdragon_LLVM_for_Android_3.8/prebuilt/linux-x86_64/
中的文件复制到~/LineageOS/prebuilts/clang/linux-x86/host/sdclang-3.8/
中。
在~/LineageOS/Device/
中添加这几行
ifneq ($(HOST_OS),darwin)
SDCLANG := true
SDCLANG_PATH := prebuilts/clang/linux-x86/host/sdclang-3.8/bin
SDCLANG_LTO_DEFS := device/qcom/common/sdllvm-lto-defs.mk
endif
更新:
在项目根目录执行
$ repo selfupdate