关于android 编译很慢的问题,大家可以尝试开启 ccache 缓存机制,加速编译,命令如下:
注意:一般ccache开启后,第一次编译是和常规编译没多大区别的,后期的增量编译或者删除out后对同一套代码编译的话,差不多可以提速20%。但如果在不同代码之间来回切换,因为在不停的刷新缓存,所以也没多大提速了。
sudo apt install ccache -y
然后追加如下内容到 ~/.bashrc 文件下
export CCACHE_EXEC=$(command -v ccache)
export PATH="$CCACHE_EXEC:$PATH"
export USE_CCACHE=true
export CCACHE_DIR=~/.ccache //对于该参数大家可以根据系统的家目录大小设定对应的路径,只要编译时能够对该目录有读写权限即可。默认是 $HOME/.ccache
export CCACHE_UMASK=002
export CCACHE_HARDLINK=false
保存文件,然后设定缓存大小
$ ccache --max-size=50G // 根据需要设定大小
$ source ~/.bashrc //让如上参数生效
还有一些其他的参数,例如是否忽略某些文件的变更等感兴趣的可以 man ccache 获取详细帮助,
如下统计是之前的固态硬盘上[Ubuntu 18.04.5 LTS Linux 5.4.0-70-generic x86-64 Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz 8c16u 32G DDR4] 做的测试,机械硬盘时间上会有一定延长。
另外ubuntu系统默认开启了自动升级功能,因此默认会升级相关软件包或依赖包,从而出现无法编译代码问题。主要问题如下:
apt install 命令安装的jdk默认路径在: /usr/lib/jvm/, 因此将如上包解压后放到: /usr/lib/jvm/下,
$ sudo tar zxvf java-8-openjdk-amd64.tar.gz -C /usr/lib/jvm/ && cd /usr/lib/jvm/
$ sudo rm -r java-1.8.0-openjdk-amd64 && sudo ln -s java-8-openjdk-amd64 java-1.8.0-openjdk-amd64
如果默认路径不在/usr/lib/jvm/下,请先查找对应的实际安装路径,可借助 which java获取相关的执行路径和安装路径
:~$ which java
/usr/bin/java
:~$ ls -la /usr/bin/java
lrwxrwxrwx 1 root root 22 Oct 30 2017 /usr/bin/java -> /etc/alternatives/java
:~$ ls -la /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Nov 6 2017 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java
项目可以用下面方式编译模块(有些模块比较大,无法定位到子模块,可以用mmm, 如CameraX和Chi)
XXXninja Settings
关于android 10及以上 单编译模块速度慢的问题 主要是因为 在mm build的过程中 去调用了
subdir_makefiles := $(SOONG_ANDROID_MK) $(file <$(OUT_DIR)/.module_paths/Android.mk.list) $(SOONG_OUT_DIR)/late-$(TARGET_PRODUCT).mk
subdir_makefiles_total := $(words int $(subdir_makefiles) post finish)
.KATI_READONLY := subdir_makefiles_total
等方法 需要搜索 所有的 BP 和 android.mk 和生成 新的ninja 文件 导致编译过慢
我们可以在build/make/envsetup.sh
新增一个xxninja函数
function XXninja()
{
local cmdline="time prebuilts/build-tools/linux-x86/bin/ninja -v -d keepdepfile $@ -f out/combined-xx5Gphone.ninja -w dupbuild=warn"
echo $cmdline
$cmdline
}
其中 out/combined-XX5Gphone.ninja 是你全编时生成的ninja文件
添加后
. build/envsetup.sh
就可以使用 新的 命令去 编译模块 如果不知道模块名字可以在模块的目录下
grep -rnws --include='*.bp' 'name:'
使用这个命令搜索
举个例子:
如需要编译Settings
xxninja Settings