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

前排吼两嗓子

下载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

下面上我编译源码的环境

Ubuntu.png

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

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

** 我的就出了这么一个问题,遇到其他问题使用搜索引擎就能搞定**

successfully.png
编译用时56分18秒,中途出现过几次oom异常,编译完成不要关闭当前窗口,执行emulator命令打开虚拟机看是否成功开机,过程略长耐心等待。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容