前言
在Ubuntu系统下编译Android系统。哎呀不知道是不是换了新电脑的缘故,这次编译居然从安装JDK和配置环境下载源码他喵的一次成功了,想之前真的是那台破电脑一堆问题最后好不容易才成功,不知道是不是跟我这台电脑配置的关系以及内存还有安装ubuntu的时候那几个分区的大小有没有关系。几乎每个分区的大小都是推荐大小的好几倍,尤其是那个交换空间分区不知道是不是。记录一下编译的过程。
安装JDK
编译Android系统需要JDK,可以在命令行安装:1sudo apt install openjdk-8-jdk
没有换源,一次成功,有的时候因为墙的原因可能会安装不了可以换阿里的源。
下载源码
下载源码是用的清华的镜像,以下几个步骤:
下载 repo 工具:1
2
3
4mkdir ~/bin
PATH=~/bin:$PATH
curl https://mirrors.tuna.tsinghua.edu.cn/git/git-repo > ~/bin/repo
chmod a+x ~/bin/repo
建立工作目录:1
2mkdir android_9.0_r3
cd android_9.0_r3
安装python:1sudo apt-get install python
初始化仓库:1repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest
如果需要某个特定的 Android 版本(列表):1repo init -u https://aosp.tuna.tsinghua.edu.cn/platform/manifest -b android_9.0_r3
同步源码树(以后只需执行这条命令来同步):1repo sync
编译源码
在AOSP的根目录,输入如下的命令:1source build/envsetup.sh
选择编译目标:1lunch
lunch命令是envsetup.sh里定义的一个命令,用来让用户选择编译目标。
会有以下信息输出:1
55You'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. aosp_car_arm-userdebug
8. aosp_car_arm64-userdebug
9. aosp_car_x86-userdebug
10. aosp_car_x86_64-userdebug
11. mini_emulator_arm64-userdebug
12. m_e_arm-userdebug
13. m_e_mips64-eng
14. m_e_mips-userdebug
15. mini_emulator_x86_64-userdebug
16. mini_emulator_x86-userdebug
17. uml-userdebug
18. aosp_cf_x86_auto-userdebug
19. aosp_cf_x86_phone-userdebug
20. aosp_cf_x86_tablet-userdebug
21. aosp_cf_x86_tablet_3g-userdebug
22. aosp_cf_x86_tv-userdebug
23. aosp_cf_x86_wear-userdebug
24. aosp_cf_x86_64_auto-userdebug
25. aosp_cf_x86_64_phone-userdebug
26. aosp_cf_x86_64_tablet-userdebug
27. aosp_cf_x86_64_tablet_3g-userdebug
28. aosp_cf_x86_64_tv-userdebug
29. aosp_cf_x86_64_wear-userdebug
30. cf_x86_auto-userdebug
31. cf_x86_phone-userdebug
32. cf_x86_tablet-userdebug
33. cf_x86_tablet_3g-userdebug
34. cf_x86_tv-userdebug
35. cf_x86_wear-userdebug
36. cf_x86_64_auto-userdebug
37. cf_x86_64_phone-userdebug
38. cf_x86_64_tablet-userdebug
39. cf_x86_64_tablet_3g-userdebug
40. cf_x86_64_tv-userdebug
41. cf_x86_64_wear-userdebug
42. aosp_marlin-userdebug
43. aosp_marlin_svelte-userdebug
44. aosp_sailfish-userdebug
45. aosp_walleye-userdebug
46. aosp_walleye_test-userdebug
47. aosp_taimen-userdebug
48. hikey-userdebug
49. hikey64_only-userdebug
50. hikey960-userdebug
Which would you like? [aosp_arm-eng]
选择42,按回车。这可以安装到pixel设备(之前的nexus也是)
编译的几种不同的类型:user:用来正式发布到市场的版本,权限受限,如没有 root 权限,不能 dedug,adb默认处于停用状态。
userdebug:在user版本的基础上开放了 root 权限和 debug 权限,adb默认处于启用状态。一般用于调试真机。
eng:开发工程师的版本,拥有最大的权限(root等),具有额外调试工具的开发配置。一般用于模拟器。
开始编译:1make -j16
编译好后的状态,会有一个out文件夹,因为只有nexus 6p没有pixel手机了,所以没有刷进手机,想来跟nexus刷这些镜像文件没什么大的区别吧。
![](/picture/2019-03-15 23-52-10.png)
一个小时两分钟编译好,想之前用笔记本用了半天还不止。。。
编译后产生的文件:system.img:系统镜像,里面包含了Android系统主要的目录和文件,通过init.c进行解析并mount挂载到/system目录下。
userdata.img:用户镜像,是Android系统中存放用户数据的,通过init.c进行解析并mount挂载到/data目录下。