我开发了一款需要root访问权限的Android应用,它运行正常。我正在尝试使用ActivityInstrumentationTestCase2
的检测测试来测试应用程序,并覆盖使用root访问权限的应用程序部分。测试应完全自动化,因为它们将在我们的CI上运行。
CI构建创建一个新的模拟器,然后使用以下命令为模拟器创建根据:
adb -e install superuser.apk
adb shell mount -o rw,remount -t yaffs2 /dev/block/mtdblock03 /system
adb push su /system/xbin/su
adb shell chmod 06755 /system
adb shell chmod 06755 /system/xbin/su
它工作正常,但在某些时候,我必须在测试需要时单击超级用户的root访问提示上的“允许”按钮。我的问题是如何在不手动点击“允许”按钮并获得root访问权限的情况下执行这些测试。
如果我尝试使用以下代码从检测测试中单击此按钮
instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);
我得到了
java.lang.SecurityException:
Injecting to another application requires INJECT_EVENTS permission
显然,此权限仅供系统应用使用,我无法使用此权限授权我的应用。也许我在这里做错了什么?
另一个想法是在模拟器从命令行启动期间预先授权应用程序,但我还没有找到相应的方法。
答案 0 :(得分:1)
您的方法会遇到很多问题,您可以使用除仪器之外的其他框架(例如monkey / http://developer.android.com/tools/testing/testing_ui.html)自动按下按钮,但我对您的投票将是利用快照/ a您的模拟器的自定义磁盘映像,创建您自己的快照/映像,其手机已植根,然后您可能应该能够启动模拟器并告诉它使用已具有root访问权限的快照。