gpt4 book ai didi

android - 在 Android 应用程序中执行 shell 脚本不显示结果

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:12:00 24 4
gpt4 key购买 nike

我无法弄清楚我的代码发生了什么。我正在尝试创建一个个人资料应用程序。该设备已获得 root 权限并包含 BusyBox。我编写了一个 linux 脚本,它根据登录的用户交换/data 和/cache 分区。

当我从 ADB 执行此脚本时,它运行良好。我认为在应用程序中实现它会相当容易。

#sp登录用户名密码

Android 使用新配置文件重新初始化,一切正常。这是我在 Android 中拥有的:

Log.v("Profiles", "sp login " + user + " " + password);
Process process = Runtime.getRuntime().exec("sp login " + user + " " + password);

BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
int read;
char[] buffer = new char[4096];
StringBuffer output = new StringBuffer();
while ((read = reader.read(buffer)) > 0) {
output.append(buffer, 0, read);
}
reader.close();
process.waitFor();
Log.v("Profiles", output.toString());

唯一记录下来的是我在实际脚本本身中的“echo ”。我看不到在该脚本中执行的命令的任何结果。例如,当在 ADB 中运行时,所有挂载命令和我正在做的不同事情都有输出。这些都不会在输出字符串中输出。

有什么建议吗?

最佳答案

您需要为该进程执行“su”,这将执行您的 shell 脚本。

否则,即使设备已经root,此进程也没有root权限。

下面的代码是一个例子,供您引用。

public void RunAsRoot(String[] cmds){
try{
Process p = Runtime.getRuntime().exec("su");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
for(String tmpCmds : cmds){
os.writeBytes(tmpCmds+"\n");
os.flush();
os.writeBytes("exit\n");
os.flush();
}
BufferedReader stdInput = new BufferedReader(new
InputStreamReader(p.getInputStream()));

// read the output from the command
String s = null;
while ((s = stdInput.readLine()) != null) {
System.out.println(s);
}
}catch(Exception e){
Log.e(LOG_TAG, "RunAsRoot exec failed");
}

关于android - 在 Android 应用程序中执行 shell 脚本不显示结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781821/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com