从源代码构建Android后运行模拟器

问题描述 投票:23回答:10

我能够将最新的android源代码下载到32位的Ubuntu虚拟机中(主机:Windows 7 64位)。构建完成没有任何错误。

然后我试着关注these instructions,它提到我应该在源代码的根目录上运行模拟器。但是,当我尝试这个时,我收到一条错误,指出找不到此命令。

所以我去了out/host/linux-x86/bin文件夹,我发现emulator*有几个文件:

  • emulator
  • emulator-arm
  • emulator_renderer
  • emulator-ui
  • emulator-x86

当我在这里输入emulatoremulator-x86时,它也不起作用。这是我得到的错误:

xxxx/out/host/linux-x86/bin$ ./emulator-x86
emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found.

If you are an Android SDK user, please use '@<name>' or '-avd <name>'
to start a given virtual device (see -help-avd for details).

Otherwise, follow the instructions in -help-disk-images to start the emulator

所以当我运行./emulator-x86 -help-disk-images时,我看到以下内容:

If you are building from the Android build system, you should
have ANDROID_PRODUCT_OUT defined in your environment, and the
emulator shall be able to pick-up the right image files automatically.
See -help-build-images for more details.

我自己构建了这个,所以我认为ANDROID_PRODUCT_OUT是在我的环境变量中设置的,但是我没有看到它。所以我认为我应该运行一些其他shell脚本来获取该集合。

我查看了img文件,我在out/target/product/generic位置看到了几个:

  • ramdisk.img
  • system.img
  • userdata.img

任何人都可以对此有所了解并帮助我做下一步应该做的事情吗?我是Android的新手,我对此做了一些研究,但我找不到任何类似的问题。

android android-emulator linux-kernel
10个回答
26
投票

我不知道您构建哪个产品但是要运行模拟器,您可以使用以下命令:

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

只需将其复制到.sh文件到Android源文件夹的根目录并运行此文件即可。或者你可以运行它,但你应该首先使用你的Android源文件夹root。

并且不要忘记使用命令mksdcard在根文件夹中创建sdcard图像。


0
投票

我这样做了

我修改了./build/envsetup.sh文件,我只更改了set_stuff_for_environment

function set_stuff_for_environment()
{
    setpaths
    set_sequence_number

    export ANDROID_BUILD_TOP=$(gettop)
    # With this environment variable new GCC can apply colors to warnings/errors
    export GCC_COLORS='error=01;31:warning=01;35:note=01;36:caret=01;32:locus=01:quote=01'
    export ASAN_OPTIONS=detect_leaks=0

    export ANDROID_PRODUCT_OUT=/var/www/android/out/target/product/generic_x86_64
    echo $ANDROID_PRODUCT_OUT
}

在项目的根目录,我创建了一个名为start.sh的文件

#!/usr/bin/env bash

ANDROID_BUILD_OUT=/var/www/android/out
ANDROID_SDK_LINUX=/opt/android-studio/sdk
ANDROID_BUILD=${ANDROID_BUILD_OUT}/target/product/generic_x86_64

sudo chmod -R 777 /dev/kvm

source build/envsetup.sh

set_stuff_for_environment

./prebuilts/android-emulator/linux-x86_64/emulator \
    -debug-init -logcat '*:v' -verbose \
    -sysdir ${ANDROID_BUILD} \
    -system ${ANDROID_BUILD}/system.img \
    -ramdisk ${ANDROID_BUILD}/ramdisk.img \
    -skindir ${ANDROID_SDK_LINUX}/platforms/android-28/skins \
    -skin WVGA800 \
    -partition-size 2000
    -scale 0.7 \
    -memory 2000 \
    -data ${ANDROID_BUILD}/userdata.img \

25
投票

经过许多困惑和遇到许多相同的问题后,我找到了一种方法,让一切都在新环境中运作。

环境

首先,确保使用~/.bashrc that Android recommends的更改来设置环境,包括:

export USE_CCACHE=1
ccache -M 10G

如果您还没有这样做,请按照downloading the Android source的步骤操作。

然后为环境设置一些功能:

