美文网首页
aosp编译android14,启动Goldfish模拟器

aosp编译android14,启动Goldfish模拟器

作者: 梧叶已秋声 | 来源:发表于2024-05-20 10:52 被阅读0次

本地存在一套main分支的aosp代码,由于main分支下的build/make/target/product/ 下不存在sdkx_xxx.mk(这种是带Goldfish模拟器的)这种配置文件,只能lunch aosp_cf_x86_64_phone-xxx这种,这种是Cuttlefish模拟器,所以需要切分支,切到android14-release。

进入.repo/manifests,切manifest仓的分支,并关联远程分支。
git checkout -b android14-release origin/android14-release,执行git pull

然后执行repo sync -j4 ,就会拉代码。

执行repo start android14-release --all ,确保所有git仓在此分支下。

使用repo sync的时候总是Failed to remove xxx,删除不存在分git仓库失败。
例如

Deleting obsolete path /F/android/tools/rr_prebuilt
Failed to remove /F/android/tools/rr_prebuilt/.git
error: Failed to delete obsolete path /F/android/tools/rr_prebuilt
       remove manually, then run sync again

执行sync.py的时候,失败,无法自动移除不存在于manifest中的仓库。
https://gerrit.googlesource.com/git-repo/+/maint/subcmds/sync.py
一开始我以为是权限问题,给repo 和 aosp目录都配置了权限,但是还是不行,偶然发现的
解决办法:执行下repo init -u,具体原因未知。可能是因为,切manifest之后要执行下repo init -u才行。只切.repo/manifests下的git好像不行。
执行
repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android14-release
default.xml如下所示

<?xml version="1.0" encoding="UTF-8"?>
<manifest>

  <remote  name="aosp"
           fetch=".."
           review="https://android-review.googlesource.com/" />
  <default revision="android14-release"
           remote="aosp"
           sync-j="4" />

  <superproject name="platform/superproject" remote="aosp"/>
  <contactinfo bugurl="go/repo-bug" />

  <project path="build/make" name="platform/build" groups="pdk" >
    <linkfile src="CleanSpec.mk" dest="build/CleanSpec.mk" />
    <linkfile src="buildspec.mk.default" dest="build/buildspec.mk.default" />
    <linkfile src="core" dest="build/core" />
    <linkfile src="envsetup.sh" dest="build/envsetup.sh" />
    <linkfile src="target" dest="build/target" />
    <linkfile src="tools" dest="build/tools" />
  </project>
.......

另外,执行的时候报错,fatal: cannot obtain manifest 。

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android14-release
来自 https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
 ! [已拒绝]              android-14.0.0_r29      -> android-14.0.0_r29  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r30      -> android-14.0.0_r30  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r31      -> android-14.0.0_r31  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r32      -> android-14.0.0_r32  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r33      -> android-14.0.0_r33  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r34      -> android-14.0.0_r34  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r35      -> android-14.0.0_r35  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r36      -> android-14.0.0_r36  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r37      -> android-14.0.0_r37  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.1-beta2   -> studio-2024.1.1-beta2  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.1-canary8 -> studio-2024.1.1-canary8  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.2-canary1 -> studio-2024.1.2-canary1  (会破坏现有的标签)
来自 https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest
 ! [已拒绝]              android-14.0.0_r29      -> android-14.0.0_r29  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r30      -> android-14.0.0_r30  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r31      -> android-14.0.0_r31  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r32      -> android-14.0.0_r32  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r33      -> android-14.0.0_r33  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r34      -> android-14.0.0_r34  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r35      -> android-14.0.0_r35  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r36      -> android-14.0.0_r36  (会破坏现有的标签)
 ! [已拒绝]              android-14.0.0_r37      -> android-14.0.0_r37  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.1-beta2   -> studio-2024.1.1-beta2  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.1-canary8 -> studio-2024.1.1-canary8  (会破坏现有的标签)
 ! [已拒绝]              studio-2024.1.2-canary1 -> studio-2024.1.2-canary1  (会破坏现有的标签)
fatal: cannot obtain manifest https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest

解决办法清除本地标签。
首先,清除本地的标签,然后重新初始化和同步仓库:

cd /F/aosp/.repo/manifests
git tag -l | xargs git tag -d

然后再执行

repo init -u https://mirrors.tuna.tsinghua.edu.cn/git/AOSP/platform/manifest -b android14-release

再配置一下信息,就可以正常初始化了。

由于android 默认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 133dc7354e..a0ecec4c06 100644
--- a/target/product/AndroidProducts.mk
+++ b/target/product/AndroidProducts.mk
@@ -92,3 +92,4 @@ COMMON_LUNCH_CHOICES := \
     aosp_arm-eng \
     aosp_x86_64-eng \
     aosp_x86-eng \
+    sdk_phone_x86_64-eng \

编译

source build/envsetup.sh
lunch sdk_phone_x86_64-eng
make -j10

编译完成后,在此窗口下(确保环境变量)执行emulator命令即可Goldfish启动模拟器。注意:需确保没有启动VitualBox等虚拟机。

如果需要生成AVD镜像并使用,生成镜像使用 make emu_img_zip 即可。

启动可以参考这篇。
AOSP 编译真机镜像与AVD镜像
直接覆盖system image后,重启android studio后无法启动模拟器,提示missing system image ,但是可以通过命令行启动。

emulator -list-avds
emulator @Small_Phone_API_34

Small_Phone_API_34是模拟器的名称。
参考链接:
android 12 源码编译与虚拟机调试
编译Android14 AOSP原生代码并在X86模拟器中运行
AOSP 编译真机镜像与AVD镜像
使用Android模拟器虚拟设备

相关文章

网友评论

      本文标题:aosp编译android14,启动Goldfish模拟器

      本文链接:https://www.haomeiwen.com/subject/mannfjtx.html