本地存在一套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模拟器虚拟设备