网上一般的操作,是先创建一个正常的AVD,然后将自己编译生成的镜像,替换AVD中的文件。本文介绍一种更为优雅的做法(参考Android虚拟设备作为开发平台 | Android Open Source Project)。
构建镜像包
下载代码:
mkdir AOSP
cd AOSP
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android-11.0.0_r48
repo sync -d -c --no-tags -j80
编译:
. build/envsetup.sh
lunch aosp_car_x86_64-userdebug
make -j80
PS:据兄弟伙反馈,Android12 及其以后不能lunch aosp_开头的,否则不会生成模拟器相关的.img。需要sdk开头的比如:lunch sdk_car_x86_64-userdebug!!!
生成镜像包:
m emu_img_zip
注意,emu_img_zip只有在Android11之后才有,Android 11可参考如下修改:
修改device/generic/goldfish/Android.mk:
新增文件 tasks/emu_img_zip.mk
# Rules to generate a zip file that contains google emulator images
# and other files for distribution
ifeq ($(filter $(TARGET_PRODUCT), qemu_trusty_arm64),)
ifeq ($(filter $(MAKECMDGOALS), sdk win_sdk sdk_repo goog_emu_imgs),)
emulator_img_source_prop := $(TARGET_OUT_INTERMEDIATES)/source.properties
$(emulator_img_source_prop): $(PRODUCT_SDK_ADDON_SYS_IMG_SOURCE_PROP)
@echo Generate $@
$(hide) mkdir -p $(dir $@)
$(hide) sed \
-e 's/$${PLATFORM_VERSION}/$(PLATFORM_VERSION)/' \
-e 's/$${PLATFORM_SDK_VERSION}/$(PLATFORM_SDK_VERSION)/' \
-e 's/$${PLATFORM_VERSION_CODENAME}/$(subst REL,,$(PLATFORM_VERSION_CODENAME))/' \
-e 's/$${TARGET_ARCH}/$(TARGET_ARCH)/' \
-e 's/$${TARGET_CPU_ABI}/$(TARGET_CPU_ABI)/' \
$< > $@ && sed -i -e '/^AndroidVersion.CodeName=\s*$$/d' $@
INTERNAL_EMULATOR_PACKAGE_FILES := \
$(target_notice_file_txt) \
$(emulator_img