android - 如何在 android 代码中运行特定的 adb 命令?我有权限问题
问题描述
我想在我的应用程序中运行特定的命令(adb)。
override fun onReceive(context: Context?, intent: Intent?) {
intent?.let {
if (it.action.equals(Intent.ACTION_BOOT_COMPLETED)) {
with(Intent(context, MainService::class.java)) {
logger.warn("riorio - android boot completed")
var process = Runtime.getRuntime()
.exec("adb shell app_process -Djava.class.path=/data/local/tmp/classes.dex /system/bin com.sds.agent.Main #")
process.waitFor()
logger.warn("riorio - shell server start")
}
}
}
}
此代码会导致错误。查看错误日志,该命令似乎存在权限问题。
下面是错误日志。
2019-09-16 19:50:07.826 8518-8518/com.sds.agent W/com.sds.agent.receiver.AutorunReceiver: riorio - android boot completed
2019-09-16 19:50:07.832 8518-8518/com.sds.agent E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.sds.agent, PID: 8518
java.lang.RuntimeException: Unable to start receiver com.sds.agent.receiver.AutorunReceiver: java.io.IOException: Cannot run program "adb": error=13, Permission denied
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3313)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.io.IOException: Cannot run program "adb": error=13, Permission denied
at java.lang.ProcessBuilder.start(ProcessBuilder.java:983)
at java.lang.Runtime.exec(Runtime.java:691)
at java.lang.Runtime.exec(Runtime.java:524)
at java.lang.Runtime.exec(Runtime.java:421)
at com.sds.agent.receiver.AutorunReceiver.onReceive(AutorunReceiver.kt:31)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3306)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
Caused by: java.io.IOException: error=13, Permission denied
at java.lang.UNIXProcess.forkAndExec(Native Method)
at java.lang.UNIXProcess.<init>(UNIXProcess.java:133)
at java.lang.ProcessImpl.start(ProcessImpl.java:128)
at java.lang.ProcessBuilder.start(ProcessBuilder.java:964)
at java.lang.Runtime.exec(Runtime.java:691)
at java.lang.Runtime.exec(Runtime.java:524)
at java.lang.Runtime.exec(Runtime.java:421)
at com.sds.agent.receiver.AutorunReceiver.onReceive(AutorunReceiver.kt:31)
at android.app.ActivityThread.handleReceiver(ActivityThread.java:3306)
at android.app.ActivityThread.-wrap20(ActivityThread.java)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1719)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6692)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1468)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1358)
如何获得在 android 应用程序中运行“adb”的访问权限?可能吗?
解决方案
我认为您不必指定它是 adb 命令。像这样的东西可以解决问题
var process = Runtime.getRuntime().exec("app_process -Djava.class.path=/data/local/tmp/classes.dex /system/bin com.sds.agent.Main #")
process.waitFor()
推荐阅读
- c++ - direct3d9如何过滤像素艺术的纹理
- hawtio - 我正在使用 Hawtio(2.7.1) stanalone jar 并尝试在其中添加新插件。但它显示一个错误
- javascript - Find k number of array elements having the minimum difference amongst themselves
- swift - SwiftUI:调整弹出框以适合
- java - 运行 jar 时忽略 Class-Path
- java - 如何在 JavaFX 9+ 应用程序中设置全局 CSS?
- azure - 如何收到新的(独特的)错误警报
- networking - 获取静态公共 IP 或任何其他解决方法
- reactjs - 无法从 reactjs(打字稿)中的组件调用操作
- javascript - 如何在 Web 应用中实现实时预览功能?