第二期 AOSP 环境搭建、下载和编译 《手机就是开发板》
来源:互联网 发布:mac手机铃声 编辑:程序博客网 时间:2024/05/14 11:07
如果想从代码级别了解Android就得从这里入口:http://source.android.com/
这一期我们的主题是 Downloading and Building http://source.android.com/source/requirements.html
AOSP是一个庞大的project,建议单独找块160G以上的硬盘搭建实验环境,内存16G起,编译jar包的时候真的多少内存都不够,CPU四核2.5G起,编译一次大于90分钟(一个晚自习的时间)的话不利于及时发现编译错误。操作系统选择Ubuntu14.04LTS_64bit,一切按google推荐的来,Android6.0需要的JDK为openjdk1.7,Ubuntu14.04原生支持,所以会比较方便。安装好系统后再安装必要的工具:
$ sudo apt-get update$ 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 lib32z1-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip如果您的系统不是Ubuntu14.04LTS_64bit版本就要复制执行啦,建议每个软件后使用TAB键检查一下是否有这个软件,比如google给出的lib32z-dev在实际中要改为lib32z1-dev。
安装java编译环境jdk
sudo apt-get install openjdk-7-jdkvi ~/.profile文件尾部加入:
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/libexport PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/binAOSP的build系统会自动生成JAVA_HOME变量,但为了严禁一点我们还是设置完成的JAVA编译环境变量。
===========================分割线===========================
编译环境基本搭建完成,现在开始下载AOSP代码,要有个心理准备,都是10G级别的,不建议使用别人下载好打包的代码,少了几分乐趣。
AOSP的下载在大中华区就不建议通过google下载啦,我们使用国内的mirrors,AOSP国内经典靠谱非盈利的镜像主要有两个:
清华大学的 tuna https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/
中国科学技术大学的 LUG@USTC https://lug.ustc.edu.cn/wiki/mirrors/help/aosp
AOSP的代码管理是基于git的管理方式,但是是由几百个git仓库构成的,这几百个git仓库统一管理就必要要有一个统一的工具,google的工程师用python写了个脚本叫repo,使用它来进行管理android的中每个git仓库对应的版本。
我们先将repo脚本下载到本地,官方给出的方法是:
$ mkdir ~/bin$ PATH=~/bin:$PATH$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo$ chmod a+x ~/bin/repo如果没有翻墙,就将上面的地址替换成ustc的地址
https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo
repo文件的 REPO_URL 的值可以修改成国内的地址
repo的原理可以通过下面这个链接学习一下,前辈讲得太详细了:http://blog.csdn.net/luoshengyang/article/details/18195205
大体上repo由三种repository组成:
repo repository : 每次执行repo命令时repo都会对自己进行一次更新;
manifest repository:记录AOSP都包含的子项目的名称、仓库地址,manifest repository 实际上是一系列XML文件组成;
AOSP project repository:这一层是组成AOSP的各个子项目的repository。
我们来初始化repo仓库,google给出的方式是:
$ repo init -u https://android.googlesource.com/platform/manifest如果想通过国内镜像站可以使用:
$ repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest或者$ repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest这个命令实际上是包含了两个操作:将这个命令拆分开,init执行的是repo文件中REPO_URL提供的地址进行repo repository的初始化; -u 和后面的地址则提供 Manifest repository的初始化,以后我们如果下载CM的代码的时候就要重新初始化Manifest repository 。
上面的命令成功执行完成后使用ll命名就可以看到当前目录下生成.repo文件夹,在.repo目录下,repo文件夹为repo repository目录,manifests目录为manifest repository目录,其中default.xml中记录了当前manifest repository包含的所有子项目信息,可以查看一下里面的内容,每个project对应的一个AOSP子项目,很多人在github放出的androiid ROM源码其实都是发布一个经过修改的manifest库,大部分项目引用AOSP原地址,修改的部分引用自己的地址。同样,如果分析一个android修改版本也是从分析default.xml文件开始的,通过这个文件与AOSP的这个文件比对就可以确定其修改了哪些子项目,然后再去将每个项目的代码下载来分析就OK了。
在下载AOSP代码前我来确定以下版本,因为如果默认情况下使用master分支,是最新的开发版本,而我们要下载的是android-6.0.1,使用如下命令:
git --git-dir .repo/manifests/.git/ branch -a可以查看所有的版本,我们使用 android-6.0.1_r66 版本来作实验,于是执行:
repo init -b android-6.0.1_r66来将manifest repository 切换到 android-6.0.1_r66 分支。
接下来开始下载AOSP代码,执行:
repo sync -j4-j4 代表4线程同时下载,虽然是个漫长的过程,但还是需要不断关注,如果长时间卡住就ctrl+c,再repo sync重新开始,repo支持断点传输,可以随时停止和继续。
===========================分割线===========================
环境搭建和下载工作都已就绪,下面进入到编译环节。如果之前工作准备的充分,只需执行:
source ./build/envsetup.shlunchmake -j8就可以开始编译了,编译成功后会显示绿色的 make completed successfully 信息 。如果编译出错可以根据错误提示然后利用搜索网站排错,当然如果配置低,并发线程大的情况下经常出现莫名错误,多重新执行make,降低-j的数值就能通过。
编译通过后别急着关闭terminal窗口,在执行编译的环境下执行
emulator
就会使用AOSP自带的虚拟机模拟运行刚才编译的android系统。
===========================分割线===========================
这里补充一下,为了增加编译速度Google官方推荐我们启用ccache,ccache 工具通过将头文件高速缓存到缓存源文件之中而改进了build的性能,因而通过减少每一步编译时添加头文件所需要的时间而提高了build速度。
可以通过设置以下命令来启用ccache。可以将该环境变量写入.bashrc或类似文件,避免每次都设置。
$ export USE_CCACHE=1 (如果想永久开启可以将它写入到~./profile文件中)
默认cache存储在~/.ccache. 可以使用下列命令来设置路径
$ export CCACHE_DIR=<path-to-your-cache-directory>
Google推荐的cache大小为50-100GB. 可以使用下列命令来设置cache size
$ prebuilt/misc/linux-x86/ccache/ccache -M 50G (工程目录下运行,该设置只需设置一次)
可以使用以下命令来查看ccache的运行状况:
$ watch -n1 -d prebuilt/linux-x86/ccache/ccache -s (工程目录下运行)
使用ccache对AOSP第一编译并不会有效果,而make clean后第二期编译时就会节省很多时间,我做了一个实验:没有启用ccache时编译时间是95分钟,而启用ccache后第二次的编译时间为45分钟,节省了一半的时间,还是很有价值的,下面是我的截图,建议使用ccache -s 命令随时查看ccache是否真正被启用,编译一次AOSP产生的ccache缓存大约为7.5G。
目前android支持x86,arm,mips三个架构,qemu模拟器也同样支持这三种架构,因为我们的开发环境是x86架构,所以模拟x86处理器会速度更快一些,在lunch 选择的时候 选 aosp_x86-eng 然后make 就会编译出x86架构的android系统,用emulator运行一下会发现比arm架构流畅很多。
- 第二期 AOSP 环境搭建、下载和编译 《手机就是开发板》
- 第十四期 AOSP 编译系统分析《手机就是开发板》
- 第十三期 AOSP 编译环境初始化过程分析《手机就是开发板》
- 第三期 Android Kernel 下载和编译 《手机就是开发板》
- 第十五期 在AOSP上建立一个新产品《手机就是开发板》
- 第四期 Android Studio 开发环境搭建 《手机就是开发板》
- 第一期 实验环境搭建 《显卡就是开发板》
- 第一期 前言 《手机就是开发板》
- 第十七期 CyanogenMod 编译小米3W《手机就是开发板》
- 第五期 基于QEMU进行实验环境搭建 《虚拟机就是开发板》
- 第二期 开发板选型 《路由器就是开发板》
- 第五期 基于模拟器上的实践和学习规划 《手机就是开发板》
- 第二十四期 OpenWrt ipk helloworld 《路由器就是开发板》
- 第二十五期 总结《路由器就是开发板》
- 第二期 Tensorflow 基准测试 《显卡就是开发板》
- 第十二期 Android ROM结构分析《手机就是开发板》
- 第十八期 Android GPS原理分析《手机就是开发板》
- AOSP项目环境搭建
- SLAM笔记一——入门介绍
- C内存模型-BSS段、数据段、代码段、堆与栈
- 学历是铜牌,能力是银牌,人脉是金牌,思维是王牌(感触很深)
- 【框架基础】:Java反射机制详解(二)
- svn提交时报错: The working copy needs to be upgraded svn: Working copy 'E:\java\MyEclipse\Workspaces\fram
- 第二期 AOSP 环境搭建、下载和编译 《手机就是开发板》
- Android之数据统计TalkingData集成
- 【Android】导入第三方库时,关于so文件的一些思考
- IPC之Messenger
- NULL, '\0',0 '0'的区别
- fiddler4 测试Web接口
- 前端编程中,如何消除浏览器缓存
- Unity3D Shader 新手教程(1/6)
- codeforces round 345 div2 Image Interview 贪心 + 二分