$ . build/envsetup.sh

你现在应该实际执行其中一个函数来正确设置路径(正如Pingzhong Li指出的那样,这在Android构建指令中没有提到!):

$ set_stuff_for_environment

第一次构建

开始建设!例如:

$ lunch full-eng
$ make -j4

(这里,4个线程非常适合我的机器。根据需要进行更改。)

构建完成后,只需启动模拟器:

$ emulator

后续构建

我发现要让system.img重建,你需要删除以下文件/目录:

out/target/product/generic/obj/PACKAGING/
out/target/product/generic/system.img

然后简单地重复:

$ make -j4
$ emulator

4
投票

仅供参考,我有类似的问题,在尝试不同的事情后,我发现解决方案是运行lunch(在运行envsetup.sh之后)并在这种情况下选择目标aosp_arm-eng。每次启动新shell时都必须这样做,因为它设置了模拟器运行avd所需的某些环境变量。提供了构建目标的提供。


3
投票
#!/usr/bin/env bash

ANDROID_BUILD_OUT=/path/to/android/build/output/
ANDROID_SDK_LINUX=/path/to/android/sdk
ANDROID_BUILD=${ANDROID_BUILD_OUT}/android/target/product/generic

${ANDROID_SDK_LINUX}/tools/emulator \
    -sysdir ${ANDROID_BUILD} \
    -system ${ANDROID_BUILD}/system.img \
    -ramdisk ${ANDROID_BUILD}/ramdisk.img \
    -data ${ANDROID_BUILD}/userdata.img \
    -kernel ${ANDROID_SDK_LINUX}/system-images/android-18/armeabi-v7a/kernel-qemu \
    -skindir ${ANDROID_SDK_LINUX}/platforms/android-18/skins \
    -skin WVGA800 \
    -scale 0.7 \
    -memory 512 \
    -partition-size 1024

3
投票

如何运行模拟器分步指南。在下载的Android AOSP源代码中运行模拟器如下: -

  • 步骤1

如果你已经在当前运行的终端(Ubuntu)中正确完成了构建并生成了系统映像,那么它就是向前发展的。只需在终端中键入以下命令: - 模拟器

步骤2如果您之前已生成系统映像并且已启动新终端(Ubuntu),则逐个运行以下命令: - 1. source build / envsetup.sh 2. Lunch 1 here 1是我的午餐类型,您可以用你的(7,8等)和最后的3.模拟器替换它

就是它会正确启动你的模拟器。谢谢伙计们快乐的编码!!!!


2
投票

在Mac上,您可以将以下行添加到〜/ .bash_profile文件中。相应地更改磁盘映像和src文件夹。

# start emulator
function startEmulator { hdiutil attach ~/android.dmg.sparseimage -mountpoint /Volumes/android;
                         cd /Volumes/android/AndroidSrc;
                         source build/envsetup.sh;
                         lunch aosp_arm-eng;
                         /Volumes/android/AndroidSrc/out/host/darwin-x86/bin/emulator;  }

之后,创建一个新终端并输入:

startEmulator

您的模拟器可以启动。这适用于mac。


1
投票

只需在shell上键入模拟器,它将启动最新版本的模拟器,因为它的路径设置为shell的PATH变量。


0
投票

如果你的机器上有“android sdk”,那么你的“模拟器”可以从那里取而代之而不是/ out / .... dir。当您想使用“自己的”模拟器时,可以重命名“android sdk”目录。然后你的“模拟器”将被拿起。

希望这对你有所帮助!

关于催眠


0
投票
export MY_PWD=/work/ABC/Google_Android
export ANDROID_BUILD_TOP=/work/ABC/Google_Android
export PATH=$PATH:$MY_PWD/prebuilts/gcc/linux
export ANDROID_PRODUCT_OUT=$MY_PWD/out/target/product/generic

以上是我的环境设置。 ANDROID_BUILD_TOP解决了

"emulator: ERROR: You did not specify a virtual device name, and the system
directory could not be found"

在我的机器上

© www.soinside.com 2019 - 2024. All rights reserved.