0%

Ubuntu 19.10 编译安卓6.0.0_r1源码

提示

[2020/04/16更新]
建议使用docker进行编译,省心省力
见:使用docker编译安卓源码

概述

之前编译了AOSP 5.1.1源码,没有写文章记录。这次记录一下编译安卓6.0.0_r1的过程,流程跟编译5.1.1大致一样

步骤

配置软件源

sudo vim /etc/apt/sources.list

1
2
3
4
5
6
7
8
9
10
11
12
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

deb http://archive.ubuntu.com/ubuntu/ trusty main universe restricted multiverse

启动i386架构

1
sudo dpkg --add-architecture i386

更新软件源

1
sudo apt-get update

安装依赖

程序包

1
2
3
4
5
6
7
8
9
10
sudo apt-get install -y git flex bison gperf build-essential libncurses5-dev:i386 \
libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-dev g++-multilib \
tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \
dpkg-dev libsdl1.2-dev libesd0-dev \
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 ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip m4

JDK

官网查询得知,编译安卓5.x-6.0都是使用JDK7
下载地址: https://pan.baidu.com/s/1AcnT-D9x8EE0Z6Jzuxgscw 提取码: hqh5
将openJDK7解压到/usr/lib/jvm目录下:

1
2
mkdir /usr/lib/jvm
tar xvf openjdk-1.7.0_121.tar.xz -C /usr/lib/jvm/

最终文件夹名为/usr/lib/jvm/openjdk-1.7.0_121

修改/etc/profile文件,在末尾添加:

1
2
3
4
export JAVA_HOME=/usr/lib/jvm/openjdk-1.7.0_121
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

之后执行source /etc/profile,从而免重启使环境变量在当前bash环境下生效,
然后执行以下命令测试java是否正常:

1
2
java -version
javac -version

下载源码

有两种选择,直接下载压缩包或者使用repo下载

下载压缩包

http://pan.baidu.com/s/1ngsZs

使用repo下载

repo可使用中科大版本或清华版本
ustc - AOSP(Android) 镜像使用帮助
tuna - AOSP(Android) 镜像使用帮助
以清华源为例
~/.bashrc添加以下内容:

1
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/

再执行

1
2
3
4
5
6
7
mkdir aosp
cd aosp
## 创建工作文件夹,并初始化repo
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-6.0.0_r1 --depth=1
## 指定深度和分支,只下载对应版本的代码,不下载commit记录
repo sync
## 同步源码树

下载驱动文件

官网找到对应型号和版本的驱动,并解压到源码目录下
然后逐一运行解压出的脚本,读到第8条第e项之后输入I ACCEPT解压出驱动

编译前准备

修改mk文件

修改 art/build/Android.common_build.mk文件,定位到75行

ifneq ($(WITHOUT_HOST_CLANG),true)
改为
ifeq ($(WITHOUT_HOST_CLANG),false)

切换python版本

如果python默认版本为python2,则不需要进行这一步

1
2
3
sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 1
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.6 2
sudo update-alternatives --config python

选择python2的序号并回车

使用ccache

为提高编译效率,使用ccache加速编译
(1) 在~/.bashrc文件末尾添加:export USE_CCACHE=1
(2) 在源码目录执行:
prebuilts/misc/linux-x86/ccache/ccache -M 100G
PS:据说该设置会保存到CCACHE_DIR中,且该命令是长效的,不会因系统重启而失效。
但是可能因为其他原因失效,导致不使用ccache编译,所以建议每次编译前手动设置一下

编译

执行export LC_ALL=C
然后导入编译Android源码所需的环境:
source build/envsetup.sh
执行lunch选择编译目标
make -j26 多线程编译,建议设置线程数为cpu核心数的2倍(grep ^processor /proc/cpuinfo | wc -l查看)

耐心等待编译完成

刷入

out/target/product/型号下找到生成的镜像,fastboot刷入即可

参考

Ubuntu 18.04.3 LTS 编译安卓6.0.0_r1
E:Unable to locate package libssl-dev:i386
ubuntu18.04无法安装libesd0-dev【学习笔记】