01 前言
在上一篇【Android-源码编译】中,我们成功编译了源码和启动了模拟器;但是做Framework开发的同学在实际工作环境下,可能编译服务器和开发电脑不是同一个,甚至
LINUX编译服务器都没有桌面系统,无法直接使用模拟器(当然也可以用xlaunch)。需要将自定义的模拟器镜像导入到开发电脑上的Android Studio里; 我们本篇文章将基于Android 12实现此需求
02 课前知识
1. Android 模拟器相关的资料在哪里?
【AOSP官方文档介绍】 这里可以看到官方的介绍,但是实际的操作过程和官方有些出入(根据经验来看完全参考次介绍大概率不会成功)
03 编译模拟器
step1: 执行lunch 产品
注意:Android 12及其之后想要编译源码同时产生模拟器相关的镜像,必须
lunch sdk_开头的 比如lunch sdk_car_x86_64-userdebug; Android 11可以lunch aosp_开头的
如果你是想编译Android 11及其之前的模拟器请强烈参考此文【编译AAOS镜像并导入Android Studio】
下面步骤为Android 12及其之后的操作说明(默认你已下载好源码,如没有请参考【Android-源码下载】)
source build/envsetup.sh
lunch sdk_car_x86_64-userdebug //(如果是Android11 可以用使用aosp_car_x86_64-userdebug)
make
step2: 打包模拟器镜像包
make -j32 sdk sdk_repo
make sdk sdk_repo 命令会在 out/host/linux-x86/sdk/sdk_car_x86_64 下创建两个文件:
sdk-repo-linux-system-images-eng.[username].ziprepo-sys-img.xml(此文件我们本文没用到,因为配置之后也找不到本地镜像)
到此处,模拟器镜像就成功编译出来了。
04 导入Android Studio
step1: 自定义custom-repo-sys-img.xml描述文件
Android 12及其以下,需要配置repo-sys-img.xml文件,理论上将上述生成的此文件文职到Android Studio的自定义站点获取就可以,但实际上我这边依旧在创建模拟器的时候找不到这个本地镜像;所以参考了【编译AAOS镜像并导入Android Studio】,自定义了一个custom-repo-sys-img.xml 内容如下:
<?xml version='1.0' encoding='utf-8'?>
<sys-img:sdk-sys-img xmlns:sys-img="http://schemas.android.com/sdk/android/repo/sys-img2/01" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<license id="android-sdk-license" type="text">bala bala</license>
<channel id="channel-0">stable</channel>
<remotePackage path="system-images;android-32;android-automotive;x86_64">
<type-details xsi:type="sys-img:sysImgDetailsType">
<api-level>32</api-level>
<tag>
<id>android-automotive-playstore</id><!--尾缀有playstore,创建模拟器时必须要选择有此标识的-->
<display>Automotive Custom By ME</display> <!--创建模拟器时显示的镜像名称-->
</tag>
<vendor>
<id>xxx</id>
<display>My Automotive Build.</display>
</vendor>
<abi>x86_64</abi>
</type-details>
<revision>
<major>3</major>
</revision>
<display-name>Android Automotive with My System Image</display-name>
<uses-license ref="android-sdk-license"/>
<channelRef ref="channel-0"/>
<archives>
<archive>
<complete>
<size>845778825</size> <!--大小 可以从编译生成xml中获取-->
<checksum>c038a32dbe2516c0e41b5b261e3fb6cb03ba4498</checksum><!--shasum值 可以从编译生成xml中获取,也可以自己生成-->
<url>file:///D:/Android/imgs/sdk-repo-linux-system-images-eng.xxx.zip</url><!--编译生成的镜像包路径-->
</complete>
</archive>
</archives>
</remotePackage>
</sys-img:sdk-sys-img>
step2: 在AS的Settings中添加sdk update sites
打开Android Studio的设置界面中的SDK界面
加入自定义的站点路径
step3: 创建emulator模拟器 上面的xml tagid有playstore后缀所以需要有三角形的设备吗,当前这里是Automotive设备原因是我们的镜像lunch 为 sdk_car_xxx 以及在xml中配置的类型为automotive 所对应的
选择我们得本地镜像
继续下一步,直接finish
此时模拟器就创建完成了,能够在列表中看到
05 模拟器启动
打开方式一(不能remount)
正常情况下,我们会直接在Andorid Studio里面通过点击图片启动模拟器,如下
并且也能正常启动成功,如下
但是,当你想推包到Framework时会发现只能root 不能 remount , disable-verity也会报错
难道这样的镜像也不能remount 那整了半天要来有何用。 其实不然,还是有用,只是我们的打开方式不对。
打开方式二(可以remount)
在cmd面板进入Android sdk在本地的目录,然后进入emulator目录,通过命令启动:
emulator.exe -writable-system -avd Automotive_1024p_landscape_API_32
注意事项:
- 命令执行前要保证模拟器是关闭状态
- -avd 后面是模拟器的avdId,id如何看,通过使用Android Studio 模拟器参数界面,如下:
此时,等待模拟器正常启动,随后执行
adb root
adb disable-verity
adb reboot
adb root
adb remount
完成
恭喜我们remount成功,开始开发吧!
06 感谢参考链接
【模拟器】Android Studio模拟器运行自己的编译的Android源码镜像(Android9.0~Android12已自测)