准备工作
1.VirtualBox,下载地址 www.virtualbox.org/wiki/Downlo… 我的版本是6.0.20。
2.Ubuntu18.04 下载地址 ubuntu.com/download/al… 我的版本是18.04LTS
3.Nexus 6P,你有新款的Google手机也可以,其他手机是不行的没有对应的驱动
- 注意事项:最好给Ubuntu分配200G以上的磁盘空间,我电脑是16G内存给Ubuntu分配8G内存(内存太小编译可能不通过),我电脑CPU是i5-4590差一点,给Ubuntu分配4个处理器。磁盘大小分配了之后好像不能修改,内存和处理器数可以在关闭虚拟机在设置里面调整。
1. 下载 repo工具
-
安装git、openjdk-8、python等工具
sudo apt-get update
sudo apt-get install git
sudo apt-get install openjdk-8-jdk
sudo apt-get install python
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
mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
2. 下载源码
-
新建源码目录,进入源码目录
mkdir aosp
cd aosp
-
配置repo使用tuna的镜像源进行更新,可以将如下内容复制到你的~/.bashrc最后面:
1). 命令行通过gedit打开.bashrc文件gedit ~/.bashrc
2). 将export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/
粘贴到最后
3). 命令行输入source ~/.bashrc
刷新环境变量 -
给git添加自己的邮箱和姓名:
git config --global user.email "username@gmail.com"
git config --global user.name "username"
-
初始化仓库:
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
-
初始化并指定版本,因为我是Nexus 6P手机,所以下载的Android必须支持Nexus 6P,对应关系查看地址: source.android.google.cn/setup/start…

因为我的手机是Nexus 6P,我这里选择的版本是android-7.1.1_r27,你可以根据自己的手机来选择对应的版本
repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android-7.1.1_r27
6. 同步源码
repo sync
3.编译源码
经过漫长的等待我们同步完成源码,接下来编译:
- 如果android 6.0~8.1的,还的到源码根目录配置jack-admin
1).查看病并且开启jack服务
2). 如果命令不存在。则需要安装,如下命令:./prebuilts/sdk/tools/jack-admin list-server prebuilts/sdk/tools/jack-admin start -server prebuilts/sdk/tools/jack-admin stop -server
安装完成后,重新开启。cd prebuilts/sdk/tools/ ./jack-admin install-server jack-launcher.jar jack-server-4.8.ALPHA.jar
- 开始编译
1). 脚本初始化环境:source build/envsetup.sh
2). 删除上一次编译的结果,初次编译可以不需要这一步:make clobber
3). 选择编译目标
会有以下信息输出:lunch
You're building on Linux Lunch menu... pick a combo: 1. aosp_arm-eng 2. aosp_arm64-eng 3. aosp_mips-eng 4. aosp_mips64-eng 5. aosp_x86-eng 6. aosp_x86_64-eng 7. full_fugu-userdebug 8. aosp_fugu-userdebug 9. mini_emulator_arm64-userdebug 10. m_e_arm-userdebug 11. m_e_mips64-eng 12. m_e_mips-userdebug 13. mini_emulator_x86_64-userdebug 14. mini_emulator_x86-userdebug 15. aosp_dragon-userdebug 16. aosp_dragon-eng 17. aosp_marlin-userdebug 18. aosp_sailfish-userdebug 19. aosp_flounder-userdebug 20. aosp_angler-userdebug 21. aosp_bullhead-userdebug 22. hikey-userdebug 23. aosp_shamu-userdebug Which would you like? [aosp_arm-eng]
意思就是要你选择编译目标的格式,编译目标的格式组成为BUILD-BUILDTYPE,比如aosp_arm-eng的BUILD为aosp_arm,BUILDTYPE为eng。
其中BUILD表示编译出的镜像可以运行在什么环境,aosp代表Android开源项目,arm表示系统是运行在arm架构的处理器上。 更多参考官方文档( source.android.google.cn/source/runn… )。 BUILDTYPE 指的是编译类型,有以下三种:
- user:用来正式发布到市场的版本,权限受限,如没有 root 权限,不能 dedug,adb默认处于停用状态。
- userdebug:在user版本的基础上开放了 root 权限和 debug 权限,adb默认处于启用状态。一般用于调试真机。
- eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置。一般用于模拟器。 如果你没有Nexus设备,只想编译完后运行在模拟器查看,那么BUILD可以选择aosp_x86,BUILDTYPE选择eng,Which would you like? [aosp_arm-eng]后面直接输入对应序号5就可以。
我这里的手机是Nexus 6p查看对应表可以看到支持的格式是aosp_angler-userdebug,所以我输入20,回车.
4). 开始编译
make -j4
-jN根据自己的CPU核心来设置,等待编译完成,我电脑性能差编译花了差不多4个小时
5).最终会在源码跟目录out/target/product/angler目录下生成镜像文件:
* system.img
:系统镜像
* ramdisk.img
:根文件系统镜像
* userdata.img
:用户数据镜像
* recovery.img
:recovery镜像
* boot.img
:启动镜像
* vendor.img
:驱动镜像
4. 刷机
-
电脑连接手机,启动fastboot
adb reboot bootloader
-
我的电脑在手机处于fastboot界面后VirtualBox与手机就连不上了,所以我把boot.img、system.img、recovery.img、vendor.img拷贝到windows上来,我们只刷这几个镜像文件。
-
手机已经解锁的跳过此步
#对于新款设备(2015 年及之后发布的设备) fastboot flashing unlock #对于老款设备(2014 年及之前发布的设备) fastboot oem unlock
-
配置adb环境变量,或者到adb目录下执行命令
fastboot flash system {system.img的路径} fastboot flash recovery {recovery.img的路径} fastboot flash boot {boot.img的路径} fastboot flash vendor {vendor.img的路径}
重启手机完成刷机。
参考连接:
www.jianshu.com/p/4df53ed23…
blog.csdn.net/qq_35460159…
liuwangshu.cn/tags/AOSP基础…