从源代码构建Android后运行emulator

从源代码构建Android后运行emulator,android,android-emulator,linux-kernel,Android,Android Emulator,Linux Kernel,我能够将最新的android源代码拉入32位Ubuntu虚拟机(主机:Windows7 64位)。构建完成时没有任何错误 然后我试着去做,它提到我应该在源代码的根上运行模拟器。但是,当我尝试这样做时,我得到一个错误,说明找不到此命令 因此,我转到文件夹out/host/linux-x86/bin,发现有两个文件用于emulator*: 仿真器 仿真器arm emulator\u渲染器 emulator用户界面 emulator-x86 当我在这里键入emulator和emulator-x86

我能够将最新的android源代码拉入32位Ubuntu虚拟机(主机:Windows7 64位)。构建完成时没有任何错误

然后我试着去做,它提到我应该在源代码的根上运行模拟器。但是,当我尝试这样做时,我得到一个错误,说明找不到此命令

因此,我转到文件夹
out/host/linux-x86/bin
,发现有两个文件用于
emulator*

  • 仿真器
  • 仿真器arm
  • emulator\u渲染器
  • emulator用户界面
  • emulator-x86
当我在这里键入
emulator
emulator-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
我自己构建了这个,所以我认为
ANDROID\u PRODUCT\u OUT
是在我的环境变量中设置的,但我没有看到它。所以我想我应该运行一些其他的shell脚本来获得这个集合

我查看了
img
文件,在
out/target/product/generic
位置看到了这对情侣:

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

有谁能解释一下,并帮助我下一步该怎么做?我是Android新手,对此做了一些研究,但没有发现任何类似的问题。

我不知道您构建的是哪种产品,但要运行emulator,可以使用以下命令:

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-prebuilded/android-arm/kernel/kernel-qemu-sdcard-sdcard.img-skindir-sdk/emulator/skins-skins-skin-WVGA800-scale 0.7-memory 512-分区大小1024

只需将其复制到.sh文件中,并将其复制到Android源文件夹的根目录中,然后运行此文件。或者,您可以直接运行它,但首先应该将chdir指向您的Android源文件夹根目录

不要忘记在根文件夹中使用命令创建SD卡映像
mksdcard

如果您的机器上有“android sdk”,那么您的“emulator”就可以从那里而不是/out/。。。。迪尔。 当您想使用“自己的”仿真器时,可以重命名“android sdk”目录。然后,您的“模拟器”将被拾取

希望这对你有帮助

问候
Sammoh

只需在shell上键入emulator,它就会启动最新版本的emulator,因为它的路径设置为shell的path变量。

在经历了许多困惑和相同的问题之后,我找到了一种方法,可以在新环境中使所有内容正常工作

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

export USE_CCACHE=1
ccache -M 10G
如果尚未执行,请执行的步骤

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

$ . build/envsetup.sh
您现在应该实际执行其中一个函数来正确设置路径(正如李平中指出的,Android构建说明中没有提到这一点!):

第一次建造 开始建造!例如:

$ lunch full-eng
$ make -j4
(在这里,4条螺纹非常适合我的机器。请根据需要进行更改。)

构建完成后,只需启动emulator:

$ emulator
后续构建 我发现要重建
system.img
,需要删除以下文件/目录:

out/target/product/generic/obj/PACKAGING/
out/target/product/generic/system.img
然后简单地重复:

$ make -j4
$ emulator
以上是我的环境设置。 ANDROID_BUILD_TOP解决了这个问题

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

在mac上的我的机器上,您可以将以下行添加到~/.bash_配置文件中。相应地更改磁盘映像和src文件夹

#!/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
# 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上有效。

仅供参考,我遇到了类似的问题,在尝试了不同的方法后,我发现解决方案正在运行
午餐
(在运行envsetup.sh之后)并在本例中选择目标
aosp_arm-eng
。每次启动新shell时都必须执行此操作,因为它设置了模拟器运行avd所需的某些环境变量。前提是您已构建目标。

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

  • 步骤1 如果您已经在当前运行的终端(Ubuntu)中正确地完成了构建并生成了系统映像,那么它就是Stragit forward。只需在终端中键入以下命令:- 仿真器

  • 步骤2 如果您之前已经生成了系统映像,并且已经启动了一个新的终端(Ubuntu),那么请逐个运行以下命令:-

  • sourcebuild/envsetup.sh
  • 午餐1
    这里的1是我的午餐类型,你可以用你的(7、8等)和最后的
  • 仿真器
就这样,它将正确地使用你的模拟器。 谢谢大家快乐编码

我是这样表演的

我修改了./build/envsetup.sh文件,只更改了环境的set\u stuff\u

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 \

谢谢我按照您的指示操作,得到以下结果:emulator:警告:无法使用内置的一个emulator加载皮肤文件“sdk/emulator/skins/WVGA800/layout”:错误:无效或缺少内核映像文件:预构建/android arm/内核/kernel qemu。在prebuild/android arm/(我只有gdbserver文件夹)下没有knernel文件夹。我只是使用“repo sync”来下载所有源代码,知道如何获得预构建的内核吗?我已经检查了所有源代码。他们都有这个目录和这个文件。我认为您的repo sync命令没有正确完成。然而,在建造之后,你可以
startEmulator
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
}
#!/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 \