【问题标题】:Can i call grant permission ADB command from app我可以从应用程序调用授予权限 ADB 命令吗
【发布时间】:2019-03-07 05:53:02
【问题描述】:

我在应用程序中授予 WRITE_EXTERNAL_STORAGE 运行时权限时遇到问题。在接受许可应用程序重新启动时,我发现这是因为我们的自定义固件。

我想知道的是,我们可以调用 ADB 命令来授予应用程序的权限吗?我试过这样打电话

final String STORAGE_PERMISSION_COMMAND = "sh -c adb -d shell pm grant com.example.easypermission.easypermissionsample android.permission.WRITE_EXTERNAL_STORAGE";
try {
     Runtime.getRuntime().exec(STORAGE_PERMISSION_COMMAND,null,null);
} catch (IOException e) {
    e.printStackTrace();
}

但是什么都没有发生。谁能告诉我这是否可以做到,如果可以怎么办?

【问题讨论】:

  • 不,它不能。这里是一个小解释stackoverflow.com/a/34112381/3290339
  • @Onik 它说我不需要在命令中传递adb。它并不是说我不能从 app 运行 adb 命令。或者这就是我所理解的。如果我错了,你能解释一下吗?
  • 您错过了我回答中的关键点...如何在不使用“adb”本身的情况下运行“adb”命令?这是一个 Linux 二进制文件,称为“adb”,命令是二进制文件要解析的参数。使用不带“adb”的命令没有任何意义。
  • @Onik 哦,好吧。谢谢您的帮助。你能看看这个吗stackoverflow.com/q/55003244/5742437

标签: android adb android-permissions android-6.0-marshmallow


【解决方案1】:

正如@Onik 分享的链接所说,我们无法在应用程序中运行 ADB 命令。当您运行应用程序时,其代码将在环境中执行。因此,当您调用Runtime.getRuntime().exec("adb shell command") 时,您实际上所做的是尝试启动另一个 adb 服务器进程(现在在目标设备上),该进程从 tcp 端口 5038 开始,因为端口 5037 很忙。

【讨论】:

  • 是否有支持此答案的文档?无论如何感谢@Shahal
猜你喜欢
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2016-10-07
  • 2016-11-23
  • 2013-01-29
  • 1970-01-01
相关资源
最近更新 更多