gpt4 book ai didi

android - 为 Android 构建终端模拟器

转载 作者:搜寻专家 更新时间:2023-11-01 09:10:20 27 4
gpt4 key购买 nike

我一直在尝试为 Android 构建终端模拟器。作为一个新手,我的想法是执行每个命令并将输出存储在一个文件中,该文件的内容将在每次执行后显示。伪代码:

public Boolean execCommands(String command) {
try {
rt = Runtime.getRuntime();
process = rt.exec("su");
DataOutputStream os = new DataOutputStream(process.getOutputStream());
os.writeBytes("echo $ \""+command+ "\" >> /sdcard/Android/data/terminalemulatorlog.txt\n\n\n");
/**** Note : String command = (EditText)findViewById(R.id.command).getText().toString(); ****/
os.flush();
os.writeBytes("exit\n");
os.flush();
process.waitFor();
}
// Error Handling
displayOutput(); //Loads and displays the Text File (/sdcard/Android/data/terminalemulatorlog.txt)
return true;
}

除了少数特殊命令(例如“清除”)外,这段代码有效。但我更关心的是以下问题:

  1. 每次执行命令时,我都会寻求 super 用户权限(代码的第二行)。我想取消这个。
  2. 在用户输入一个命令后又输入另一个命令的情况下,
    如:

    cd /sdcard    
    touch File.txt

    File.txt 是在“/”而不是“/sdcard”中创建的。到目前为止,为了避免这种情况,我正在跟踪所有“cd”命令以确定当前的工作目录是什么。我希望有更好的方法解决这个问题。

如果有人能帮助我,我将不胜感激。

最佳答案

不确定您是否仍然需要这个,但这是我一次发出多个命令而不是使用“su”让它们运行的​​方式。

try {
String[] commands = {
"dumpstate > /sdcard/LogFiles/dumpstate.txt",
"dumpsys > /sdcard/LogFiles/dumpsys.txt",
"logcat -d > /sdcard/LogFiles/log.txt",
"cat /sdcard/LogFiles/dumpstate.txt /sdcard/LogFiles/dumpsys.txt /sdcard/LogFiles/log.txt > /sdcard/LogFiles/bugreport.rtf" };
Process p = Runtime.getRuntime().exec("/system/bin/sh -");
DataOutputStream os = new DataOutputStream(p.getOutputStream());
for (String tmpCmd : commands) {
os.writeBytes(tmpCmd + "\n");
}
} catch (IOException e) {
e.printStackTrace();
}

关于android - 为 Android 构建终端模拟器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8673016/

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