我想创建一个加载了Google API的ARM API 21模拟器。
以下是我创建AVD的方法:
ANDROID_ABI=google_apis/armeabi-v7a
EMULATOR_VERSION=21
avd --force -n nexus4-emulator -t "Google Inc.:Google APIs:"$EMULATOR_VERSION --abi $ANDROID_ABI --device "Nexus 4" -c 128M
现在我用:
启动模拟器emulator -avd nexus4-emulator &
然而,这就是我所得到的:具有微小尺寸的屏幕(就有效像素而言):
如何更改此配置以便我拥有适当大小的屏幕?
顺便说一下,我正在使用它来构建APK并在Travis的机器上运行测试,但它可以在我的机器(Mac OS X)中重现。
答案 0 :(得分:18)
This是使用新avdmanager创建大小合适的模拟器的好示例:
- $ANDROID_HOME/tools/bin/avdmanager create avd --force --name test --package 'system-images;android-22;default;armeabi-v7a' --abi armeabi-v7a --device 'Nexus 4' --sdcard 128M
- $ANDROID_HOME/emulator/emulator -avd test -skin 768x1280 -no-audio -no-window &
关于不受支持的-s "768x1280"
参数,open issue为commented here。
如果您需要命令行中的nexus 4样式设备,可以试试这个:
android create avd --force -n nexus4-emulator -t "Google Inc.:Google APIs:"$EMULATOR_VERSION --abi $ANDROID_ABI -s "768x1280" --device "Nexus 4" -c 128M
本地最好使用Android Studio。
CI构建的device
选项的下一个配置解决了与屏幕大小相关的点击问题:
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI --device 'Nexus 4' --sdcard 128M
- emulator -avd test -no-window -skin 768x1280 &
本地计算机:最佳选择是直接使用Android Studio,因为Nexus 4皮肤似乎只放在那里,SDK工具中包含的设备定义似乎不足以创建它;您需要定义额外的硬件选项。我提供下面的工作。
Travis-ci服务器:最好的选择是加速禁用音频和窗口以及使用通用仿真器。如果您需要Nexus 4样式模拟器,可以尝试相同的解决方法,否则,请删除--device
选项并使用以下命令:
android create avd -f \
-n "${AVD_NAME:-default_emulator}" \
-t "${AVD_TARGET:-Google Inc.:Google APIs:21}" \
-b "${AVD_ABI:-armeabi-v7a}" \
-g "${AVD_TAG:-google_apis}" \
-c "${AVD_SDCARD:-128M}"
emulator -avd "${AVD_NAME:-default_emulator}" \
-no-audio \
-no-window \
-debug "${AVD_DEBUG:-avd_config}" &
注意:左侧是您可以在.travis.yml中定义的环境变量,否则,将使用右侧默认值。最后一行打印有用的和相关的调试信息。
Nexus 4
设备定义包含在
Android的SDK-LINUX /工具/ LIB / devices.xml
<d:device>
<d:name>Nexus 4</d:name>
<d:manufacturer>Google</d:manufacturer>
<d:hardware>
<d:screen>
<d:screen-size>normal</d:screen-size>
<d:diagonal-length>4.7</d:diagonal-length>
<d:pixel-density>xhdpi</d:pixel-density>
<d:screen-ratio>notlong</d:screen-ratio>
<d:dimensions>
<d:x-dimension>768</d:x-dimension>
<d:y-dimension>1280</d:y-dimension>
</d:dimensions>
<d:xdpi>320</d:xdpi>
<d:ydpi>320</d:ydpi>
<d:touch>
<d:multitouch>jazz-hands</d:multitouch>
<d:mechanism>finger</d:mechanism>
<d:screen-type>capacitive</d:screen-type>
</d:touch>
</d:screen>
<d:networking>
Wifi
Bluetooth
NFC
</d:networking>
<d:sensors>
Accelerometer
Barometer
Compass
GPS
Gyroscope
LightSensor
ProximitySensor
</d:sensors>
<d:mic>true</d:mic>
<d:camera>
<d:location>back</d:location>
<d:autofocus>true</d:autofocus>
<d:flash>true</d:flash>
</d:camera>
<d:camera>
<d:location>front</d:location>
<d:autofocus>false</d:autofocus>
<d:flash>false</d:flash>
</d:camera>
<d:keyboard>nokeys</d:keyboard>
<d:nav>nonav</d:nav>
<d:ram unit="KiB">1953125</d:ram>
<d:buttons>soft</d:buttons>
<d:internal-storage unit="KiB">7811891</d:internal-storage>
<d:removable-storage unit="MiB"></d:removable-storage>
<d:cpu>Qualcomm Snapdragon S4 Pro</d:cpu>
<d:gpu>Adreno 320</d:gpu>
<d:abi>
armeabi-v7a
armeabi
</d:abi>
<d:dock></d:dock>
<d:power-type>battery</d:power-type>
</d:hardware>
<d:software>
<d:api-level>16</d:api-level>
<d:live-wallpaper-support>true</d:live-wallpaper-support>
<d:bluetooth-profiles></d:bluetooth-profiles>
<d:gl-version>2.0</d:gl-version>
<d:gl-extensions>GL_EXT_debug_marker GL_AMD_compressed_ATC_texture
GL_AMD_performance_monitor GL_AMD_program_binary_Z400 GL_EXT_robustness
GL_EXT_texture_format_BGRA8888 GL_EXT_texture_type_2_10_10_10_REV GL_NV_fence
GL_OES_compressed_ETC1_RGB8_texture GL_OES_depth_texture GL_OES_depth24
GL_OES_EGL_image GL_OES_EGL_image_external GL_OES_element_index_uint
GL_OES_fbo_render_mipmap GL_OES_fragment_precision_high GL_OES_get_program_binary
GL_OES_packed_depth_stencil GL_OES_rgb8_rgba8 GL_OES_standard_derivatives
GL_OES_texture_3D GL_OES_texture_float GL_OES_texture_half_float
GL_OES_texture_half_float_linear GL_OES_texture_npot GL_OES_vertex_half_float
GL_OES_vertex_type_10_10_10_2 GL_OES_vertex_array_object GL_QCOM_alpha_test
GL_QCOM_binning_control GL_QCOM_driver_control GL_QCOM_perfmon_global_mode
GL_QCOM_extended_get GL_QCOM_extended_get2 GL_QCOM_tiled_rendering
GL_QCOM_writeonly_rendering GL_EXT_sRGB
</d:gl-extensions>
<d:status-bar>true</d:status-bar>
</d:software>
<d:state name="Portrait" default="true">
<d:description>The phone in portrait view</d:description>
<d:screen-orientation>port</d:screen-orientation>
<d:keyboard-state>keyssoft</d:keyboard-state>
<d:nav-state>nonav</d:nav-state>
</d:state>
<d:state name="Landscape">
<d:description>The phone in landscape view</d:description>
<d:screen-orientation>land</d:screen-orientation>
<d:keyboard-state>keyssoft</d:keyboard-state>
<d:nav-state>nonav</d:nav-state>
</d:state>
</d:device>
但是android-studio关联和使用的nexus_4
皮肤只在这里:
机器人工作室/插件/机器人/ LIB /设备技术资源
机器人工作室/插件/机器人/ LIB /设备技术资源/设备art.xml
<device id="nexus_4" name="Nexus 4">
<orientation name="port" size="958,1678" screenPos="94,187" screenSize="768,1280" shadow="port_shadow.png" back="port_back.png" lights="port_fore.png"/>
<orientation name="land" size="1799,885" screenPos="257,45" screenSize="1280,768" shadow="land_shadow.png" back="land_back.png" lights="land_fore.png"/>
</device>
您没有指定--skin
,因此使用了SDK工具中包含的默认外观WVGA800
:
此外观在hardware.ini
文件中具有关联的硬件值:
# skin-specific hardware values
hw.lcd.density=240
vm.heapSize=48
hw.ramSize=512
layout
文件包含下一行:
...
device {
display {
width 480
height 800
...
当您使用Nexus 4设备定义时,这不是您所期望的,因此我将直接使用android-studio在本地创建avd并使用正确的皮肤。
如果您使用命令行并尝试从android-studio打开它,您将看到:
本地计算机解决方案
将Android Studio用于两者;创建并启动模拟器。
如果您使用该命令创建它,添加至少200MB作为内部存储,您将解决屏幕大小问题,因为android-studio将使用正确的皮肤更新并修复avd。
如果您正在寻找没有android-studio干预的命令,我将Nexus 4皮肤移动到皮肤文件夹,添加了一个缺少属性的hardware.ini,最后执行了下一个命令:
./android create avd -f \
-n "${AVD_NAME:-nexus4_emulator}" \
-t "${AVD_TARGET:-Google Inc.:Google APIs:21}" \
-b "${AVD_ABI:-armeabi-v7a}" \
-g "${AVD_TAG:-google_apis}" \
-s "${AVD_SKIN:-nexus_4}" \
-d "${AVD_DEVICE:-Nexus 4}" \
-c "${AVD_SDCARD:-128M}"
./emulator -avd nexus4_emulator &
hardware.ini
内容:
# skin-specific values
AvdId=nexus4_emulator
avd.ini.displayname=nexus4 emulator
disk.dataPartition.size=200M
hw.camera.back=none
hw.camera.front=none
hw.gpu.enabled=yes
hw.lcd.density=320
hw.ramSize=1024
runtime.network.latency=none
runtime.network.speed=full
runtime.scalefactor=auto
skin.dynamic=yes
snapshot.present=no
vm.heapSize=64
这只是一个实验,我不推荐它,但似乎有效:
注意:我发现了另一个关于avd名称的问题,在某些时候更换了,我会使用Nexus4_emulator
。
这并没有解决Travis-ci的问题。您需要复制nexus_4
皮肤或create your custom skin并将其放在项目或可访问的位置。 (更新:我试过这个,而且它太慢了......)
但您可能不需要精确的Nexus 4皮肤,并且最好使用-no-window
,-no-audio
等仿真器选项来加速它。< / p>
我通常使用-no-skin
选项,但我不知道hardware.ini关系,因此我可能会自定义我的模拟器,我需要更多地进行调查。我发现在本地使用-no-skin
选项时,屏幕大小不正确。请参阅下面的更新。
另一种选择是在启动模拟器时使用--skin 768x1280 -dynamic-skin
。 (更新:我在创建AVD时使用了这个但被忽略了)更多信息here:
来自here
的备用自定义密度作为调整模拟器外观配置的替代方法,您 可以使用模拟器皮肤的默认密度并添加-dpi-device 启动AVD时,模拟器命令行的选项。对于 例如:
emulator -avd WVGA800 -scale 96dpi -dpi-device 160
更新: tasomaniac评论here
-no-skin参数删除皮肤。这意味着仿真器将是320x480像素宽x高和320密度混淆 大多数测试。默认皮肤是480x800,这对大多数人来说都很好 案件。
- 皮肤WXGA720可以像下面一样使用,使测试更加可靠。这是默认情况下找到的最佳模拟器配置。
- echo no | android create avd --force -n test -t android-19 --abi armeabi-v7a --skin WXGA720
320x480设备,320密度为Android意味着设备是 实际上是160x240。有了这个,没有什么适合屏幕。非UI相关 模拟器中的测试通过,但UI相关的Espresso测试将失败。
圆圈CI也默认为-no-audio -no-window
更新:下一个配置解决了点击观看次数here
的问题android.support.test.espresso.PerformException:执行错误 &#39;单击&#39;在视图&#39;动画或过渡已启用 目标设备。
- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI --device 'Nexus 4' --sdcard 128M
- emulator -avd test -no-window -skin 768x1280 &
答案 1 :(得分:3)
所以这在2017年末仍未解决(Booo Google!)。
我发现最小的变化是将skin.name=1080x1920
或任何其他所需的分辨率添加到avd的config.ini
(~/.android/avd/{avdName}.avd/config.ini
)
答案 2 :(得分:2)
这是我的Travis配置的相关位,有480x800 hdpi模拟器:
language: android
jdk:
- oraclejdk7
env:
global:
# API level and build tools version to build the app. Must stay in sync with the Gradle config
- ANDROID_API_LEVEL=23
- ANDROID_BUILD_TOOLS_VERSION=22.0.1
# ARM processor. If it doesn't load in your Mac computer, use google_apis/x86 instead
- ANDROID_ABI=google_apis/armeabi-v7a
# From our tests, the most stable emulator at the moment is API 21
- EMULATOR_VERSION=21
android:
components:
# API level and build tools
- android-$ANDROID_API_LEVEL
- build-tools-$ANDROID_BUILD_TOOLS_VERSION
# System images for the emulator. See http://docs.travis-ci.com/user/languages/android/
- addon-google_apis-google-$EMULATOR_VERSION
- sys-img-armeabi-v7a-addon-google_apis-google-$EMULATOR_VERSION
before_script:
# Create an Android Virtual Device
- android list device
- echo no | android create avd --force -n wvga800-emulator -t "Google Inc.:Google APIs:"$EMULATOR_VERSION --abi $ANDROID_ABI -s WVGA800 -c 128M
# Start the emulator (with no GUI: note the "-no-window")
- emulator -avd wvga800-emulator -no-window &