可能重复:su的含义是什么:process = Runtime.getRuntime().exec("su");
我厌倦了尝试所有不同的事情,但我仍然没有成功地理解什么时候会起作用.什么是Android中的设备?有人请帮帮我.
我回答了以下问题.我在那里发布的解决方案,我测试过它也有效.
这是我的问题:
我试过以下.
复制了su.
已安装SuperUser.apk,
从程序i调用su然后使用新创建的进程,我执行了所需的操作.
这有2个结果.
1)当设备被root(如在z4root中执行Permanent root选项)时,它可以工作,它会更改系统文件权限.
2)当设备没有root时,它不起作用.
请解释z4root执行哪些额外的操作,这使得任务成为可能.请简要说明一下.
如果我的问题不明确,请告诉我.万分感谢..
我使用 bash 的时间不超过 6 个小时,现在我正在尝试创建一个菜单,让您可以做一些“有趣”的事情:D。
我的问题是if 语句检查您是否处于 sudo 模式。我想有3个条件:
2)
if [ "$EUID" -ne 1 ]
then
echo "Checking if you are in sudo mode..."
echo "Error, please insert your password:"
sudo ls /root
if [ "$EUID" -ne 1 ]
then
echo -e "\nCould not authenticate the user."
echo -e "For security reasons the application will be closed."
exit
else
echo "==============================================================="
echo -e "ALL …Run Code Online (Sandbox Code Playgroud) 我正在尝试从我的java代码安装系统应用程序,到目前为止,我还没有取得任何成功.
以下是我到目前为止所做的事情:
android:sharedUserId="android.uid.system"在Manifest中.我一直在努力(尝试,然后再尝试一些)Runtime.getRuntime.exec("su").我打算挂载系统分区rw,cat为apk 做一个,然后进行系统分区ro.以下是命令列表:
mount -o remount,rw -t yaffs2 /dev/block/mtdblock3 /system<br>
cat /sdcard/application.apk > /system/app/application.apk<br>
mount -o remount,ro -t yaffs2 /dev/block/mtdblock3 /system<br><br>The application.apk here is the app being installed from the installer app. This app is also signed with platform key, and has the sharedUserId configured.
Run Code Online (Sandbox Code Playgroud)INSTALL_PACKAGES清单中的许可.我尝试了许多exec("")格式的变体,包括使用'su -c'每个命令.我得到了Broken Pipe异常和安全异常.有时,我没有得到异常,但文件未被复制.
请让我知道我在这里缺少什么.有人有这个工作吗?
谢谢!
如果我们以管理员身份打开msysgit,我们可以像使用root一样使用它.但是,在没有管理员权限的情况下打开通常更容易.例如,对于管理员权限,您通常必须转到Windows资源管理器,"开始"菜单/屏幕等,并且您无法从任务栏执行此操作.有时,我懒得做这一切,但我想在Bash中获得管理员权限.Git Bash 是否有sudo- 或者su- 类似的命令或脚本等?进入cmd.exe,PowerShell等等,然后做一些类似的runas工作,如果没有别的.
通常,我使用我的登录凭据(myuserid@xyz.com)登录到服务器xyz.com,我的主页=/home/user/myuserid/
登录后,我做"su - someuser"来访问文件.
我想将文件从本地机器复制到某个用户的目录,例如:/ abc/someuser/temp
为此,我使用scp somefile.txt myuserid@xyz.com:/ abc/someuser/temp/
它询问我的密码是否为myuserid,然后说../abc/someuser/temp/permission denied
我将使用什么命令将文件复制到远程主机中的su?
我尝试制作批处理文件来运行adb命令.我想用su -c,但我得到错误:
su: invalid uid/gid '-c'.
Run Code Online (Sandbox Code Playgroud)
我看到某个地方我的su版本不支持-c,我怎么能启用它?
此命令具有空输出.
su user -c "ABC=abc;echo $ABC"
Run Code Online (Sandbox Code Playgroud)
任何想法,如何在输入命令中定义变量?
通过以下方式从提示中轻松获取后台进程ID:
$ my_daemon &
$ echo $!
Run Code Online (Sandbox Code Playgroud)
但是,如果我想以不同的用户身份运行它,例如:
su - joe -c "/path/to/my_daemon &;"
Run Code Online (Sandbox Code Playgroud)
现在我如何捕获my_daemon的PID?
对于我的生活,我无法让我的应用程序从su shell中调用busybox的进程获得响应.
我已经尝试了三种不同的方法,并尝试了三种方法的组合以使其工作,但我永远无法使用busybox的任何东西获得输出,只有其他命令.
更具体地说,我可以让它返回像"ls/data"和"cat suchandsuch.file"这样的命令,但任何以"busybox"开头的东西(即busybox mount,busybox free)都不会显示任何内容.
这是最接近我的方法,此代码使用"ls/data",但不是"busybox free"
这个将运行命令(大多数情况下),并返回一个空字符串而不是从输入流无限循环.
Process p;
try {
p = Runtime.getRuntime().exec(new String[]{"su", "-c", "/system/bin/sh"});
DataOutputStream stdin = new DataOutputStream(p.getOutputStream());
stdin.writeBytes("ls /data\n");
DataInputStream stdout = new DataInputStream(p.getInputStream());
byte[] buffer = new byte[4096];
int read = 0;
String out = new String();
while(true){
read = stdout.read(buffer);
out += new String(buffer, 0, read);
if(read<4096){
break;
}
}
Toast.makeText(getApplicationContext(), out, Toast.LENGTH_SHORT).show();
} catch (IOException e) {
e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)
底部附近的吐司显示"ls/data"中的所有内容,但是当更改为busybox的任何内容时,其空白或为空.
我也尝试了这两种方法,但其中没有一种方法有效.(我在命令运行后将进程传递给他们.)
当你点击方法的按钮时,这两个都会导致应用程序冻结.
String termReader(Process process){
BufferedReader reader = new …Run Code Online (Sandbox Code Playgroud) 我有这款"老式"联想A2107平板电脑,这是我多年前的根源(使用http://androidforums.com/threads/a2107-root-mods-and-rom-discussion.661261/下载,运行其root.bat从我的GNU/Linux机器手动编写脚本)并且工作正常.
然后我将这款平板电脑传递给了我的女儿几年,现在我把它拿回来了.
/ system/bin/su仍然存在,仍然是相同的日期和大小,仍然模式"rwsr-sr-x",仍然是相同的固件(Android 4.0.3)所以看起来都很好,但是当我尝试从它运行它一个shell,它只是告诉我"Permission denied".
知道可能会发生什么吗?我可以尝试做些什么来追踪它?