From df2e91d3907192db17fd48a9b15b4df35c919c47 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 19 Jan 2026 14:51:24 +0800 Subject: [PATCH] =?UTF-8?q?Termux=20=E7=BB=88=E7=AB=AF=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- winboll/README.md | 3 + winboll/build.properties | 4 +- .../unittest/TermuxEnvTestActivity.java | 97 ++++++++----------- 3 files changed, 43 insertions(+), 61 deletions(-) diff --git a/winboll/README.md b/winboll/README.md index 2de1c76..7d41393 100644 --- a/winboll/README.md +++ b/winboll/README.md @@ -13,6 +13,9 @@ WinBoLL 网站浏览器。 阶段版编译命令 :bash .winboll/bashPublishAPKAddTag.sh winboll #### 使用说明 +3. Termux应用配置: +- 已安装Termux(包名 com.termux ); +- 执行  echo "allow-external-apps = true" > ~/.termux/termux.properties #### 参与贡献 diff --git a/winboll/build.properties b/winboll/build.properties index 5849bd7..ecbfe65 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #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 libraryProject= baseVersion=15.11 publishVersion=15.11.10 -buildCount=25 +buildCount=26 baseBetaVersion=15.11.11 diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/unittest/TermuxEnvTestActivity.java b/winboll/src/main/java/cc/winboll/studio/winboll/unittest/TermuxEnvTestActivity.java index a8fa62f..0c6810b 100644 --- a/winboll/src/main/java/cc/winboll/studio/winboll/unittest/TermuxEnvTestActivity.java +++ b/winboll/src/main/java/cc/winboll/studio/winboll/unittest/TermuxEnvTestActivity.java @@ -146,70 +146,49 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { /** * 测试执行Termux命令(按钮点击事件) */ - public void onTestTermuxCMD(View view) { - LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,开始执行Termux命令"); - tvMessage.append("\n【测试:执行Termux命令】\n"); + /** + * 测试执行Termux命令(按钮点击事件,唤起Termux窗口并直接显示输出) + */ + public void onTestTermuxCMD(View view) { + LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,开始执行Termux命令(终端会话模式)"); + tvMessage.append("\n【测试:执行Termux命令(唤起窗口)】\n"); - // 1. 校验Termux是否安装 - if (!TermuxCommandExecutor.isTermuxInstalled(this)) { - LogUtils.e(TAG, "onTestTermuxCMD() 错误:未安装Termux应用"); - tvMessage.append("错误:未安装Termux应用(包名:com.termux)\n"); - return; - } + // 1. 校验Termux是否安装 + if (!TermuxCommandExecutor.isTermuxInstalled(this)) { + LogUtils.e(TAG, "onTestTermuxCMD() 错误:未安装Termux应用"); + tvMessage.append("错误:未安装Termux应用(包名:com.termux)\n"); + return; + } - // 2. 校验目录是否存在 - File termuxDir = new File(TERMUX_HOME_PATH); - if (!termuxDir.exists()) { - LogUtils.e(TAG, "onTestTermuxCMD() 错误:Termux目录不存在,路径:" + TERMUX_HOME_PATH); - tvMessage.append("错误:Termux目录不存在,无法执行命令\n"); - return; - } + // 2. 校验目录是否存在 + File termuxDir = new File(TERMUX_HOME_PATH); + if (!termuxDir.exists()) { + LogUtils.e(TAG, "onTestTermuxCMD() 错误:Termux目录不存在,路径:" + TERMUX_HOME_PATH); + tvMessage.append("错误:Termux目录不存在,无法执行命令\n"); + return; + } - // 3. 构造并执行命令(修复:用bash -c包裹多命令,确保输出统一重定向) - tvMessage.append("正在执行命令...\n"); - String targetCmd = "ls -al " + TERMUX_HOME_PATH + " && echo '\\n系统信息:' && uname -a && echo '\\n当前用户:' && whoami"; - // 关键修复:用bash -c包裹命令,确保所有输出被重定向 - String cmdWithRedirect = "bash -c \"" + targetCmd + "\" > " + CMD_RESULT_FILE + " 2>&1"; - LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + cmdWithRedirect); + // 3. 构造命令(无重定向,直接在Termux窗口执行) + tvMessage.append("正在唤起Termux窗口并执行命令...\n"); + //String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami"; + // 命令末尾添加read,执行完后等待用户按回车 + String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami && read -p '按回车键关闭终端...'"; + LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + targetCmd); - boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, cmdWithRedirect); - if (!cmdSuccess) { - LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败"); - tvMessage.append("命令发送失败!\n可能原因:\n1.Termux未开启外部应用调用权限\n2.sharedUserId配置不一致\n3.TermuxCommandExecutor类路径错误\n"); - return; - } - - // 4. 延迟读取结果(调整延迟为2.5秒,适配命令执行耗时) - new Thread(new Runnable() { - @Override - 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(); - } + // 关键修改:调用executeTerminalCommand(默认终端会话模式,唤起Termux窗口) + // 移除输出重定向,让命令直接在Termux窗口中显示 + boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, targetCmd); + if (!cmdSuccess) { + LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败"); + tvMessage.append("命令发送失败!\n可能原因:\n1.Termux未开启外部应用调用权限\n2.sharedUserId配置不一致\n"); + return; + } + // 提示用户查看Termux窗口 + tvMessage.append("已唤起Termux窗口,命令输出将直接显示在Termux中\n"); + tvMessage.append("-------------------------\n"); + } + /** * 跨包读取Termux命令结果文件 * @return 命令执行结果字符串