安卓:我可以在我的应用程序中使用adb命令吗?

4

这是我的问题,我想在我的应用程序中启动一个Android TestProject,但我不知道如何操作。我发现可以使用命令启动,例如:"adb shell am instrument -w com.demo.test/android.test.InstrumentationTestRunner"。

所以我尝试在我的应用程序中使用:Runtime.getRuntime().exec("adb shell am instrument -w com.demo.test/android.test.InstrumentationTestRunner"); 但是出现了以下错误:

03-15 02:24:42.246: WARN/System.err(3597): java.io.IOException: Error running exec(). Command: [adb, shell, am, instrument, -w, com.demo.test/android.test.InstrumentationTestRunner] Working Directory: null Environment: null ..... 03-15 02:24:42.246: WARN/System.err(3597): Caused by: java.io.IOException: Permission denied 我的问题出在哪里?


1
我不确定我是否正确理解了这个问题,所以你是从 Android 应用内部尝试运行 adb 命令吗?我认为这并不是实现你想要的功能的正确方式。 - Robert Massaioli
是的,但是否有一个函数可以运行另一个应用程序,例如TestProject或TestProject中的一个用例?感谢您关注我的问题。 - gino
3个回答

2

已经有一个API可以实现这个功能,Context.startInstrumentation:

这就是shell命令的实现方式。通过启动shell命令,你不能做比在你自己的进程中更多的事情。此外,没有任何shell命令是SDK的一部分,因此使用它可能会在不同的设备或平台版本上出现问题。


0

你应该使用Context.startInstrumentation,而不是adb。 例如,从你的Activity中运行

startInstrumentation(new ComponentName("com.example.aatg.tc.test", "android.test.InstrumentationTestRunner"), null, null);

-1

简短回答 - 不行。长一点的回答,有点可能。

'adb shell' 命令后面的部分是被执行的,就像 Runtime.getRuntime().exec(...) 一样。

你可以尝试使用 Runtime.getRuntime().exec("instrument -w com.demo.test/android.test.InstrumentationTestRunner") 来实现你想要的功能。我自己没有使用过,但你可能需要将参数作为数组传递进去。请查看 文档


我可以使用startInstrumentation()来实现我想要的目标,感谢您的建议。 - gino
从Android 4.2开始,它将不再起作用,只有系统应用程序才能调用“am instrument”。 - VISHAL VIRADIA
很高兴知道@VISHALVIRADIA。感谢您的澄清。正如我所提到的,这不是一个解决方案。这是一个恶劣的黑客行为,应该谨慎对待。 - Mark McDonald

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接