【问题标题】:Authorize Android Instrumentation Test for Root Access on Emulator授权 Android Instrumentation 测试以在模拟器上进行 Root 访问
【发布时间】:2013-02-11 20:28:34
【问题描述】:

我开发了一个需要 root 访问权限的 Android 应用,它运行良好。我正在尝试使用带有ActivityInstrumentationTestCase2 的仪器测试来测试应用程序,并涵盖应用程序中使用 root 访问权限的部分。测试应该是完全自动化的,因为它们将在我们的 CI 上运行。 CI 构建会创建一个全新的模拟器,然后使用以下命令将模拟器设为 root:

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 访问权限的情况下执行这些测试。

如果我尝试使用以下代码从检测测试中单击此按钮

instrumentation.sendKeyDownUpSync(KeyEvent.KEYCODE_DPAD_CENTER);

我明白了

java.lang.SecurityException: 
Injecting to another application requires INJECT_EVENTS permission

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 感谢您的回复。按钮按下自动化实际上有效。我可以使用 Monkey 代替仪器,但问题不存在。按钮已经被按下。模拟器实际上是有根的,你对每个模拟器都有根访问权限。我上面给出的方法提供了对安装在模拟器上的 apk 的 root 访问权限。更多信息here。除了测试应该使用 maven 在我们的 CI 上运行,所以我看不出磁盘映像在给定的上下文中会有什么帮助。
    • 你设法按下按钮?你确定吗? java.lang.SecurityException:注入另一个应用程序需要 INJECT_EVENTS 权限,当您尝试触摸/发送按钮到您无法控制的应用程序时,会发生这种情况,因为它超出了您的进程。使用磁盘映像,您可以预先授权您的应用程序具有 root 访问权限,然后安装一个新版本,这样您就不必再次授予它权限。还是要求您在每次重新安装应用程序后重新授权?
    • 好吧,我设法“尝试”按下按钮,这就是仪器的作用。出于这个原因,我想我不明白为什么要切换到 Monkey。磁盘映像的问题是我必须构建测试应用程序并将其即时部署到模拟器。这个过程由我们的 CI (Jenkins) 管理,每次有人将代码提交到 repo 时都会触发它。这种情况每小时发生几次。所以我该怎么做?在每个构建过程中制作图像?
    • 模拟器副本每次都使用基本的 android 映像,您可以告诉它使用快照,在快照上您可以预授权您的应用程序吗? Monkey 和 Instrumentation 之间的区别在于 Instrumentation 只能单击与您正在检测的应用程序在同一进程 ID 内的元素,您尝试单击的框不在检测的应用程序中,因此它会引发错误,monkey 在另一个手没有这样的限制,所以实际上可以按下按钮。如果需要,您甚至可以使用 adb 发送一个关键事件来确认对话框。
    • 好的,会试试 Monkey 并回复你。
    猜你喜欢
    • 2011-06-22
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-31
    • 2015-11-19
    • 2012-09-09
    相关资源
    最近更新 更多