From 8b1f119e44de3cf136ca90f3f35d097ae7ff4cb8 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Mon, 19 Jan 2026 17:39:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=20WinBoLL=E5=B7=A5=E4=BD=9C?= =?UTF-8?q?=E7=9B=AE=E5=BD=95=E4=B8=BA/sdcard/WinBoLLStudio=E3=80=82?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=20bash=E7=BB=88=E7=AB=AF=E5=91=BD=E4=BB=A4?= =?UTF-8?q?=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- winboll/build.properties | 4 +- .../unittest/TermuxEnvTestActivity.java | 61 ++++++++++++++++++- .../res/layout/activity_termux_env_test.xml | 8 ++- 3 files changed, 69 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 8747ee0..82d1350 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Mon Jan 19 07:45:31 GMT 2026 +#Mon Jan 19 09:37:07 GMT 2026 stageCount=11 libraryProject= baseVersion=15.11 publishVersion=15.11.10 -buildCount=40 +buildCount=45 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 94cb59b..ad6667e 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 @@ -31,7 +31,7 @@ import java.nio.charset.StandardCharsets; public class TermuxEnvTestActivity extends BaseWinBoLLActivity { // 常量属性(置顶排列) public static final String TAG = "TermuxEnvTestActivity"; - private static final String TERMUX_HOME_PATH = "/data/data/com.termux/files/home/WinBoLLStudio"; + private static final String TERMUX_HOME_PATH = "/sdcard/WinBoLLStudio"; private static final String CMD_RESULT_FILE = TERMUX_HOME_PATH + "/.authcenter_cmd_result.tmp"; // 成员属性(常量后排列) @@ -209,7 +209,66 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { tvMessage.append("💡 若未实时输出,请在Termux中执行:pkg install coreutils(安装stdbuf)\n"); tvMessage.append("-------------------------\n"); } + + public void onOpenTermuxBash(View view) { + LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,执行Gradle命令(实时输出)"); + tvMessage.append("\n【测试:执行Gradle命令(实时输出)】\n"); + // 1. 校验Termux是否安装 + if (!TermuxCommandExecutor.isTermuxInstalled(this)) { + LogUtils.e(TAG, "onTestTermuxCMD() 错误:未安装Termux应用"); + tvMessage.append("错误:未安装Termux应用(包名:com.termux)\n"); + return; + } + + // 2. 定义核心路径(确保路径与Termux中一致) + String gradleFullPath = "/data/data/com.termux/files/home/gradle/gradle-7.5.1/bin/gradle"; + String projectPath = TERMUX_HOME_PATH + "/Sources/WinBoLL"; // 项目目录 + + // 3. 构造命令(核心:用stdbuf禁用缓冲,实现实时输出) + String targetCmd = ""; + // 步骤1:进入项目目录(不存在则创建) + targetCmd += "cd " + projectPath + " || (mkdir -p " + projectPath + " && cd " + projectPath + ") && "; + // 步骤2:加载环境变量 + targetCmd += "source ~/.bashrc && "; + // 步骤3:显式配置PATH + targetCmd += "export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/home/gradle/gradle-7.5.1/bin:$PATH && "; + // 步骤4:用stdbuf禁用stdout/stderr缓冲(关键!),执行Gradle命令 + // -o0:stdout无缓冲;-e0:stderr无缓冲;-i0:stdin无缓冲 + //targetCmd += "stdbuf -o0 -e0 -i0 " + gradleFullPath + " task --all | grep assemble && "; + //targetCmd += "stdbuf -o0 -e0 -i0 " + gradleFullPath + " -Pandroid.aapt2FromMavenOverride=/data/data/com.termux/files/home/android-sdk/build-tools/34.0.4/aapt2 assembleBetaDebug && "; + targetCmd += "stdbuf -o0 -e0 -i0 bash && "; + // 步骤5:执行成功提示 + targetCmd += "echo '\n✅ 命令执行完成!' && echo '\n📌 项目目录:" + projectPath + "' && read -p '按回车键关闭终端...'"; + + LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + targetCmd); + + // 4. 执行命令(终端会话模式,唤起Termux窗口) + boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, targetCmd); + if (!cmdSuccess) { + LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败"); + tvMessage.append("命令发送失败!\n"); + tvMessage.append("可能原因:\n"); + tvMessage.append("1.Termux未开启外部应用调用权限(执行termux-setup-storage后配置)\n"); + tvMessage.append("2.sharedUserId配置不一致\n"); + tvMessage.append("3.Termux未安装stdbuf(执行pkg install coreutils)\n"); + return; + } + + // 5. 应用内提示(说明实时输出特性) + tvMessage.append("已唤起Termux窗口,执行说明:\n"); + tvMessage.append("1. 自动创建/进入项目目录:"); + tvMessage.append(projectPath); + tvMessage.append("\n"); + tvMessage.append("2. 禁用输出缓冲(stdbuf),实现Gradle实时输出\n"); + tvMessage.append("3. 筛选assemble相关任务(grep assemble)\n"); + tvMessage.append("⚙️ Gradle路径:"); + tvMessage.append(gradleFullPath); + tvMessage.append("\n"); + tvMessage.append("💡 若未实时输出,请在Termux中执行:pkg install coreutils(安装stdbuf)\n"); + tvMessage.append("-------------------------\n"); + } + /** * 跨包读取Termux命令结果文件(保留原功能,兼容其他场景) */ diff --git a/winboll/src/main/res/layout/activity_termux_env_test.xml b/winboll/src/main/res/layout/activity_termux_env_test.xml index 9378f12..918a360 100644 --- a/winboll/src/main/res/layout/activity_termux_env_test.xml +++ b/winboll/src/main/res/layout/activity_termux_env_test.xml @@ -12,10 +12,16 @@ android:id="@+id/toolbar"/> + +