我想使用命令行启动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>
答案 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并将受保护目录作为公共目录安装在某处。这将要求您拥有一个有根设备。