编译AOSP源码(我也有自己的Android源码啦)

流程

  • 环境要求
  • 配置java环境
  • 配置Android SDK环境
  • 安装配置git
  • 安装构建系统的必要软件包
  • 安装repo
  • 下载源码
  • 编译源码及其中遇到的问题
  • 编译完成之后

前排吼两嗓子

下载AOSP需要修改Ubuntu系统的hosts才能正常下载,我这电脑改过的,以前没有改的时候下载老师失败。

下载Android源码是个漫长的过程,我20M小水管,加上网络不怎么好,下载了一夜加一个上午(大概,实际由于网络原因,有一段时间是0 byte速率的)。

编译源码也很费时间,不过比下载快多了,编译完成的喜悦不言而喻,能跳起来打你膝盖。

环境要求

编译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

下面上我编译源码的环境
编译AOSP源码(我也有自己的Android源码啦)_第1张图片

配置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//$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

多试几次,我都是试了好几次才成功的。

* 我的就出了这么一个问题,遇到其他问题使用搜索引擎就能搞定*
编译AOSP源码(我也有自己的Android源码啦)_第2张图片

编译用时56分18秒,中途出现过几次oom异常,编译完成不要关闭当前窗口,执行emulator命令打开虚拟机看是否成功开机,过程略长耐心等待。

你可能感兴趣的:(Android,Linux,android,ubuntu,AOSP,编译系统)