从代码了解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 framework

由于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, defaultproject。我们逐个来分析一下。

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仓库集合。

参考

  1. Git repositories on android
  2. Welcome to the Android Open Source Project!
0 0
原创粉丝点击