Ubuntu 20.04 编译 Android 源码
问题一 —— 2022-02-22
错误 log:
[100% 1/1] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
FAILED: out/soong/build.ninja
out/soong/.bootstrap/bin/soong_build -t -l out/.module_paths/Android.bp.list -b out/soong -n out -d out/soong/build.ninja.d -globFile out/soong/.bootstrap/build-globs.ninja -o out/soong/build.ninja Android.bp
Clang SA is not enabled
可能的解决方案(仅适用于部分情况):
可能是分区的原因:
1. 查看一下当前系统中是否有分区以及分区的使用情况
-> free -h
出现以下:Swap 就是分区大小情况【我的是扩展之后的 swap 分区,内存: 32G】
total used free shared buff/cache available
Mem: 15Gi 4.2Gi 7.3Gi 219Mi 3.9Gi 10Gi
Swap: 31Gi 9.0Gi 23Gi
2. 如果在编译源码的时候 swap 分区的 free 为 0 的时候,就要考虑是不是分区太小导致的编译失败
3. 扩展 swap 分区大小
3.1 首先删除系统默认的分区
-> sudo swapoff /swapfile
-> sudo rm /swapfile
3.2 新建 swap 分区,假设我们想创建一个内存为 32G 的 swap 分区
-> sudo fallocate -l 32G /swapfile
3.3 分区固化
-> sudo chmod 600 /swapfile
-> sudo mkswap /swapfile
-> sudo swapon /swapfile
-> sudo swapon --show
查看一下 swap 分区是否创建成功
-> free -h
如果出现第一步中的内存数据,即创建成功
接着使自己创建的分区固化下来
-> sudo cp /etc/fstab /etc/fstab.bak
-> echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
finished!
此处是分割线 -> 此处是分割线 -> 此处是分割线 -> 此处是分割线 -> 此处是分割线 -> 此处是分割线 -> 此处是分割线 -> 此处是分割线
问题二 —— 2022-03-09
出错信息:使用 make 编译某个 APP 的时候 [比如编译 Music APP],使用 "make Music" 编译报错
log message:
[100% 2/2] out/soong/.bootstrap/bin/soong_build out/soong/build.ninja
[ 50% 1/2] glob art
ninja: error: unknown target 'Music', did you mean 'linker'?
11:03:48 ninja failed with: exit status 1
#### failed to build some targets (01:04 (mm:ss)) ####
可能的解决方案(仅适用于部分情况):
可能在 Android 源码的目录里 Music APP 的目录是 Music,但是 Android.mk 文件中不是 Music
解决方案:
1. 打开 APP 的根目录,使用 "gedit Android.mk" 打开 "Android.mk" 文件
2. 按 Ctrl + F 键搜索 "LOCAL_PACKAGE_NAME"
3. 查看 "LOCAL_PACKAGE_NAME" 定义的 APP 名字是什么,比如我的是:"LOCAL_PACKAGE_NAME := Music_APP"
4. 查看了一下,是 Android.mk 文件中定义的 APP 名字和我编译的 APP 名称不一样导致的编译失败
5. 返回到编译的目录,使用 "make Music_APP" 等待,如果代码写的没有问题,等待则会编译成功。
以上仅适用于部分 Android 源码编译出现错误的情况。