Termux 终端显示功能实现。
This commit is contained in:
@@ -13,6 +13,9 @@ WinBoLL 网站浏览器。
|
|||||||
阶段版编译命令 :bash .winboll/bashPublishAPKAddTag.sh winboll
|
阶段版编译命令 :bash .winboll/bashPublishAPKAddTag.sh winboll
|
||||||
|
|
||||||
#### 使用说明
|
#### 使用说明
|
||||||
|
3. Termux应用配置:
|
||||||
|
- 已安装Termux(包名 com.termux );
|
||||||
|
- 执行 echo "allow-external-apps = true" > ~/.termux/termux.properties
|
||||||
|
|
||||||
#### 参与贡献
|
#### 参与贡献
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#Created by .winboll/winboll_app_build.gradle
|
||||||
#Mon Jan 19 06:42:29 GMT 2026
|
#Mon Jan 19 06:49:40 GMT 2026
|
||||||
stageCount=11
|
stageCount=11
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.11
|
baseVersion=15.11
|
||||||
publishVersion=15.11.10
|
publishVersion=15.11.10
|
||||||
buildCount=25
|
buildCount=26
|
||||||
baseBetaVersion=15.11.11
|
baseBetaVersion=15.11.11
|
||||||
|
|||||||
@@ -146,69 +146,48 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
/**
|
/**
|
||||||
* 测试执行Termux命令(按钮点击事件)
|
* 测试执行Termux命令(按钮点击事件)
|
||||||
*/
|
*/
|
||||||
public void onTestTermuxCMD(View view) {
|
/**
|
||||||
LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,开始执行Termux命令");
|
* 测试执行Termux命令(按钮点击事件,唤起Termux窗口并直接显示输出)
|
||||||
tvMessage.append("\n【测试:执行Termux命令】\n");
|
*/
|
||||||
|
public void onTestTermuxCMD(View view) {
|
||||||
|
LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,开始执行Termux命令(终端会话模式)");
|
||||||
|
tvMessage.append("\n【测试:执行Termux命令(唤起窗口)】\n");
|
||||||
|
|
||||||
// 1. 校验Termux是否安装
|
// 1. 校验Termux是否安装
|
||||||
if (!TermuxCommandExecutor.isTermuxInstalled(this)) {
|
if (!TermuxCommandExecutor.isTermuxInstalled(this)) {
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:未安装Termux应用");
|
LogUtils.e(TAG, "onTestTermuxCMD() 错误:未安装Termux应用");
|
||||||
tvMessage.append("错误:未安装Termux应用(包名:com.termux)\n");
|
tvMessage.append("错误:未安装Termux应用(包名:com.termux)\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 2. 校验目录是否存在
|
// 2. 校验目录是否存在
|
||||||
File termuxDir = new File(TERMUX_HOME_PATH);
|
File termuxDir = new File(TERMUX_HOME_PATH);
|
||||||
if (!termuxDir.exists()) {
|
if (!termuxDir.exists()) {
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:Termux目录不存在,路径:" + TERMUX_HOME_PATH);
|
LogUtils.e(TAG, "onTestTermuxCMD() 错误:Termux目录不存在,路径:" + TERMUX_HOME_PATH);
|
||||||
tvMessage.append("错误:Termux目录不存在,无法执行命令\n");
|
tvMessage.append("错误:Termux目录不存在,无法执行命令\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 构造并执行命令(修复:用bash -c包裹多命令,确保输出统一重定向)
|
// 3. 构造命令(无重定向,直接在Termux窗口执行)
|
||||||
tvMessage.append("正在执行命令...\n");
|
tvMessage.append("正在唤起Termux窗口并执行命令...\n");
|
||||||
String targetCmd = "ls -al " + TERMUX_HOME_PATH + " && echo '\\n系统信息:' && uname -a && echo '\\n当前用户:' && whoami";
|
//String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami";
|
||||||
// 关键修复:用bash -c包裹命令,确保所有输出被重定向
|
// 命令末尾添加read,执行完后等待用户按回车
|
||||||
String cmdWithRedirect = "bash -c \"" + targetCmd + "\" > " + CMD_RESULT_FILE + " 2>&1";
|
String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami && read -p '按回车键关闭终端...'";
|
||||||
LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + cmdWithRedirect);
|
LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + targetCmd);
|
||||||
|
|
||||||
boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, cmdWithRedirect);
|
// 关键修改:调用executeTerminalCommand(默认终端会话模式,唤起Termux窗口)
|
||||||
if (!cmdSuccess) {
|
// 移除输出重定向,让命令直接在Termux窗口中显示
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败");
|
boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, targetCmd);
|
||||||
tvMessage.append("命令发送失败!\n可能原因:\n1.Termux未开启外部应用调用权限\n2.sharedUserId配置不一致\n3.TermuxCommandExecutor类路径错误\n");
|
if (!cmdSuccess) {
|
||||||
return;
|
LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败");
|
||||||
}
|
tvMessage.append("命令发送失败!\n可能原因:\n1.Termux未开启外部应用调用权限\n2.sharedUserId配置不一致\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// 4. 延迟读取结果(调整延迟为2.5秒,适配命令执行耗时)
|
// 提示用户查看Termux窗口
|
||||||
new Thread(new Runnable() {
|
tvMessage.append("已唤起Termux窗口,命令输出将直接显示在Termux中\n");
|
||||||
@Override
|
tvMessage.append("-------------------------\n");
|
||||||
public void run() {
|
}
|
||||||
LogUtils.d(TAG, "onTestTermuxCMD() 结果读取线程启动,延迟2.5秒");
|
|
||||||
try {
|
|
||||||
Thread.sleep(2500);
|
|
||||||
final String result = readCmdResultDirectly();
|
|
||||||
|
|
||||||
mainHandler.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
tvMessage.append("命令执行结果:\n");
|
|
||||||
tvMessage.append(result);
|
|
||||||
tvMessage.append("\n-------------------------\n");
|
|
||||||
deleteCmdResultFile();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} catch (InterruptedException e) {
|
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:结果读取线程中断", e);
|
|
||||||
mainHandler.post(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
tvMessage.append("错误:读取结果失败,线程被中断\n");
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}).start();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跨包读取Termux命令结果文件
|
* 跨包读取Termux命令结果文件
|
||||||
|
|||||||
Reference in New Issue
Block a user