环境:
ubtuntu 16.04 内存:4G SWAP:9G
因为我的内存太小,所以设置了swap,不然编译不通过。会报:inja: fatal: fork: Cannot allocate memory
下载依赖工具:
sudo apt-get update
sudo apt-get install bc bison build-essential curl flex g++-multilib gcc-multilib git gnupg gperf imagemagick lib32ncurses5-dev lib32z1-dev libesd0-dev liblz4-tool libncurses5-dev libsdl1.2-dev libwxgtk3.0-dev libxml2 libxml2-utils lzop pngcrush schedtool squashfs-tools xsltproc zip zlib1g-dev openjdk-8-jdk lib32readline6-dev
设置git信息
git config --global user.name "hlzds"
git config --global user.email nideyouxiao@163.com
配置repo环境:
mkdir ~/bin
PATH=~/bin:$PATH
cd bin
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'
配置Android 源码 repo 环境
cd ~/bin
mkdir LineageOS
cd LineageOS
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/lineageOS/LineageOS/android.git -b cm-14.1
修改 manifest.xml 为清华镜像信息
注:下面 cm-14.1 与上面设置 repo init 要一样
gedit ~/bin/ LineageOS/.repo/manifest.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="refs/heads/cm-14.1"
remote="github"
改成
<default revision="refs/heads/cm-14.1"
remote="lineage"
开始下载源码
repo sync --no-clone-bundle
获取内核和驱动
oneplus 5
内核驱动: CPU:高通 骁龙835(MSM8998)
手机代号: cheeseburger
设备驱动相关代码
在GitHub找到自己手机对应的项目,并找到 14.1 的分支,我们编译的是 14.1 版本
我的手机就是这个
https://github.com/TheMuppets/proprietary_vendor_oneplus/tree/cm-14.1
源代码相关
oneplus 对应 :
https://github.com/LineageOS/android_device_oneplus_cheeseburger
https://github.com/LineageOS/android_kernel_oneplus_msm8994
GitHub下载单独文件夹 https://minhaskamal.github.io/DownGit/#/home
下载好了,分别是下面3个文件
文件 proprietary_vendor_oneplus-cm-14.1.zip 放在 ~bin/LineageOS/vendor/oneplus/cheeseburger 并解压
文件 android_kernel_oneplus_msm8998-cm-14.1.zip 放在 ~/bin/LineageOS/kernel/oneplus/msm8998 并解压
文件 android_device_oneplus_cheeseburger-cm-14.1.zip 放在 ~/bin/LineageOS/device/oneplus/cheeseburger并解压
开始编译
cd ~/bin/LineageOS
. build/envsetup.sh
export WITH_SU=true #自带root
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx8G" #设置编译内存
breakfast cheeseburger #选择设备内核
export USE_CCACHE=1 #使用缓存
export CCACHE_DIR=/media/anemone/anemone_ssk/ccache #缓存地址
./prebuilts/misc/linux-x86/ccache/ccache -M 100G #使用100G作为缓存空间
./prebuilts/sdk/tools/jack-admin start-server #这句不执行的话可能会报下面的错误
brunch cheeseburger #启动编译
下次编译可以清空,再编译
make clobber #清理
出错解决
IBRARIES/libprotobuf-java-nano_intermediates/jack-rsc.java-source-list )"
Communication error with Jack server (56). Try 'jack-diagnose'
ninja: build stopped: subcommand failed.
build/core/ninja.mk:151: recipe for target 'ninja_wrapper' failed
make: *** [ninja_wrapper] Error 1
make: Leaving directory '/home/hlzds/bin/LineageOS'
#### make failed to build some targets (51:51 (mm:ss)) ####
========================================================================
1. 切换到工程根目录,检查 jack-server 是否开启 -------------
./prebuilts/sdk/tools/jack-admin list-server
2. 检查宿主目录下的 .jack-server 文件夹以及文件jack-setting ------------
ls -al
如果两文件的所属组与所有者不是编译工程的用户,直接rm 删除
到prebuilts/sdk/tools 目录下执行一下这个命令:
./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
jack-launcher.jar,jack-server-4.8.ALPHA.jar 这两个文件的名字视 prebuilts/sdk/tools 目录下的文件名而定。
3. 执行完毕后开启服务 prebuilts/sdk/tools/jack-admin start-server,执行成功就ok
Launching Jack server java -XX:MaxJavaStackTraceDepth=-1 -Djava.io.tmpdir=/tmp -Dfile.encoding=UTF-8 -XX:+TieredCompilation -cp /home/xxx(用户名)/.jack-server/launcher.jar com.android.jack.launcher.ServerLauncher