搭建Android 7.0的源码环境

Posted by Gityuan on August 20, 2016

一. 概述

Google已发布Android 7.0源码,想要快人一步,先下载源码一睹为快。“show me the code, change the world”,接下来说一说如何搭建Android 7.0的源码环境。

翻墙工具:要时刻能查看Google官方最新的源码资料,在我国天朝,必须要有一个得力地翻墙工具。 虽然各种方法总有人能找到一些免费的翻墙工具,经常会不稳定之类的问题,又要花时间再去调研如何翻墙之类的,对我而言比较浪费时间,与其花时间要在这个上面,不如直接花钱买个翻墙工具,节省时间用来写博客,本人使用的翻墙工具:云梯

二. 搭建源码环境

2.1 安装repo

mkdir ~/bin
PATH=~/bin:$PATH
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

2.2 初始化repo

step 1. 创建空工作目录,不防目录建立在~/aosp(可根据自己喜好定制)

mkdir ~/aosp
cd ~/aosp

step 2. 配置git的用户名与邮箱,下面以本人为例

git config --global user.name "Gityuan"
git config --global user.email "gityuan@google.com"

step 3. 初始化

如果下载master分支代码:

repo init -u https://android.googlesource.com/platform/manifest

如果只载Android 7.0代码:(指定分支)

repo init -u https://android.googlesource.com/platform/manifest -b android-7.0.0_r1

更多分支信息,可查看https://source.android.com/source/build-numbers.html#source-code-tags-and-builds.

2.3 下载源码

同步所有可用的project:

repo sync

例如,同步当前分支的frameworks/base库:

repo sync platform/frameworks/base -c -j4

2.4 build

这里以build aosp的eng版本为例:(当然build前需要先配置jdk环境)

make clobber    //删除所有先去build所产生的output文件
source build/envsetup.sh    //创建环境变量
lunch aosp_arm-eng          //选择build target
make -j4                    //build源码

三. 知识点

搭建源码过程涉及一些知识点,这里再进一步说明:

3.1 build类型

build类型有eng, userdebug, user这3者的区别:

类型 eng userdebug user
ro.debuggable 1 1 0
ro.kernel.android.checkjni 1 0 0
ro.secure 0 0 1
adb(默认状态) 打开 打开 关闭

eng/userdebug版本会开启不同的debug属性以及默认打开adb; 而user版本则关闭debug属性且默认关闭adb功能。

3.2 Repo

Android系统源码是有非常多的git库组成的,为例更加便捷方便地管理所有的git库,便有了repo存在的价值。 Repo是一个库管理工具,是建立在git之上,为了更好的管理具有多个git库的工具。

init:

repo init -u <URL> [<OPTIONS>]
  • -u: manifest所在URL,例如 https://android.googlesource.com/platform/manifest;
  • -b: 指定版本,例如 android-7.0.0_r1
  • -m: manifest名,默认为 default.xml.

sync:

repo sync //同步所有的可用project
repo sync PROJECT0 PROJECT1 ... //同步一个或多个project

upload:

repo upload [<PROJECT_LIST>]

diff:

repo diff

download: 从review系统 下载指定的change, 到本地project.

repo download <TARGET> <CHANGE>

例如:从库platform/build中将change 23823 拉到本地:

repo download platform/build 23823

forall: 让每一个git库都执行相应的command

repo forall [<PROJECT_LIST>] -c <COMMAND>

另外, 关于Git命令的用法:有两个不错的网站


欢迎关注我的微博: weibo.com/gityuan !请随意 ¥打赏支持 将激励创作更多技术干货!