我可以以root身份启动android意图吗?

时间:2013-08-28 04:07:52

标签: android android-intent

我想使用命令行启动android意图(比如在Gallery应用程序中播放视频)。我可以以root身份启动意图吗?

我试过

su -c "am start -a android.intent.action.VIEW -n com.android.gallery3d/.app.MovieActivity -d <some_file>"

它会抛出错误

su: exec failed for am start -a android.intent.action.VIEW -n com.android.gallery3d/.app.MovieActivity -d <some_file> Error:No such file or directory

编辑:

这项工作正常(在没有root权限的情况下在库中播放视频)。我想运行具有root权限的图库。

am start -a android.intent.action.VIEW -n com.android.gallery3d/.app.MovieActivity -d <some_file>

2 个答案:

答案 0 :(得分:2)

您的问题似乎有几个问题。

首先,您的真正需求是什么?

1. Send an intent as root (root sends the intent)
2. Start an activity as root (gallery runs as root)

关于你遇到的问题。

1.以root身份发送和意图很容易,因为你也尝试过。你可以su为root,然后使用'am start xxx'应该工作。我猜你的“su -c”启动xxx“失败的原因是由于env问题。您可以尝试执行以下操作:

mProcess = new ProcessBuilder()
                    .command("/system/xbin/su")
                    .redirectErrorStream(true).start();
OutputStream out = mProcess.getOutputStream();
String cmd = "am start am start -a android.intent.action.VIEW "
                "-n com.android.gallery3d/.app.MovieActivity "
                "-d <some_file> \n";
out.write(cmd.getBytes());

以root用户身份运行的2.run图库不起作用,图库应用不会以root身份运行。除非您修改框架(zygote过程),否则这是系统限制。

我猜你的目标是播放一些像图库这样的普通应用无法访问的视频?您可以尝试其他方法,例如临时更改文件的权限,而不是尝试以root身份运行库。

答案 1 :(得分:2)

简单的答案是否定的,即使您以root用户身份从终端启动它们,也无法以root身份启动任何Android应用或意图。这是由于Android系统的设计方式:即使您使用su启动应用程序,实际启动应用程序的过程也会将应用程序分成无特权的线程。对于大多数用途,su二进制文件旨在从已经以非root访问权限启动的应用程序中以编程方式启动;否则,su二进制文件用于运行本机Linux程序/命令,而不是Android应用程序。

让Android应用本身具有“root”访问权限的唯一方法是安装一个内核,自动授予绝对每个进程的root访问权限(我已经看到一些廉价的无名品牌设备可以直接执行此操作) 。这通常是一个非常糟糕的主意,因为它很容易意外破坏设备。

真正的问题是你为什么要首先这样做。如果您确实需要图库访问特权文件夹,请考虑安装busybox并将受保护目录作为公共目录安装在某处。这将要求您拥有一个有根设备。