FartExt编译
前情提要
使用的系统 Ubuntu
FartExt项目地址 https://github.com/dqzg12300/FartExt
Pixel设备一台 这里使用Pixel1
入门参考档
感谢这些作者
https://blog.csdn.net/qq1045553189/article/details/120997327
https://lug.ustc.edu.cn/wiki/mirrors/help/aosp/#%E9%99%84%E5%BD%95_brillo
https://blog.csdn.net/cl769796350/article/details/102676674/
参考流程
-
Ubuntu系统换源,升级apt,安装依赖
代码来源于 清华源 的参考文档
https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
sudo sed -i "s@http://.*archive.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list sudo sed -i "s@http://.*security.ubuntu.com@https://mirrors.tuna.tsinghua.edu.cn@g" /etc/apt/sources.list # 更新 sudo apt update # 安装依赖(libesd0-dev报错可忽略) sudo apt-get install openjdk-8-jdk sudo apt-get install libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 sudo apt-get install tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 sudo apt-get install dpkg-dev libsdl1.2-dev libesd0-dev sudo apt-get install git-core gnupg flex bison gperf build-essential sudo apt-get install zip curl zlib1g-dev gcc-multilib g++-multilib sudo apt-get install libc6-dev-i386 sudo apt-get install lib32ncurses5-dev x11proto-core-dev libx11-dev sudo apt-get install libgl1-mesa-dev libxml2-utils xsltproc unzip m4 sudo apt-get install lib32z-dev ccache sudo apt-get install libssl-dev sudo apt install python2 sudo apt install fastboot
-
安装,设置Git
sudo apt install curl python git git config --global user.email "xxxxxxx@xxxx.com" git config --global user.name "xxxx"
-
创建目录,安装repo(此处易出错,容易在第四步报错,请参考文末PS解决)
参考文献 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
mkdir ~/bin PATH=~/bin:$PATH curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo chmod a+x ~/bin/repo # 修改 ~/bin/repo 文件的144行的 REPO_URL = 'https://gerrit.googlesource.com/git-repo' 为 # https://mirrors.tuna.tsinghua.edu.cn/git/git-repo # 或运行如下命令后重启系统 echo "export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'" >> ~/.bashrc
-
下载Android AOSP源码
# 新建一个terminal(终端) # 可自定义目录,无需一致 mkdir aosp10 cd aosp10 PATH=~/bin:$PATH # 初始化配置 下载android-10.0.0_r2源码 repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-10.0.0_r2 # 或 repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-10.0.0_r2 # 同步源码 -j为并发数,酌情处理(清华源有并发5限制,不带-j默认为4) repo sync # 删除repo(可忽略) rm -rf .repo
进阶
有墙可尝试使用官方网站(部分地区DNS正常的可能用不到墙)
参考文献 https://source.android.com/setup/build/downloading
版本列表 https://source.android.com/docs/setup/start/build-numbers?hl=zh-cn#source-code-tags-and-builds
Pixel列表 https://developers.google.cn/android/images
# 选择编译版本,在 "源代码标记和 build" 找到适配自己设备的版本,这里使用 android-10.0.0_r2 # 请记住版号 QP1A.190711.020,后面需下载正确的系统官方驱动镜像 # QP1A.190711.020 android-10.0.0_r2 Android10 Pixel 3a XL、Pixel 3a、Pixel 3 XL、Pixel 3、Pixel 2 XL、Pixel 2、Pixel XL、Pixel # QP1A.190711.019 android-10.0.0_r1 Android10 Pixel 3a XL、Pixel 3a、Pixel 3 XL、Pixel 3、Pixel 2 XL、Pixel 2、Pixel XL、Pixel repo init -u https://android.googlesource.com/platform/manifest -b android-10.0.0_r2 # 总大小大约16G,使用好的墙能跑满带宽 repo sync rm -rf .repo
-
下载驱动
参考文献 https://developers.google.cn/android/drivers
两个link都得下
解压到 aosp10目录下
# 运行下载的两个文件(文件名不一定一致) sh extract-google_devices-sailfish.sh sh extract-qcom-sailfish.sh # 同意授权 最后输入 "I ACCEPT"
-
编译源码
# 清空环境 make clobber # 选择编译版本,此时会加载一个选择界面,可以输入序号,也可输入名称 pixle对应sailfish userdebug为带root和调试模式的rom source build/envsetup.sh lunch aosp_sailfish-userdebug time make -j12 # 中途报错参考文末PS档,继续编译运行以下代码 source build/envsetup.sh lunch aosp_sailfish-userdebug time make -j4 # 编译到 Metalava 和 frameworks 部分很容易闪退,建议调整为 source build/envsetup.sh lunch aosp_sailfish-userdebug time make -j1
-
刷机
adb reboot bootloader cd out/target/product/sailfish/ fastboot flashall -w
PS
-
内存或硬盘不足
编译系统建议设置
8G及以上的内存
100G及以上的硬盘空间(最少使用量50G+)
-
编译过程中 终端闪退
内存过小或CPU超负荷导致闪退或报错
-j 命令的参数调小或设置为 -j1 或直接去掉 -j
修改源码
参考文献 https://forum.xda-developers.com/t/guide-how-to-build-android-11-with-low-ram.4298483/
参考文献2 https://review.lineageos.org/c/LineageOS/android_build_soong/+/262657/4
参考文献3 https://review.lineageos.org/c/LineageOS/android_build_soong/+/266411/3/java/droiddoc.go#71
# aosp10/build/soong/java/config/config.go # pctx.StaticVariable("JavacHeapSize", "2048M") pctx.StaticVariable("JavacHeapSize", "8192M") # aosp10/build/soong/java/config/makevars.go # ctx.Strict("DX_COMMAND", "${D8Cmd} -JXms16M -JXmx2048M") ctx.Strict("DX_COMMAND", "${D8Cmd} -JXms8192M -JXmx8192M") # aosp10/build/soong/java/droiddoc.go # 添加 -Xmx6114m # metalava = pctx.AndroidStaticRule("metalava", #
${config.JavaCmd} -jar ${config.MetalavaJar} -encoding UTF-8 -source $javaVersion @$out.rsp @$srcJarDir/list
${config.JavaCmd} -Xmx8192m -jar ${config.MetalavaJar} -encoding UTF-8 -source $javaVersion @$out.rsp @$srcJarDir/list
增加swap大小
参考文献 https://www.jianshu.com/p/53941de91c77
# 关闭swap(此过程需等待 swap 释放,稍等片刻) sudo swapoff -a # 本地开辟30G文件作为swap空间 sudo rm /swapfile sudo fallocate -l 30G /swapfile # 设置权限 sudo chmod 600 /swapfile # 挂载swap空间 sudo mkswap /swapfile # /ect/fstab下进行添加,使swap永久生效(只需运行一次) sudo cp /etc/fstab /etc/fstab.bak echo '/swapfile swap swap defaults 0 0' | sudo tee -a /etc/fstab # 启动swap sudo swapon -a # 显示swap空间 sudo swapon --show free -m # 修改swap系统利用设置(让剩余物理内存为1.5G时启动交换空间) sudo cp /etc/sysctl.conf /etc/sysctl.conf.bak echo 'vm.min_free_kbytes=1500000' | sudo tee -a /etc/sysctl.conf # 查看编译中的内存使用 top
清空编译环境(将重新编译)
# 删除所有设置所生成的所有的output与中间文件 make clobber # 等价于指令 rm -rf out/ # 如果遇到make clobber一直卡住的,可以试试rm这个命令
-
部分文件为Python2版本,提示代码错误
如 device/generic/goldfish/tools/mk_combined_img.py
# 将 #!/usr/bin/python # 改为 #!/usr/bin/python2
-
fastboot: error: ANDROID_PRODUCT_OUT not set
# 编译的输出目录的绝对路径 export ANDROID_PRODUCT_OUT=/home/ql/aosp10/out/target/product/sailfish
-
其余错误参考档