【问题标题】:Building Android from source - emulator and AVDs [closed]从源代码构建 Android - 模拟器和 AVD [关闭]
【发布时间】:2011-07-29 09:55:45
【问题描述】:

我已经为模拟器构建了 Android 源代码。我在Android Source documentation 中读到,“模拟器”的路径是在成功构建期间自动添加的。但是我对此有两个问题:

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

  2. 如果模拟器需要 AVD,鉴于我的机器上没有 Android SDK,我该如何创建和管理这些?

谢谢, 杰克

第 2 部分的解决方案。

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

emulator -help-build-images

我读过...

模拟器检测到您正在使用 Android 构建 通过查看 ANDROID_PRODUCT_OUT 变量 环境。

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

然后我在我的“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

第 1 部分的解决方案。

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

解决方案更新

显然 ANDROID_PRODUCT_OUT 等变量应该在构建过程中使用 envSetup.sh 脚本自动创建。我想我的环境设置出了点问题,这不会发生。

【问题讨论】:

  • 嗨,杰克,我可以在不提及 -avd 的情况下启动单个模拟器,但无法同时启动多个模拟器,遇到错误“错误:使用相同的 AVD 运行多个模拟器是一项实验性功能” .我不确定如何创建 AVD,以便我可以同时运行多个模拟器。 (stackoverflow.com/questions/61347106/…)

标签: android open-source android-emulator android-source


【解决方案1】:

你分享了这个:

显然 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 命令!
【解决方案2】:

只需执行以下操作:

source build/envsetup.sh or . build/envsetup.sh
setpaths

这就是诀窍。确保从源目录运行它。

【讨论】:

  • 这是最短的把戏。感谢发帖。
【解决方案3】:

为了检查我为模拟器构建的源代码,我在项目的根文件夹中创建了以下脚本。我从另一个命令行运行它,它不需要一直运行. 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

【讨论】:

    【解决方案4】:

    您可以将这些添加到您的 .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
    

    【讨论】:

      【解决方案5】:

      实际上,程序“emulator”只是对真正的emulator-qemu 的封装,例如emulator-arm 或emulator-x86。您调用的“模拟器”将收集您输入的参数并找到要执行的正确 emulator-qemu。

      您遇到的问题是您没有明确描述要启动哪个图像/avd。您可以使用参数“@avd YOUR-AVD_NAME”或“ANDROID_PRODUCT_OUT”环境变量来设置放置 avd 的目录。顺便说一句,avd dir 包含一些文件来描述此设备的外观。

      ".build/envsetup.sh" 是为 Android 构建过程设置环境变量的脚本。所以很容易理解为什么会在那个时候设置“ANDROID_PRODUCT_OUT”。它的默认值应该是“PATH/TO/ANDROID/out/target/product/generic”。

      PS:如果想了解更多,可以参考源文件:“PATH/TO/ANDROID/external/qemu/android/main-emulator.c”。你可以在那里找到模拟器主程序。

      【讨论】:

        猜你喜欢
        • 2012-10-18
        • 2012-02-19
        • 2013-05-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多