IT评测·应用市场-qidao123.com
标题:
基于Ubuntu24.04,下载并编译Android12系统源码 (二)
[打印本页]
作者:
科技颠覆者
时间:
2024-12-30 23:49
标题:
基于Ubuntu24.04,下载并编译Android12系统源码 (二)
1. 前言
上篇文章,我们基于Ubuntu24.04,已经成功下载下来了Android12的源码,这篇文章我们会接着上文,基于Ubuntu24.04来编译Android源码。
2. 编译源码
2.1 了解源码编译的名词
Makefile
: Android平台的一个编译系统,其实就是用Makefile写出来的一个独立的项目,定义了编译的规则,实现了自动化编译。不但要把分散在数百个git库中的代码整合起来,统一编译,而且把产物分门别类地输出到一个目录。打包成手机的Room,还可以生成应用开辟时所使用的SDK,NDK等等,因此采取Makefile编写的编译系统, 也可以称之为Makefile编译系统。
Android.mk
: 是Makefile编译系统的一部门,Android.mk是Android编译情况下的一个特别的makefile文件,他是经过Android编译系统处理的,Android.mk中定义了一个模块必要的参数,使模块随着平台编译。通俗来讲,就是告诉编译系统,以什么样的规则编译源代码,并生成对应的目的文件。
Ninja
: 致力于速率的小型编译系统,假如把其他编译系统看做是高级编程语言,那么Ninja就是汇编,使用Ninja的主要目的就是由于其编译速率非常快。
Soong
: 谷歌用来替代Makefile编译系统,负责解析Android.bp文件,并将其转化为Ninja文件。
Blueprint
: 用来解析Android.bp文件,翻译成Ninja语法的一个文件
kati
: google专门为Android开辟的一个小型的项目,基于Golang和C++,目的是把Android.makefile转化为Ninja文件。
Android.bp
: 用来替换Android.mk的一个配置文件
2.1.1 Android.mk / Ninja / Soong / Blueprint / kati /Android.bp 的概念之间的联系
2.2 准备编译情况
使用build目录中的envsetup.sh脚本来初始化情况,这个脚本会引入其他的一些执行脚本。
source build/envsetup.sh
复制代码
完成初始化情况的一个操纵
make clobber
复制代码
选择编译的目的,是envsetup.sh中定义的一个命令,用来让用户选择编译的目的
lunch
复制代码
比如会表现出,这些可选的编译项
You're building on Linux
Lunch menu... pick a combo:
1. aosp_arm-eng
2. aosp_arm64-eng
3. aosp_blueline-userdebug
4. aosp_blueline_car-userdebug
5. aosp_bonito-userdebug
6. aosp_bonito_car-userdebug
7. aosp_car_arm-userdebug
8. aosp_car_arm64-userdebug
9. aosp_car_x86-userdebug
10. aosp_car_x86_64-userdebug
11. aosp_cf_arm64_auto-userdebug
12. aosp_cf_arm64_phone-userdebug
13. aosp_cf_x86_64_phone-userdebug
14. aosp_cf_x86_auto-userdebug
15. aosp_cf_x86_phone-userdebug
16. aosp_cf_x86_tv-userdebug
17. aosp_coral-userdebug
18. aosp_coral_car-userdebug
19. aosp_crosshatch-userdebug
20. aosp_crosshatch_car-userdebug
21. aosp_flame-userdebug
22. aosp_flame_car-userdebug
23. aosp_sargo-userdebug
24. aosp_sunfish-userdebug
25. aosp_taimen-userdebug
26. aosp_trout_arm64-userdebug
27. aosp_trout_x86-userdebug
28. aosp_walleye-userdebug
29. aosp_walleye_test-userdebug
30. aosp_x86-eng
31. aosp_x86_64-eng
32. arm_krait-eng
33. arm_v7_v8-eng
34. armv8-eng
35. armv8_kryo385-eng
36. beagle_x15-userdebug
37. beagle_x15_auto-userdebug
38. car_x86_64-userdebug
39. db845c-userdebug
40. fuchsia_arm64-eng
41. fuchsia_x86_64-eng
42. hikey-userdebug
43. hikey64_only-userdebug
44. hikey960-userdebug
45. hikey960_tv-userdebug
46. hikey_tv-userdebug
47. pixel3_mainline-userdebug
48. poplar-eng
49. poplar-user
50. poplar-userdebug
51. qemu_trusty_arm64-userdebug
52. silvermont-eng
53. uml-userdebug
54. yukawa-userdebug
55. yukawa_sei510-userdebug
复制代码
这里选项名称的含义
build
: 表现编译出的镜像,可以运行在什么情况
aosp
: 代表Android的一个开源项目
arm/x86等
: 表现运行在ARM/X86处理器的架构上
BUILDTYPE 指的是编译类型,有以下三种:
user
: 用来正式发布到市场的版本,权限受限,如没有root权限,不能 dedug,adb默认处于停用状态。
userdebug
: 在user版本的基础上开放了root权限和debug权限,adb默认处于启用状态。一般用于调试真机。
eng
:开辟工程师的版本,拥有最大的权限(root等),具有额外调试工具的开辟配置。一般用于模拟器。
这里我们要运行在模拟器上,所以可以选30
2.3 举行编译
然后举行编译
make -j 6
复制代码
假如装备的内存不敷或性能不敷,同时执行的任务数,即-j可以设置的小一下,比如设置为1或2,只不过编译的时间会变久。
最终会在 out/target/product/generic_x86/日录生成了三个重要的镜像文件:system.img、userdata.img、ramdisk.img。
system.img
:系统镜像,里面包罗了Android系统主要的目录和文件,通过init.c举行解析并mount挂载到/system目录下。
userdata.img
:用户镜像,是Android系统中存放用户数据的通过init.c举行解析并mount挂载到/data目录下。
ramdisk.img
:根文件系统镜像,包罗一些启动Android系统的重要文件,比如init.rc。
表现出如下信息,就表明编译成功了 : Build completed successfully
2.4 运行假造机
编译完成后,执行emulator
命令运行假造机
emulator
复制代码
遇到的问题 : ubuntu emulator
第一次启动起来了,第二次却提示找不到命令
办理办法 : ubuntu 打开Android模拟器(Android源码编译)提示:emulator
:未找到命令
3. 单编
mm指的是只编译当前目录的模块,不编译所有模块。
当我们只修改了指定目录下的模块时,就可以使用这个命令,从而加快编译速率。
3.1 进入指定目录,执行mm命令
//进入指定目录
cd packages/apps/settings
//执行mm命令
mm
复制代码
3.2 编译成功
表现出如下信息,就表明编译成功了 : Build completed successfully
除了Settings.odex文件,还会在out/target/product/generic_x86/system/priv-app/Settings日录下生生成Settings.apk
3.3 其他单编命令
此外另有以下命令可以举行单编 :
mmm
: 编译指定目录下的模块,不编译它所依赖的其它模块。
mma
: 编译当前目录下的模块及其依赖项。
mmma
: 编译指定路径下所有模块,并且包罗依赖,
3.4 单编完成后,怎么查看效果 ?
方式一
: 可以在编译完成后,借助 adb install -r apk 路径直接将⽣成的 apk ⽂件安装到装备上,假如不是 APK,直接 push 对应的⽂件。
方式二
: 可以编译好完成后,再使⽤ make systemimage ,重新⽣成 system.img,再运⾏模拟器也可。
详见 : 单编完成后,怎么查看效果 ?
3.4.1 怎样查找文件
查找文件 -> 编译产物 out/target/
find <起始目录> -name <文件名>
复制代码
比如可能位于 /out/target/product/generic_x86/system/system_ext/priv-app/Settings/Settings.apk
3.5 单编表现成功后,运行安卓模拟器,并没有见效
可以带上参数-wipe-data
emulator
-wipe-data
复制代码
详见 : Android源码单独编译某个模块
4. 其他
4.1 工具
查看源码
Android Studio for Platform
下载地址 : https://developer.android.google.cn/studio/platform?hl=en
4.2 repo 下载源码中途中断
使用git fetch命令:假如repo sync命令在下载过程中中断,可以实验进入.repo/projects/prebuild目录,并执行git fetch命令来继续同步未完成的源码。这种方法适用于在下载过程中遇到网络问题或其他缘故起因导致下载中断的情况。
4.3 参考
手把手教你编译和调试AOSP源码
带你玩转编译Android系统源码!
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com (https://dis.qidao123.com/)
Powered by Discuz! X3.4