3

我想使用命令行来启动一个 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>
4

2 回答 2

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 "am start xxx"' 失败的原因是环境问题。您可以尝试执行以下操作:

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());

2.以root用户身份运行画廊将无法工作,画廊应用程序不会以root用户身份运行。这是系统限制,除非您修改框架(zygote 进程)。

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

于 2013-08-28T09:19:22.540 回答
2

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

让 Android 应用程序本机拥有“root”访问权限的唯一方法是安装一个内核,该内核自动授予对每个进程的 root 访问权限(我已经看到一些廉价的无名牌设备开箱即用)。这通常是一个非常糟糕的主意,因为意外破坏设备变得非常容易。

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

于 2013-08-28T09:46:27.900 回答