参考https://lug.ustc.edu.cn/wiki/mirrors/help/aosp



搭建编译环境

    笔者使用的操作系统时ubuntu16.04。参考https://source.android.com/source/initializing

$ sudo apt-get update
$ sudo apt-get install openjdk-8-jdk
$ 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 lib32z-dev ccache \
  libgl1-mesa-dev libxml2-utils xsltproc unzip

    



安装 Repo

    参考https://source.android.com/source/downloading

    Repo 是一款工具,可让您在 Android 环境中更轻松地使用 Git。

    要安装 Repo,请执行以下操作:

  1. 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中
$ mkdir ~/bin
$ PATH=~/bin:$PATH
  1. 下载 Repo 工具,并确保它可执行:
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
$ chmod a+x ~/bin/repo
## 如果上述 URL 不可访问,可以用下面的:
## curl https://storage-googleapis.proxy.ustclug.org/git-repo-downloads/repo > ~/bin/repo


初始同步

    第一次同步数据量特别大,如果网络不稳定,中间失败就要从头再来了。科大源 提供了打包的 AOSP 镜像,为一个 tar 包,大约 25G(android O,单文件 25G,注意磁盘格式要支持)。这样 就可以通过 HTTP 的方式下载,该方法支持断点续传。

$ mkdir Android
$ cd Android
  1. 下载源码
$ wget http://ipv6.mirrors.ustc.edu.cn/aosp-monthly/aosp-latest.tar # 这里使用ipv6下载初始化包
$ tar -vxzf aosp-latest.tar
$ cd aosp #这时ls什么也看不到,因为只有一个隐藏的.repo目录

    下载地址 http://mirrors.ustc.edu.cn/aosp-monthly/ 

    校园网可用ipv6下载不耗流量。http://ipv6.mirrors.ustc.edu.cn/aosp-monthly/

  1. 修改同步地址 修改.repo/manifests.git/config,将
url = https://android.googlesource.com/platform/manifest

改成

url = git://ipv6.mirrors.ustc.edu.cn/aosp/platform/manifest

即可。

  1. 同步
$ repo sync # 同步

在执行repo sync时出错 error: .repo/manifests/: contains uncommitted changes
网上的解决办法是:

$ cd .repo/manifests
$ git stash
$ git clean -f -d

但是我的还是未解决,最后找到一个回答

git config core.filemode false

(加入忽略文件权限的配置)
再输入repo sync总算成功了,等待数十分钟的初始化,完成后得到aosp源码了


编译

    参考https://source.android.com/source/building

$ source build/envsetup.sh
  1. 选择目标
$ lunch aosp_arm-eng
  1. 编译代码
$ make -j4


模拟器运行

$ emulator

    emulator位于Android/aosp/prebuilts/android-emulator/linux-x86_64/目录下。从控制台打开需要将此目录加到系统PATH环境变量中,或者在当前控制台下执行

$ source build/envsetup.sh

    启动Android模拟器需要四个文件,它们分别是zImage、system.img、userdata.img和ramdisk.img,其中,前面一个是Linux内核镜像文件,而后面三个是Android系统镜像文件。如果不带任何参数来运行emulator命令,那么Android模拟器默认使用的zImage文件是位于源代码根目录下的子目录out/host/linux-x86/bin中的kernel-qemu文件,而默认使用的system.img、userdata.img和ramdisk.img文件则位于ANDROID_PRODUCT_OUT目录中。ANDROID_PRODUCT_OUT是一个环境变量,将它的值设置为Android源代码编译结果输出目录;如果不设置ANDROID_PRODUCT_OUT环境变量,就需要指定上述四个文件来启动Android模拟器,如下所示:

$ emulator -kernel ./prebuilt/android-arm/kernel/kernel-qemu -sysdir ./out/target/product/generic -system system.img -data userdata.img -ramdisk ramdisk.img