[Android] Ubuntu下Android源码编译

安装Ubuntu

本人使用的windows系统,因此使用Oracle VM Virtual Box虚拟机安装Ubuntu系统,Ubuntu系统本人选择的是Ubuntu14.04。
1、下载Oracle VM Virtual Box https://www.virtualbox.org/wiki/Downloads 根据各自的系统下载对应的版本。
2、下载Ubuntu系统 http://www.ubuntu.com/download/desktop 本人选择的是 Ubuntu 14.04.4 LTS 64bit。
3、如何使用Oracle VM Virtual Box安装Ubuntu,本人就不在做过多的赘述了,不明白者请查询相关资料。

配置虚拟机共享文件夹

为了使下载的Android源代码能在Windows中使用SourceInsight打开,所以需要创建Windows共享文件夹,在Ubuntu中让源代码下载在共享文件夹中,或者让Ubuntu共享代码下载的文件夹,在Windows中访问。本文以第一种方式为例阐述。

Paste_Image.png

此设置需要在关闭Ubuntu虚拟机的情况下设置。设置完成之后,打开Ubuntu系统发现没有权限去访问这个共享文件夹,解决方案是把当前用户加到一个叫vboxsf的组中,执行指令

sudo usermod -a -G vboxsf <你的用户名>

挂载的共享文件夹在/media

Paste_Image.png

这里本人使用了SecureCRTSSH远程连接了Ubuntu

sudo apt-get install openssh-server // 安装SSH服务

安装必要的工具

1、git版本控制工具

sudo apt-get install git

配置git

git config --global user.email "<你的邮箱>"
git config --global user.name "<你的名字>"

2、curl,官方一点的说法就是开源的文件传输工具。类似迅雷,或者wget

sudo apt-get install curl

3、 安装repo,Android使用Git作为代码管理工具,开发了Gerrit进行代码审核以便更好的对代码进行集中式管理,还开发了Repo命令行工具,对Git部分命令封装,将百多个Git库有效的进行组织。
新建一个bin目录

mkdir ~/bin

~/bin目录添加到PATH中,编辑.bashrc在最后添加

PATH=$PATH:~/bin

下载repo

curl https://storage-googleapis.lug.ustc.edu.cn/git-repo-downloads/repo > ~/bin/repo

添加可执行权限

chmod a+x ~/bin/repo

使用repo下载Android系统源码

1、cd到共享文件夹
新建一个文件夹存放Android源码

mkdir android && cd android

初始化工作目录,默认为master 分支

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest

初始化工作目录,并指定分支

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest -b <branch>

branch可查看网址
https://source.android.com/source/build-numbers.html#source-code-tags-and-builds [需要翻墙]

附上一些较新的系统分支

Build Branch Version
M5C14J android-6.0.1_r31 Marshmallow
LMY49J android-5.1.1_r37 Lollipop
KTU84Q android-4.4.4_r2 KitKat

如果想下拉并切换到Android 4.4.4,可以执行一下指令

repo init -u  git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-4.4.4_r2

如果在初始化的时候遇到以下问题

Paste_Image.png

这是一个Virtual Box为了安全禁止了链接的错误,解决方案如下,请在关闭虚拟机的情况下进行,
Windows 下cmd进入到Virtual Box的安装目录
Paste_Image.png

键入

VBoxManage setextradata <YOURVMNAME> VBoxInternal2/SharedFoldersEnableSymlinksCreate/<YOURSHAREFOLDERNAME> 1

<YOURVMNAME> = 虚拟机的名字
<YOURSHAREFOLDERNAME> = 设置共享的名字
请注意大小写,例如


Paste_Image.png

Paste_Image.png

Paste_Image.png

设置完成后,查看有没有设置成功

VBoxManage getextradata <YOURVMNAME>  enumerate  

Paste_Image.png

初始化之后,目录下面多了一个.repo隐藏文件夹,查看其初始大小
Paste_Image.png

2、下拉代码

repo sync 

repo sync 下载最新本地工作文件,同步 repository 中的代码。 可以指定需要更新的project , 如果不指定任何参数,会同步整个所有的项目。如果是第一次运行 repo sync, 则这个命令相当于 git clone,会把 repository 中的所有内容都拷贝到本地。如果不是第一次运行 repo sync, 则相当于 更新和自动合并动作,repo sync 会更新 .repo 下面的文件。 如果在merge 的过程中出现冲突, 这需要手动运行 git rebase --continue

防止中途人离开出错,可以使用以下脚本

#!/bin/bash
echo "======start repo sync======"
repo sync
while [ $? == 1 ]; do
  echo "======sync failed, re-sync again======"
  sleep 3
  repo sync -j4
done

repo sync后面可以加个-j<数字>参数来加快仓库克隆,如:

repo sync -j8 // 默认是4

同步时间因人而异,我大概挂了两三个小时

构建编译环境

对于Gingerbread (2.3.x)之后的系统需要64位的操作系统,老的系统可以在32为的机器上编译
1、安装JDK
每个Android系统对于JDK的要求是不一样的,当前Android Open Source Project (AOSP)master分支上需要Java 8,在Ubuntu上可以安装OpenJDK。
其他分支对于JDK的要求 Java JDK:
Java 7: for Lollipop through Marshmallow
Java 6: for Gingerbread through KitKat
Java 5: for Cupcake through Froyo
这里已编译KitKat为例,下载JDK6,由于官网下载需要填写账号信息,因此这里给出一个百度云的链接 http://pan.baidu.com/s/1nuo3XNj 下载完成后,记得添加到环境变量

2、 下载编译所需工具
Ubuntu系统版本是14.04的,具体的版本需要安装哪些工具可以查询 https://source.android.com/source/initializing.html

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

正式编译

1、设置编译环境变量
初始化环境变量

source build/envsetup.sh

或者

. build/envsetup.sh

2、选择编译目标

lunch aosp_arm-eng

类型说明

user          limited access; suited for production
userdebug     like "user" but with root access and debuggability; preferred for debugging
eng         development configuration with additional debugging tools

3、使用ccache
加快编译的东西,建议大小 50-100G

export USE_CCACHE=1
export CCACHE_DIR=/<path_of_your_choice>/.ccache
prebuilts/misc/linux-x86/ccache/ccache -M 50G

4、编译

make -j<你CPU的核心数乘以2> 如:make -j8

经过漫长的编译时间

5、模拟器运行
直接在控制台运行,在编译的工程中此命令或自动添加到环境变量中

emulator

模拟器运行起来后,即可看到刚编译好的image

官方编译教程 https://source.android.com/source/index.html [需翻墙]

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

推荐阅读更多精彩内容