从源代码构建Android - 模拟器和AVDs

15

我已经为模拟器构建了Android源代码。我在 Android Source文档中读到,在成功构建期间,“emulator”的路径会自动添加。然而,我有两个问题:

  1. 如果我打开一个新的shell或关闭现有的shell,“emulator”将不再被找到。难道每次想要运行模拟器时都必须重新构建吗?

  2. 如果模拟器需要AVD,那么在我的机器上没有Android SDK的情况下,我该如何创建和管理它们?

谢谢, Jack

第二部分解决方案。

我需要创建一个名为ANDROID_PRODUCT_OUT的环境变量。从以下命令开始:

emulator -help-build-images

我读到...

模拟器通过查看你的环境中的ANDROID_PRODUCT_OUT变量来检测你是否正在使用Android构建系统。

如果已定义,它应该指向包含生成的系统镜像的特定产品目录。

然后我在“out”目录中搜索了“system.ing”。由于我是为模拟器构建,因此镜像位于:

out/target/product/generic

我在我的.bashrc文件中添加了以下代码:

export ANDROID_PRODUCT_OUT=/home/jack.wootton/code/out/target/product/generic

然后我能够从以下位置运行模拟器:

/home/jack.wootton/code/out/host/linux-x86/bin

第一部分的解决方案。

我不了解Android虚拟设备,所以这个问题仍然存在 - 不过,在成功构建并设置ANDROID_PRODUCT_OUT环境变量后,我不需要提供虚拟设备即可运行模拟器。

更新解决方案

显然,像ANDROID_PRODUCT_OUT这样的变量应该在构建期间自动创建,并使用envSetup.sh脚本。 我想我的环境设置出了问题,因此没有发生这种情况。


嗨,杰克,我能够在不提及-avd的情况下启动单个模拟器,但无法同时启动多个模拟器,出现错误“ERROR:使用相同AVD运行多个模拟器是一项实验性功能”。我不确定如何创建AVDs以便可以同时运行多个模拟器。 (https://stackoverflow.com/questions/61347106/facing-issue-in-running-multiple-emulators-with-aosp) - Toral
5个回答

8

您分享了以下内容:

显然,像 ANDROID_PRODUCT_OUT 这样的变量应该在构建期间自动创建,并使用 envSetup.sh 脚本。我猜我的环境设置出了问题,才导致这种情况发生。

我也尝试使其工作并学到:

  1. lunch full-eng 设置所有适当的环境变量。
  2. 要检查它,只需运行:
    env | grep ANDROID
    您将看到所有适当的环境变量设置。
    这些仅适用于当前 shell!
  3. emulator 然后执行应有的操作。

当我稍后回到 shell 时,我只需再次运行 lunch full-eng 即可恢复我的环境。
希望这也能帮助其他人!


+1,这解决了我的问题,和OP一样。唯一要补充的是,回到shell时,我会运行. build/envsetup.sh然后运行lunch full-eng,因为envsetup提供了额外的变量和命令,最重要的是lunch命令! - MDMoore313

5
只需按照以下步骤操作:
source build/envsetup.sh or . build/envsetup.sh
setpaths

做到了。请确保你从源目录运行它。


1
那是最简单的技巧。感谢您的发布。 - Junaid

4
为了检查我构建的模拟器源码,我在项目的根目录中创建了下面的脚本。 我从另一个命令行运行它,并且不需要一直运行 . build/envsetup.shlunch full-eng 命令。 你可以根据自己的需要编辑此脚本,如果你需要运行其他设备,则只需更改文件夹即可。
out/host/linux-x86/bin/emulator -sysdir out/target/product/generic/ -system out/target/product/generic/system.img -ramdisk out/target/product/generic/ramdisk.img -data out/target/product/generic/userdata.img -kernel prebuilt/android-arm/kernel/kernel-qemu -sdcard sdcard.img -skindir sdk/emulator/skins -skin WVGA800 -scale 0.7 -memory 512 -partition-size 1024

2
你可以将这些添加到你的.bashrc文件中。
export ANDROID_PRODUCT_OUT=$ANDROID_SRC/out/target/product/generic
export ANDROID_BIN=$ANDROID_SRC/out/host/linux-x86/bin
PATH=$ANDROID_BIN:$PATH

0
实际上,“模拟器”程序只是真正的模拟器qemu的包装器,例如emulator-arm或emulator-x86。您调用的“模拟器”将收集您输入的参数并找到适当的模拟器qemu来执行。
您遇到的问题是您没有明确说明要启动哪个映像/avd。您可以使用参数“@avd YOUR-AVD_NAME”或“ANDROID_PRODUCT_OUT”环境变量来设置avd所在的目录。顺便说一下,avd目录包含一些文件,用于描述此设备的外观。
“. build/envsetup.sh”是为Android构建过程设置环境变量的脚本。因此很容易理解为什么“ANDROID_PRODUCT_OUT”会在那时设置。它的默认值应该是“PATH/TO/ANDROID/out/target/product/generic”。
PS:如果您想了解更多信息,可以参考源文件:“PATH/TO/ANDROID/external/qemu/android/main-emulator.c”。您可以在那里找到模拟器主程序。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接