一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第1天,点击查看活动详情。
前言
开发的时候有些源码as是无法查看的,用android code search又少了点感觉,所以就打算下载源码编译。当然,还可以借此机会,深入了解Android底层原理和实现。以下便是AOSP源码下载过程的相关笔记,不正确的地方还望指正。
AOSP源码下载
前提
- 我的系统:Ubantu 20.04 CPU:8核 内存:32G 磁盘:2T(1T机械做系统,1T固态做android)
- 完成科学上网
- 完成git配置
- 完成java环境配置
安装repo工具(Google封装后的git)
- 方法1:Google 方案
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
- 方法2:清华方案 git-repo (推荐)
清华镜像
国内镜像地址建议采用:清华镜像链接 当前repo主要用于同步AOSP、chromium及chromium OS
下载
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo -o repo
chmod +x repo
更新
repo的运行过程中会尝试访问官方的git源更新自己,如果想使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc里
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo'
配置基础编译环境
遇到安装错误,百度
sudo apt install git-core gnupg flex bison gperf build-essential \
zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 \
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev libgl1-mesa-dev \
libncurses5 libxml2-utils python xsltproc unzip
检查jack服务
通常很多ubuntu主机的Jack -server是没有和Android的工程Jack -server相互交互的,Android的工程会提供相应的压缩文件去运行jack-server服务,若要顺利的编译工程,则要ubuntu主机的Jack -server和Android的工程Jack -server相互交互。
一般操作命令:
# 检查下是否安装了Jack服务:
./prebuilts/sdk/tools/jack-admin list-server
# 启动Jack服务:
./prebuilts/sdk/tools/jack-admin start-server
# 关闭Jack服务:
./prebuilts/sdk/tools/jack-admin stop-server
如果不存在,就直接安装就好了:
cd prebuilts/sdk/tools/
./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
报错1
日志
[ 10% 538/4980] Ensuring Jack server is installed and started
FAILED: setup-jack-server
/bin/bash -c "(prebuilts/sdk/tools/jack-admin install-server prebuilts/sdk/tools/jack-launcher.jar prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 2>&1 || (exit 0) ) && (JACK_SERVER_VM_ARGUMENTS=\"-Dfile.encoding=UTF-8 -XX:+TieredCompilation\" prebuilts/sdk/tools/jack-admin start-server 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update server prebuilts/sdk/tools/jack-server-4.11.ALPHA.jar 4.11.ALPHA 2>&1 || exit 0 ) && (prebuilts/sdk/tools/jack-admin update jack prebuilts/sdk/tools/jacks/jack-4.32.CANDIDATE.jar 4.32.CANDIDATE || exit 47 )"
Jack server already installed in "/home/user/.jack-server"
Communication error with Jack server (35), try 'jack-diagnose' or see Jack server log
SSL error when connecting to the Jack server. Try 'jack-diagnose'
SSL error when connecting to the Jack server. Try 'jack-diagnose'
[ 10% 541/4980] build out/target/product/rk3399_mid/obj/ETC/precompiled_sepolicy_intermediates/precompiled_sepolicy
ninja: build stopped: subcommand failed.
22:32:18 ninja failed with: exit status 1
#### failed to build some targets (01:11 (mm:ss)) ####
Build android failed!
解决方案
步骤:
- Remove TLSv1, TLSv1.1 from jdk.tls.disabledAlgorithms in /etc/java-8-openjdk/security/java.security file
- Restart the jack server: cd /prebuilts/sdk/tools/ ./jack-admin kill-server ./jack-admin start-server
报错2
日志
Try increasing heap size with java option '-Xmx<size>'.
Warning: This may have produced partial or corrupted output.
解决方案
# 给6G:-Xmx6g
export ANDROID_JACK_VM_ARGS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx6g"
prebuilts/sdk/tools/jack-admin stop-server
prebuilts/sdk/tools/jack-admin start-server
初始化仓库
- 新建文件夹,并进入
- 执行:
# 初始化需要python
sudo apt-get install python
# 可以指定android 版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-8.1.0_r62
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-8.1.0_r62
# j8 指定cpu核数 建议每天执行一次这条命令
repo sync -j8 -c
⚠️ 8.1版本的源码编译之后大概有200G的大小,要确保有充足的空间来下载源码并编译。下载过程中会经常遇到网络中断的情况,重新执行一次下载即可,已下载的源码git会自动检查不会重复下载;也会遇上下载过程长时间卡顿的情况,在终端回车一下即可。
总结
以上便是我AOSP源码下载的全过程,接下来便是构建过程。