前排吼两嗓子
下载AOSP需要修改Ubuntu系统的hosts才能正常下载,我这电脑改过的,以前没有改的时候下载老是失败。
下载Android源码是个漫长的过程,我20M小水管,加上网络不怎么好,下载了一夜加一个上午(大概,实际由于网络原因,有一段时间是0 byte速率的)。
编译源码也很费时间,不过比下载快多了,编译完成的喜悦不言而喻,能跳起来打你膝盖。
流程
- 环境要求
- 配置java环境
- 配置Android SDK环境
- 安装配置git
- 安装构建系统的必要软件包
- 安装repo
- 下载源码
- 编译源码及其中遇到的问题
- 编译完成之后
环境要求
编译AOSP需要的Linux版本
Android版本 | 编译系统版本 |
---|---|
Android 6.0 —— AOSP 主线(就是>Android6.0) | Ubuntu14.04 |
Android 2.3 —— Android 5.x | Ubuntu 12.04 |
Android 1.5 —— Android 2.2.x | Ubuntu 10.04 |
编译AOSP需要的JDK版本,注意OpenJDK和Java JDK的分别
Android版本 | JDK版本 |
---|---|
AOSP 主线(就是>Android6.0) | OpenJDK8 |
Android 5.x —— Android 6.0 | OpenJDK7 |
Android 2.3.x —— Android 4.4.x | Java JDK6 |
Android 1.5 —— Android 2.2.x | Java JDK5 |
下面上我编译源码的环境
配置Java环境
** OpenJDK 安装**
由于我编译的是目前最新的Android 7.1.1 版本,所以直接安装OpenJDK8即可
sudo apt install openjdk-8-jdk-headless
** OracleJDK安装 **
先去Oracle官网下载JDK安装包下载.tar.gz后缀的那个版本,下载完成解压到指定目录,我看网上解压到哪里的都有,弄得眼花缭乱的,我也懵逼。
好继续走,我的分区分了根分区和home分区,我为了方便就解压到home分区下,新建了个Dev文件夹,方便辨识,我解压到这里了,然后打开终端
sudo gedit ~/.bashrc
我看网上有设置 ** /etc/profile**的,同样,懵逼。先知道的直接Google就好了,我个人提倡不懂就搜,而不是没搜就找人问。
打开了配置文件之后在末尾添加下面这几行
# set java environment
export JAVA_HOME=/home/odriver/Dev/java/jdk1.8.0_111
export PATH=$JAVA_HOME/bin:$PATH
export PATH=$JAVA_HOME/jre/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH
其中的/home/odriver这些的...应该都懂吧,解压的jdk的路径,看看你解压的jdk的路径替换上去就行了,记得保存。重新打开终端,然后试试java或者javac命令,如果还不行就重启试试。
Android SDK
Android环境先去下载SDK,这是一个代理的网站,这网站很棒,下载SDK Tools然后解压,解压到你喜欢的位置,你可以放到JDK那个地方,俩放一块好管理。
接下来还是打开配置文件
sudo gedit ~/.bashrc
然后还是在最后添加几行
# set android SDK environment
export ANDROID_SDK=/home/odriver/Dev/android-sdk-linux
export PATH=$ANDROID_SDK/build-tools:$PATH
export PATH=$ANDROID_SDK/tools:$PATH
export PATH=$ANDROID_SDK/platform-tools:$PATH
记得保存,重新打开终端,输入adb看是否正常。
配置好SDK环境不生效?
执行下面命令即可
source ~/.bashrc
安装配置git
suod apt-get install git
配置信息
git config --global user.name 自己的别名
git config --global user.email 自己的邮箱
安装构建系统的必要软件包
根据官方描述我们需要安装下面这些包
sudo apt-get 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 ccache \
libgl1-mesa-dev libxml2-utils xsltproc unzip
为了使我们的手机能够正常链接到电脑上进行刷入系统我们需要执行下面命令
wget -S -O - http://source.android.com/source/51-android.rules | sed "s/<username>/$USER/" | sudo tee >/dev/null /etc/udev/rules.d/51-android.rules; sudo udevadm control --reload-rules
安装repo
我也忘记我怎么下载配置的了,那时候很早了,现在贴上官方提供的方法吧,要是不行的话就搜一下,尴尬,一步步执行
可以参照清华镜像的说明进行配置。
mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
下载源码
使用下面命令初始化仓库下载指定版本源码,如下列命令下载7.1.1源码,后面的_r24是对应的机型编号,
详情请去AOSP官网查看个版本号对应的机型,下面android-7.1.1_r24 可根据官网对应机型的列表进行更改
// 首先cd到源码保存的目录,没有请自行创建,请注意储存空间足够,起码保证有100G空间,下面是我的源码保存的路径
cd /home/odriver/lmy/Dev/system/aosp/source //请改成自己的路径
repo init -u https://android.googlesource.com/platform/manifest -b android-7.1.1_r24
初始化完成之后执行下列命令开始同步代码,时间很长,需要耐心等候
repo sync
编译源码及其中遇到的问题
1.先执行下面代码保证先前输出的被清楚掉
make clobber
2.执行下面命令初始化构建环境
source build/envsetup.sh
或者执行
. build/envsetup.sh
都可以
3.选择编译目标
这里选择编译arm平台,可选项有arm64.x86
lunch aosp_arm-eng
可选编译类型,当前是eng
- user : 代表这是编译出的系统镜像是可以用来正式发布到市场的版本,其权限是被限制的(如,没有root权限,不鞥年dedug等)
- userdebug : 在user版本的基础上开放了root权限和debug权限.
- eng : 代表engineer,也就是所谓的开发工程师的版本,拥有最大的权限(root等),此外还附带了许多debug工具
3.执行编译命令
-j参数后面可选填,越大编译越快,当然要看你机子配置够不够强悍了。
拿四核cpu来讲,一核两线程,四核八线程,所以我填的是8,CPU全功率编译。
make -j8
编译Android7.1.1的时候目前值遇见了一个oom异常,好像是说6.0之后的编译工具换成了Jack
解决办法执行下面命令。
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
./prebuilts/sdk/tools/jack-admin kill-server
./prebuilts/sdk/tools/jack-admin start-server
要是还不行就多试几次,换换执行顺序,
比如这样
./prebuilts/sdk/tools/jack-admin kill-server
export JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4096m"
./prebuilts/sdk/tools/jack-admin start-server
多试几次,我都是试了好几次才成功的。
** 我的就出了这么一个问题,遇到其他问题使用搜索引擎就能搞定**