如何通过命令行接受 Android 模拟器的调试对话框
How to accept debugging dialog for Android Emulator via command line
我正在编写一个自动模拟器脚本,它将创建并启动一个 Android 模拟器,这样我就可以 运行 我的 UI 从任何机器上进行测试并保证它会 运行 在设备上。
我当前的脚本创建了一个工作正常的 android-27;google_apis;x86
设备,但缺少 google 服务,因此我的应用程序中的地图不显示。
我尝试使用 google_apis_playstore
创建一个模拟器,但是当设备启动时,它会提示 ADB 调试提示。通常点击它会很好,但我希望能够 运行 在无头服务器上做到这一点,但并不总是能够做到。
是否可以创建具有 google api + 映射 而 无需接受 ADB 对话框的模拟器?
这是我当前的 shell 脚本
#!/bin/sh
# Run this script in root project dir
# Kill existing emulator
$ANDROID_HOME/platform-tools/adb devices | grep emulator | cut -f1 | while read line; do $ANDROID_HOME/platform-tools/adb -s $line emu kill; done
# Install system image
$ANDROID_HOME/tools/bin/sdkmanager "system-images;android-27;google_apis;x86"
yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -f \
-n "tester" \
-k 'system-images;android-27;google_apis;x86' \
-b x86 \
-d "Nexus 5X"
# Start emulator
$ANDROID_HOME/emulator/emulator -avd tester &
# Wait for emulator to start
$ANDROID_HOME/platform-tools/adb wait-for-device shell input keyevent 82
while [ "`$ANDROID_HOME/platform-tools/adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done
sleep 5;
我在使用 google_apis_playstore
时遇到错误,因为它无法通过对话框检查模拟器是否已启动。
error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
您需要接受模拟器的调试权限,这似乎很愚蠢?
编辑:我已将其作为错误提交 https://issuetracker.google.com/issues/128271326
与 default
或 google_apis
不同,google_apis_playstore
正在强制执行身份验证。这意味着主机上的 adb server
和模拟器上的 adb daemon
应该共享相同的 RSA adbkey
进行通信。文档在这里:https://developer.android.com/studio/command-line/adb
通常它会自动运行。 adb start-server
命令将创建 adbkey
个文件,然后 emulator/emulator
将它们复制到图像文件系统中。但由于它在您的情况下不起作用,您必须仔细验证配置错误的地方:
- 运行
adb keygen adbkey
生成 2 个文件 - adbkey
和 adbkey.pub
- 需要将这 2 个文件复制到
$HOME/.android
文件夹(或者 $ANDROID_VENDOR_KEYS
),用于您主机上的 adb
服务器
- 您 GUEST 上的
emulator/emulator
需要将相同的 2 个文件复制到 $HOME/.android
文件夹(或者 $ANDROID_SDK_HOME/.android
)。通常 HOST==GUEST 但如果您在桌面上 运行 adb
和 docker 容器内的模拟器,它们是不同的。
- 模拟器的文件系统已缓存,因此请删除之前创建的所有图像。他们不会复制密钥。
- 可选地,这里建议 https://developer.android.com/studio/command-line/adb#notlisted 在发出任何
adb
命令之前显式调用 adb start-server
$ adb kill-server
$ emulator -avd Nexus_6_API_25 -port 5557
$ adb start-server
$ adb devices
List of devices attached
emulator-5557 device
我正在编写一个自动模拟器脚本,它将创建并启动一个 Android 模拟器,这样我就可以 运行 我的 UI 从任何机器上进行测试并保证它会 运行 在设备上。
我当前的脚本创建了一个工作正常的 android-27;google_apis;x86
设备,但缺少 google 服务,因此我的应用程序中的地图不显示。
我尝试使用 google_apis_playstore
创建一个模拟器,但是当设备启动时,它会提示 ADB 调试提示。通常点击它会很好,但我希望能够 运行 在无头服务器上做到这一点,但并不总是能够做到。
是否可以创建具有 google api + 映射 而 无需接受 ADB 对话框的模拟器?
这是我当前的 shell 脚本
#!/bin/sh
# Run this script in root project dir
# Kill existing emulator
$ANDROID_HOME/platform-tools/adb devices | grep emulator | cut -f1 | while read line; do $ANDROID_HOME/platform-tools/adb -s $line emu kill; done
# Install system image
$ANDROID_HOME/tools/bin/sdkmanager "system-images;android-27;google_apis;x86"
yes | $ANDROID_HOME/tools/bin/sdkmanager --licenses
# Create emulator
echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -f \
-n "tester" \
-k 'system-images;android-27;google_apis;x86' \
-b x86 \
-d "Nexus 5X"
# Start emulator
$ANDROID_HOME/emulator/emulator -avd tester &
# Wait for emulator to start
$ANDROID_HOME/platform-tools/adb wait-for-device shell input keyevent 82
while [ "`$ANDROID_HOME/platform-tools/adb shell getprop sys.boot_completed | tr -d '\r' `" != "1" ] ; do sleep 1; done
sleep 5;
我在使用 google_apis_playstore
时遇到错误,因为它无法通过对话框检查模拟器是否已启动。
error: device unauthorized.
This adb server's $ADB_VENDOR_KEYS is not set
Try 'adb kill-server' if that seems wrong.
Otherwise check for a confirmation dialog on your device.
您需要接受模拟器的调试权限,这似乎很愚蠢?
编辑:我已将其作为错误提交 https://issuetracker.google.com/issues/128271326
与 default
或 google_apis
不同,google_apis_playstore
正在强制执行身份验证。这意味着主机上的 adb server
和模拟器上的 adb daemon
应该共享相同的 RSA adbkey
进行通信。文档在这里:https://developer.android.com/studio/command-line/adb
通常它会自动运行。 adb start-server
命令将创建 adbkey
个文件,然后 emulator/emulator
将它们复制到图像文件系统中。但由于它在您的情况下不起作用,您必须仔细验证配置错误的地方:
- 运行
adb keygen adbkey
生成 2 个文件 -adbkey
和adbkey.pub
- 需要将这 2 个文件复制到
$HOME/.android
文件夹(或者$ANDROID_VENDOR_KEYS
),用于您主机上的adb
服务器 - 您 GUEST 上的
emulator/emulator
需要将相同的 2 个文件复制到$HOME/.android
文件夹(或者$ANDROID_SDK_HOME/.android
)。通常 HOST==GUEST 但如果您在桌面上 运行adb
和 docker 容器内的模拟器,它们是不同的。 - 模拟器的文件系统已缓存,因此请删除之前创建的所有图像。他们不会复制密钥。
- 可选地,这里建议 https://developer.android.com/studio/command-line/adb#notlisted 在发出任何
adb
命令之前显式调用adb start-server
$ adb kill-server $ emulator -avd Nexus_6_API_25 -port 5557 $ adb start-server $ adb devices List of devices attached emulator-5557 device