授权在仿真器上进行Root Access的Android Instrumentation测试

时间:2013-02-11 20:28:35

标签: android android-emulator integration-testing instrumentation root-access

我开发了一款需要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

显然,此权限仅供系统应用使用,我无法使用此权限授权我的应用。也许我在这里做错了什么?

另一个想法是在模拟器从命令行启动期间预先授权应用程序,但我还没有找到相应的方法。

1 个答案:

答案 0 :(得分:1)

您的方法会遇到很多问题,您可以使用除仪器之外的其他框架(例如monkey / http://developer.android.com/tools/testing/testing_ui.html)自动按下按钮,但我对您的投票将是利用快照/ a您的模拟器的自定义磁盘映像,创建您自己的快照/映像,其手机已植根,然后您可能应该能够启动模拟器并告诉它使用已具有root访问权限的快照。