从代码了解AOSP
来源:互联网 发布:淘宝送的优惠券怎么用 编辑:程序博客网 时间:2024/06/03 19:37
AOSP是什么?
全称是Android Open Source Project,它是整个Android源码的开源项目。
官方地址是:https://android.googlesource.com
如果你下载过源代码,那么对下面的这个指令不会陌生
$ repo init -u https://android.googlesource.com/platform/manifest
这是初始化AOSP的分支,默认情况下为Master。
上面指令里边的地址就是AOSP的原始地址,由于Google被墙的缘故,即使连接上VPN速度也不是很快。这时候我们优先使用国内的镜像源,具体镜像源可以参考我前边的文章Android源代码编译笔记(支持5.x及以上版本)。
平常情况下,我们初始化之后就开始sync
,然后就是编译,刷机或运行模拟器。
虽然我们也下载编译且运行了AOSP,但是对它的组成还是不清楚。所以,我就边研究边记笔记,从代码上了解AOSP。
AOSP的组成
只写文字太单调了,配一张Android官网的经典Android系统框架图:
由于Android的系统版本众多,这里以5.1.1版本(分支android-5.1.1_r15
,即for Nexus Player)为例来分析一下AOSP的组成(方法对于其它版本是一样的)。
那么它对应的初始化地址就是
https://android.googlesource.com/platform/manifest -b android-5.1.1_r15
这里边仓库所在的服务器是https://android.googlesource.com/
,而platform/manifest
是仓库的路径,而android-5.1.1_r15
则是这个仓库的一个分支。
你如果直接访问上面的路径,会发现它其实是一个git仓库,而clone正是使用这个地址来进行,即
git clone https://android.googlesource.com/platform/manifest
将其clone下来并且切换到android-5.1.1_r15
分支后(默认是Master分支)你会发现该仓库只有一个文件 - default.xml
。
切换命令
git checkout -b android-5.1.1_r15 origin/android-5.1.1_r15
就像Java的main
方法一样,这个文件便是整个AOSP的入口。
AOSP入口 - platform/manifest
该文件有500+行,是这个样子
<?xml version="1.0" encoding="UTF-8"?><manifest> <remote name="aosp" fetch=".." /> <default revision="refs/tags/android-5.1.1_r15" remote="aosp" sync-j="4" /> <project path="build" name="platform/build" groups="pdk,tradefed" > <copyfile src="core/root.mk" dest="Makefile" /> </project> <project path="abi/cpp" name="platform/abi/cpp" groups="pdk" /> <project path="art" name="platform/art" groups="pdk" /> <project path="bionic" name="platform/bionic" groups="pdk" /> ... <project path="tools/tradefederation" name="platform/tools/tradefederation" groups="notdefault,tradefed" /></manifest>
我们可以看到该文件由3种标签组成:remote
, default
和project
。我们逐个来分析一下。
remote
<remote name="aosp" fetch=".." />
这是定义一个源,名字是aosp
,fetch则是它的地址,这里用..
表示相对路径的上一层目录。
我们在前边初始化时使用的命令是
https://android.googlesource.com/platform/manifest
表示我们当前所在的目录是https://android.googlesource.com/platform/
,而再加上..
,那么aosp
所在的目录是https://android.googlesource.com/
。
所以,转换一下,实际的地址是
<remote name="aosp" fetch="https://android.googlesource.com/" />
project
<project path="art" name="platform/art" groups="pdk" />
表示一个git仓库,其中
- path,指的是远端代码下载到本地后在本地的路径
- name,表示远端git仓库的名字
- groups,表示的是分组,有些
project
没有这个属性,则表示default
分组。默认情况下,同步的是除notdefault
分组外的所有分组。
所以上面的标签的含义是从https://android.googlesource.com/platform/art
地址同步git仓库到本地,放在当前目录的art
文件夹下。
你可以将文件中的
project
与你下载好的aosp代码对比一下,看是不是这样。
在这个版本中,整个AOSP包含有501个project。
在这里需要特别说明一下第1个project
<project path="build" name="platform/build" groups="pdk,tradefed" > <copyfile src="core/root.mk" dest="Makefile" /> </project>
它除了下载仓库之外,还有一个子任务copyfile
。
即下载完成后,将本地的build/core/root.mk
文件复制到源代码根目录,并重命名为Makefile
。
大家也可以对比一下,这两个文件的内容是不是一模一样。
default
<default revision="refs/tags/android-5.1.1_r15" remote="aosp" sync-j="4" />
我们知道了project
指的是远端的git仓库后,default
就好理解了。它有3个属性:
- revision,需要下载的分支,即所有的project最后都切换到这个分支
- remote,数据源的名字,这里只有一个数据源
aosp
- sync-j,开几个线程进行下载
AOSP是什么
AOSP话题太大了,细讲的话一本书也说不完。这篇文章仅仅从代码(仓库)的角度了解一下AOSP是什么或者说它的组成结构。
到这里,我们也很容易明白了:
AOSP是由500多个git组成的一个超级git仓库集合。
参考
- Git repositories on android
- Welcome to the Android Open Source Project!
- 从代码了解AOSP
- 从汇编代码了解指针
- 绕过https下载aosp代码
- 从代码示例了解ECMAScript5新特性
- 学学代码,了解测试,从现在开始
- 绕过https下载google aosp代码
- AOSP是如何管理代码的
- 使用Android Studio 导入Android(AOSP)代码
- 如何在logcat中显示AOSP代码中的打印信息
- 使用本地AOSP镜像快速获取Android代码
- 从外围了解UE4
- 数字证书 从零了解
- 从源码了解Volley
- 从硬件了解寻址
- 从InnoDB了解MVCC
- 从浅到深了解ArrayList
- 固定背景 从代码层次深入了解新旺铺背景 店铺装修必学
- 从普通程序员到高级IT工程师必经之路----了解“高内聚,低耦合,代码复用
- JS 用字符串做数组下标
- 111
- 【杭电oj2010】水仙花数
- Linux环境多线程编程基础设施
- Hexo之Next主题优化(一)
- 从代码了解AOSP
- 《Android开发艺术探索》之学习笔记(四)View的工作原理
- 16 暑期校训 DAY 5
- Linux中sort,uniq,cut,wc命令详解
- 关于用adb命令行不起作用的情况
- 我的第一篇微博*-*,状态压缩入门POJ3254
- 自定义一个带删除按钮的ListView
- Linux进程间通信中的文件和文件锁
- Java中多态的用法