android 12 源码编译与虚拟机调试
这里写自定义目录标题android 12编译环境搭建安装android 12环境依赖android 12源码下载下载repo工具代码下载android 12 编译pixel 系列kernel代码下载pixel 系列kernel代码编译启动虚拟机镜像烧写参考文档功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居
android 12 源码编译与虚拟机调试
android 12编译环境搭建
这是android系列的第一篇,介绍android 开发环境的搭建和调试过程。下面在ubuntu20.04下演示环境搭建的过程。
安装android 12环境依赖
环境依赖参考文档: 搭建编译环境
sudo apt-get install git-core gnupg flex bison build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386 libncurses5 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libgl1-mesa-dev libxml2-utils xsltproc unzip fontconfig
android 12源码下载
下载repo工具
repo工具下载
AOSP代码通过git进行管理,使用repo管理多个git仓库,下载代码前需要下载repo工具。
对于ubuntu,在ubuntu的软件源中有repo工具,可以直接通过apt安装:
# Debian/Ubuntu.
$ sudo apt-get install repo
或者通过执行下面的脚本进行安装:
$ mkdir -p ~/.bin
$ PATH="${HOME}/.bin:${PATH}"
$ curl https://storage.googleapis.com/git-repo-downloads/repo > ~/.bin/repo
$ chmod a+rx ~/.bin/repo
国内repo工具修改
由于国内无法google服务器下载AOSP代码,所以需要修改repo工具从国内镜像服务器下载。
例如:从科大源下载,通过vim工具修改repo脚本中的REPO_URL为 https://gerrit-googlesource.proxy.ustclug.org/git-repo
vim ~/.bin/repo
添加143行:
140 # repo default configuration
141 #
142 REPO_URL = os.environ.get('REPO_URL', None)
143 REPO_URL = 'https://gerrit-googlesource.proxy.ustclug.org/git-repo'
144 if not REPO_URL:
145 REPO_URL = 'https://gerrit.googlesource.com/git-repo'
146 REPO_REV = os.environ.get('REPO_REV')
147 if not REPO_REV:
148 REPO_REV = 'stable'
repo命令参考文档:repo
代码下载
国内无法直接访问,可以使用清华源或者科大的AOSP源。
下面以下载android12 r3代码为例说明:
- 创建android12_12.1.0.r3目录,并进入
- 初始化代码仓
repo init -u git://mirrors.ustc.edu.cn/aosp/platform/manifest -b android-12.1.0_r3
如果要下载其他分支的代码,修改-b参数即可。
分支信息参考android分支说明.
- 同步代码
androi代码较大,同步代码会耗时比较久,建议PC上至少有200G可用空间。下面是同步代码的命令,使用8线程同步。
repo sync -c -j8
代码下载参考文档: 代码下载
代码编译
编译分为初始化编译环境、选择编译产品、编译三个步骤:
- 初始化编译环境
source build/envsetup.sh
build/envsetup.sh是个shell脚本,此脚本中定义了android编译、代码搜索、文件搜索、目录之间跳转等非常有用的命令。由于android代码量大,目录比较深,有这些命令大大提高了效率,详细说明请查看此文件,或输入hmm命令查看帮助。
- 选择产品
使用lunch选择要编译的产品,此文档中以编译x86_x64 emulator模拟器镜像为例进行说明。
(1). 修改AndroidProduct.mk使支持x86_x64镜像编译
由于android12 默认lunch默认选不到模拟器镜像,所以首先需要修改mk。
修改build/make/target/product/AndroidProducts.mk文件,添加sdk_phone_x86_64-eng支持
diff --git a/target/product/AndroidProducts.mk b/target/product/AndroidProducts.mk
index 7d9d90e92a..419cccb80a 100644
--- a/target/product/AndroidProducts.mk
+++ b/target/product/AndroidProducts.mk
@@ -84,3 +84,4 @@ COMMON_LUNCH_CHOICES := \
aosp_arm-eng \
aosp_x86_64-eng \
aosp_x86-eng \
+ sdk_phone_x86_64-eng \
参考修改.
(2). 执行lunch命令选择产品
lunch sdk_phone_x86_64-eng
- 执行编译
输入m命令直接开始编译,也可以手动指定编译的线程。
~/code/android12_12.1.0.r3$ m
build/make/core/soong_config.mk:195: warning: BOARD_PLAT_PUBLIC_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PUBLIC_SEPOLICY_DIRS instead.
build/make/core/soong_config.mk:196: warning: BOARD_PLAT_PRIVATE_SEPOLICY_DIR has been deprecated. Use SYSTEM_EXT_PRIVATE_SEPOLICY_DIRS instead.
编译完成之后,输出如下:
......
#### build completed successfully (29:45 (mm:ss)) ####
编译生成的镜像,在out/target/product/emulator_x86_64路径下,生成的镜像如下:
out/target/product/emulator_x86_64$ ls -ah *.img
cache.img product.img ramdisk.img super_empty.img system_ext-qemu.img userdata.img vendor_boot-debug.img vendor.img
dtb.img product-qemu.img ramdisk-qemu.img super.img system.img userdata-qemu.img vendor_boot.img vendor-qemu.img
encryptionkey.img ramdisk-debug.img ramdisk-test-harness.img system_ext.img system-qemu.img vbmeta.img
模拟器执行
编译成功之后,直接在编译窗口输入emulator命令,即可启动android模拟器,并且模拟器使用的镜像是刚编译的镜像。
/code/android12_12.1.0.r3/out/target/product/emulator_x86_64$ emulator
emulator: Android emulator version 30.9.0.0 (build_id 7651928) (CL:N/A)
2022-04-21 15:06:36.680 bluetooth - /buildbot/src/android/emu-master-dev/system/bt/vendor_libs/test_vendor_lib/model/setup/device_boutique.cc:33 - Register: Registering beacon_swarm
2022-04-21 15:06:36.680 bluetooth - /buildbot/src/android/emu-master-dev/system/bt/vendor_libs/test_vendor_lib/model/setup/device_boutique.cc:33 - Register: Registering beacon
执行效果如下:
注意:
- 此处的emulator命令是代码编译时,source build/envsetup.sh和lunch设置的命令,emulator的实际位置在android源码的prebuilts/android-emulator下面:
~/code/android12_12.1.0.r3/out/target/product/emulator_x86_64$ which emulator
/home/zdm/code/android12_12.1.0.r3/prebuilts/android-emulator/linux-x86_64/emulator
- 如果执行模拟器时出现下面的错误
mulator: ERROR: Running multiple emulators with the same AVD is an experimental feature.
Please use -read-only flag to enable this feature.
表示已经有模拟器在运行了,或者是由于模拟器异常退出导致,删除下面两个lock文件即可正常:
$ croot
$ cd out/target/product/emulator_x86_64
$ ls *.lock
hardware-qemu.ini.lock multiinstance.lock
模拟器命令参考手册
编译模拟器内核相关
https://gabrio-tognozzi.medium.com/run-android-emulator-with-a-custom-kernel-547287ef708c
https://blog.csdn.net/ldswfun/article/details/119786846
https://download.csdn.net/learn/35479/529617?spm=1002.2001.3001.4157
android调试等等
http://www.juneleo.cn/47a3736f9762/
https://www.cxyzjd.com/article/u013541140/52221290
参考文档
更多推荐
所有评论(0)