参考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,请执行以下操作:
- 确保主目录下有一个 bin/ 目录,并且该目录包含在路径中
$ mkdir ~/bin
$ PATH=~/bin:$PATH
- 下载 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
- 下载源码
$ 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/
- 修改同步地址 修改.repo/manifests.git/config,将
url = https://android.googlesource.com/platform/manifest
改成
url = git://ipv6.mirrors.ustc.edu.cn/aosp/platform/manifest
即可。
- 同步
$ 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
- 选择目标
$ lunch aosp_arm-eng
- 编译代码
$ 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