AOSP (一):获取源码
来源:互联网 发布:m1协同软件 编辑:程序博客网 时间:2024/05/16 10:54
- 准备知识
- 获取源码
- 编译环境
- 下载源码
- 编译运行AOSP
- 编译AOSP
- 运行AOSP
- Anroid内核源码
准备知识
AOSP即Android Open Source Project,也就是Android系统源码的相关内容。这块代码巨多,而且牵扯比较广,需要各种各样的相关知识。不过AOSP的内容模块相对清晰,仔细啃还是可以的。
AOSP的相关参考资料也是很多的,我现在一般是跟着老罗的Android系统源码情景分析的书和博客搞事情,他的讲解都有源码和例子,废话比较少,比较易懂。同时他的内容比较多的涉及framework方面的东西,底层比如bionic,ART和dalvik虚拟机的部分相对就讲的少一点,所以我又搞了刘超的《深入解析Android5.0系统》这本书,两边现在都在慢慢啃。Anyway,资料这玩意只是辅助,提供思路,最后还是自己啃代码靠谱。
除了源码部分的内容,Android系统是基于Linux系统建立的,一定程度上讲Android其实算是运行在Linux操作系统上的软件,所以Linux的相关内容也是需要了解的。这部分资料就更多了,随意就行。
获取源码
编译环境
Android源码目前只能在Linux上编译使用,所以要看源码请移步Linux系统。我用的是Ubuntu,算是主流了吧。然后获取和运行源码需要以下工具:
- Git工具:其实也不一定,一些镜像支持直接下载
- Java SDK: 不然拿头跑
- 可能还需要一些工具包,可以用以下命令获取:
sudo apt-get install flex bison gperf libsdl-dev libesd0-dev libwxgtk2.6-dev build-essential zip curl valgrind
这些工具都是用来获取和编译源码的,具体作用如下:
这些工具不是必须的,有些可能也已经有了,可以按需。
下载源码
这部分不复杂,但是容易崩,因为aosp很大,sync一个20来G的玩意,如果从官方往下搞因为大家都知道的原因会很慢而且容易崩,甚至卡进度。所以推荐国内镜像,比如清华的镜像就很好,上边有详细的下载教程。
编译运行AOSP
编译AOSP
拿到源码之后,到根目录下,就可以开始编译。AOSP有一套自己的build系统,用来应对源码大量的编译整合工作,基本上原则就是分模块编译然后整合,并实现增量编译,并且可以根据设置编译不同版本和平台的Android系统源码。这部分就可以看好久了。。。尤其是我这种菜鸡。
最简单的编译命令是这样的:
. build/envsetup.shlunchmake
基本上就是envsetup.sh
构建环境,定义一些shell命令,然后lunch
选择想要编译的版本,最后make进行编译。第一次编译时间很长而且会有各种坑,比如我遇到了jdk版本问题,AOSP要求必须是OpenJDK。然后就是漫长的等待,推荐跪着编译,效果拔群。
运行AOSP
玩游戏,就是要赢编译代码,就是为了运行,所以编译好以后就可以常识运行。默认情况下,模拟器自身在out/host/linux-x86/bin
里边,然后需要加载四个文件,分别是一个Linux内核镜像文件zImage
,默认为out/host/linux-x86/bin/kernel-qemu
;三个Android系统镜像文件system.img
, userdata.img
,以及ramdisk.img
,这仨货是编译生成的,在`out/target/product/generic
文件夹底下。运行的时候为了方便,可以把这些路径扔到系统变量里去。于是用以下命令执行:
export PATH = $PATH:/<path-to-aosp>/out/host/linux-x86/binexport ANDROID_PRODUCT_OUT = /<path-to-aosp>/out/target/product/genericemulator
这里,ANDROID_PRODUCT_OUT
是默认的emulator找Andorid系统镜像的地址,需要手动设置一下。另外,AOSP默认的Linux内核是没有源码的,需要看这部分的话需要单独下载。
Anroid内核源码
这部分其实跟AOSP关系不大,但是可能需要针对不同机型的话就需要相对应修改这一部分。首先这部分要用git来把代码搞下来:
git clone https://android.googlesrouce.com/kernel/goldfish.git
其中,goldfish是模拟器用的内核版本,可以根据不同的版本需求用不同的库,其余类型还有common,exynos等。
拿到源码之后,checkout
一个分支出来就可以吃了。具体checkout
哪一个,需要看你的Android源码支持适配哪个版本,也就是之前运行用的那个image是哪个版本的。比如goldfish,可以到device/generic/goldfish
文件夹下边用git log
查看最新的commit,然后根据commit来checkout
相应的branch和commit就可以了。
再来就是编译内核,新版本的内核不需要太多配置,可以使用make help
查看有哪些合适的目标,然后使用make <target>
设置配置文件,最后再使用make
进行编译就可以了,最后会提示相应的文件所在的位置,把文件扔到上边运行虚拟机的配置里替换原来的内核就可以了。内核源码这部分还比较糊,后边要用的话再说。
- AOSP (一):获取源码
- AOSP Android 源码开源工程镜像获取方法
- AOSP: 下载 android 源码
- AOSP: 源码开发基础
- AOSP: 下载 android 源码
- Android AOSP源码下载
- Nexus 搞机之路 —— aosp源码的获取与编译
- AOSP: 下载 android kernel 源码
- 通过AOSP下载android源码
- android AOSP 源码下载指南
- 编译AOSP方便阅读源码
- 国内下载Android AOSP源码
- aosp源码分析 5.0 BlockImageUpdateFn
- AOSP编译出错 一例
- AOSP: eclipse 导入 android Settings 源码
- AOSP android 源码批量下载 windows平台
- 提供android 5.0 AOSP源码下载
- Android源码下载 清华AOSP镜像源
- android的Drawable详解
- PAT (Advanced Level) Practise 1004. Counting Leaves (30)
- super和this关键字
- 用LuaBridge为Lua绑定C/C++对象
- 函数调用约定
- AOSP (一):获取源码
- 库函数建立工程时容易犯的错误
- Leader 沟通技巧学习
- 系统自带的东西
- 实验报告模板
- MFC基本知识
- 输入的一个字符串按反序存放
- android運行時打印调用栈
- Android四大组件之BroadCastReceiver