我尝试启动 android sdk 模拟器,但是当我按后退按钮时出现此错误:
INFO | Critical: Failed to load https://maps.googleapis.com/maps/api/mapsjs/gen_204?csp_test=true: The 'Access-Control-Allow-Origin' header has a value 'qrc://' that is not equal to the supplied origin. Origin 'qrc://' is therefore not allowed access. (qrc:/html/js/common.js:0, (null))
INFO | Critical: Failed to load https://maps.googleapis.com/maps/api/mapsjs/gen_204?csp_test=true: The 'Access-Control-Allow-Origin' header has a value 'qrc://' that is not equal to the supplied origin. Origin 'qrc://' is therefore not allowed access. (qrc:/html/js/common.js:0, (null))
我使用Ubuntu并尝试通过终端启动模拟器,我使用google cmdline-tools(最新版本)的avdmanager,这是我尝试使用的AVD:
Name: my_avd_29ii
Path: /home/user/.android/avd/my_avd_29ii.avd
Target: Google APIs (Google Inc.)
Based on: Android 10.0 (Q) Tag/ABI: google_apis/x86
Sdcard: 512 MB
最好的选择是(需要为您安装的每个模拟器完成)
Windows
%USERPROFILE%\.adnroid\avd\<Emulator Name>.avd
config.ini
hw.keyboard=no
更改为 hw.keyboard=yes
Mac
~/.android/avd/<Emulator Name>.avd
config.ini
hw.keyboard=no
更改为 hw.keyboard=yes
答案基于这篇文章
环顾四周后发现有两种方法可以将硬件事件推送到模拟器:
此方法使用
telnet
,如下所示:
telnet 127.0.0.1 5554
auth <auth-key>
event send EV_KEY:KEY_BACK:0
event send EV_KEY:KEY_BACK:1
这将模拟按下 (0) 和释放 (1) 按钮。
此方法使用
adb
,如下所示:
adb shell input keyevent KEYCODE_BACK
尝试了两者后,我意识到
telnet
不起作用,但adb
确实起作用。我还检查了 emulator
的源代码,发现 telnet
依赖于工具窗口使用的同一组函数。所以这可能是一个错误,我们可以等待更新来修复它,或者......
我下载了源代码,编写了一个简单的解决方法,然后构建了它。基本上我不使用按键方法,而是使用
adb
方法。如果你想要这里就是。内容相当庞大,请耐心等待。我包含了一个小脚本来自动替换模拟器,只需运行:
$ chmod +x replace
# ./reaplace path-to-android-sdk
这会向
-use-adb-toolwindow
添加一个新标志 emulator
。当您激活它时,它将(成功)使用 adb 进行“大多数”键盘输入以及主页、后退、应用程序和电源按钮。就像我说的,这是一个快速修复,但对我来说效果很好。
注: