如何下载AOSP (Android Open Source Project)

准备条件

你可能临时起意想要尝试,最好先确认一下自己的软硬件环境

  • 内存16GB起步,编译会出现 fatal error: runtime: out of memory
  • 磁盘200GB+

如果你是要看源码,用不着下载

本文采用的是清华源 https://mirrors.tuna.tsinghua.edu.cn/help/AOSP/,
你可以可以按原文里面的步骤

下载repo工具

repo就是一个git脚本的集合,其实还是git公交,很多git命令可以直接套用。

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

repo init 初始化

我没有通过初始包的方式下载,包含了自己不需要的,而且全部工程有点大。我们做一些精简。拉取指定的分支,如果需要特定的分支 去https://source.android.com/source/build-numbers.html#source-code-tags-and-builds 选择Tag

repo init --depth=1 -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-11.0.0_r39
  • –depth=1 表示只下载最近版本的代码,只保留最近的commit版本。使用–depth 可以节省本地磁盘空间,加速下载,对于开发够用了

repo sync 下载

repo sync -c -f --no-tags --no-clone-bundle -j`nproc` 
  • -c 或者–current-branch表示只拉取当前分支代码.
  • –no-tags 不拉取tags
  • –no-clone-bundle 不使用clone.bundle
  • -f 如果sync失败,继续同步
  • –force-sync 如果文件目录有差异,强制覆盖掉
  • -j 参数指定同时运行多少个job, 看具体的源是否支持足够的数量

执行玩会出现success的log,大概80GB左右,出错可重新执行。

如果出现如下的错误,上面的命令追加重新跑一次

1
2
3
error: Unable to fully sync the tree.
error: Downloading network changes failed.
Try re-running with "-j1 --fail-fast" to exit at the first error

常用的repo命令

  • 创建分支

    1
    repo start --all 自定义分支名
  • 删除分支

    1
    repo abandon 已创建的本地分支名
  • 切换分支

    1
    2
    repo init -b xxx --depth=1
    repo sync -c -f
  • repo回滚

    1
    2
    3
    repo sync -d
    repo forall -c 'git reset --hard' # Remove all working directory (and staged) changes.
    repo forall -c 'git clean -f -d' # Clean untracked files
  • 查看当前项目分支

    1
    2
    repo branch
    repo status

    可以看到每一个git 工程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    project art/                                    branch android_11_study_ck
    project bionic/ branch android_11_study_ck
    project bootable/recovery/ branch android_11_study_ck
    project build/blueprint/ branch android_11_study_ck
    project build/make/ branch android_11_study_ck
    project build/soong/ branch android_11_study_ck
    project compatibility/cdd/ branch android_11_study_ck
    project cts/ branch android_11_study_ck
    project dalvik/ branch android_11_study_ck
    project developers/build/ branch android_11_study_ck
    project developers/demos/ branch android_11_study_ck
    project developers/samples/android/ branch android_11_study_ck
    project development/ branch android_11_study_ck
    project device/amlogic/yukawa/ branch android_11_study_ck
    project device/amlogic/yukawa-kernel/ branch android_11_study_ck
    project device/common/ branch android_11_study_ck
    project device/generic/arm64/ branch android_11_study_ck
    project device/generic/armv7-a-neon/ branch android_11_study_ck
    project device/generic/art/ branch android_11_study_ck
    project device/generic/car/ branch android_11_study_ck
    project device/generic/common/ branch android_11_study_ck
    project device/generic/goldfish/ branch android_11_study_ck
    project device/generic/goldfish-opengl/ branch android_11_study_ck
    project device/generic/mini-emulator-arm64/ branch android_11_study_ck
    project device/generic/mini-emulator-armv7-a-neon/ branch android_11_study_ck
    project device/generic/mini-emulator-x86/ branch android_11_study_ck
    project device/generic/mini-emulator-x86_64/ branch android_11_study_ck
    project device/generic/opengl-transport/ branch android_11_study_ck

AOSP 目录简介

目录结构
https://elinux.org/Master-android

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
./
├── art
├── bionic
├── bootable
├── build
├── compatibility
├── cts
├── dalvik
├── developers
├── development
├── device
├── external
├── frameworks
├── hardware
├── kernel
├── libcore
├── libnativehelper
├── out
├── packages
├── pdk
├── platform_testing
├── prebuilts
├── sdk
├── system
├── test
├── toolchain
└── tools
  • abi(Application Binary Interface) https://developer.android.com/ndk/guides/abis

  • art(Android runtime) https://source.android.com/devices/tech/dalvik/

  • bionic 一些基础库

    • libm(library math)
    • libc(library c):在 glibc 的基础上做了裁剪与修改的,为了规避GNU GPL等商业行为的约束
    • libstdc++(library standard C++):并非完整版,只做了简单支持
      linker:装载链接相关库
  • bootable
    bootable 下仅包含 recovery 此文件夹,其实就是启动 Android recovery 模式相关的代码

  • build
    Android Build 系统,用来定制各种编译规则。主要由 makefile 组成。
    比如在编译时要执行的 source build/envsetup.sh 就位于 build 下

  • cts(Compatibility Test Suite)
    一个自动化测试工具 CTS

  • dalvik
    dalvik 虚拟机 , https://source.android.com/devices/tech/dalvik/

  • developers
    一些可运行的 Android 示例项目,可以单独拉出来运行

  • device
    包含不同品牌手机独有的设备信息

  • external
    一些开源的第三方组件,这里仅列了一下大家比较熟悉的如glide、junit、okhttp、sqlite 等

  • frameworks
    Android 中大家熟悉的 Frameworks,应用程序框架层

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    av
    base
    compile
    data-binding
    ex
    mff
    minikin
    ml
    multidex
    native
    opt
    rs
    support
    volley
    webview
    wilhelm
    • Android support 包 com.android.support:support-v4、v7 等都位于 frameworks/support 文件夹下
    • webview 就位于 frameworks/webview 文件夹下
    • 各种 Service,比如ActivityManagerService、SystemService、WindowManagerService、InputManagerService等就位于 frameworks/base 文件夹下
    • keystore、opengl 等也位于 frameworks/base 文件夹下
  • hardware
    包含了 android HAL(硬件抽象层)相关代码。硬件抽象层介于 Linux内核驱动程序与 Android 系统之间。对 Linux 驱动进行了封装,使操作系统级别可以忽略底层实现的细节。

  • libcore
    一些核心库

  • libnativehelper
    JNI 相关的一些类

  • ndk
    原生开发工具包

  • out
    编译完后输出的所有相关文件都位于此文件夹下,包括生成的各种 img 就位于 out/target/product/hammerhead 下

  • packages
    各种内置的 apk、ContentProvider、输入法、壁纸等

    • 蓝牙、浏览器、相机、邮件、音乐、NFC 等都位于 packages/apps 下面
    • MediaProvider、DownloadProvider、MmsProvider等都位于 packages/providers 下
    • 壁纸相关位于 packages/wallpapers 下
  • pdk(Platform Development Kit)
    平台开发套件,仅包含了一些供硬件抽象层开发使用的必要组件,供一些 OEM 厂商用来适配及测试最新的Android 系统,加快第三方厂商的更新速度。
    加快OEM厂商的update速度

  • prebuilts
    一些预构建成二进制的库 prebuilts
    https://developer.android.com/ndk/guides/prebuilts

  • system
    Android 的部分系统源码及一些工具,主要是在各种 java 启动程序起来前的部分。工具比如 adb、fastboot、keystore 等,其他如 mkbootimg、init 进程等

  • vendor
    包含不同供应商的私有的二进制库

参考