gradle命令调用成功

This commit is contained in:
2026-01-19 15:21:06 +08:00
parent df2e91d390
commit 15197b123c
2 changed files with 64 additions and 58 deletions

View File

@@ -1,8 +1,8 @@
#Created by .winboll/winboll_app_build.gradle
#Mon Jan 19 06:49:40 GMT 2026
#Mon Jan 19 07:19:47 GMT 2026
stageCount=11
libraryProject=
baseVersion=15.11
publishVersion=15.11.10
buildCount=26
buildCount=36
baseBetaVersion=15.11.11

View File

@@ -23,10 +23,10 @@ import java.nio.charset.StandardCharsets;
/**
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
* @Date 2026/01/19 11:11:00
* @LastEditTime 2026/01/20 15:30:00
* @LastEditTime 2026/01/21 10:45:00
* @Describe Termux环境测试工具跨包+sharedUserId模式
* 适配不同应用包名当前包cc.winboll.studio.winboll.beta / Termux包com.termux
* 支持Termux目录读取、命令执行及结果展示基于sharedUserId实现跨包权限适配
* 支持Termux目录读取、Gradle命令执行唤起窗口显示输出基于sharedUserId实现跨包权限适配
*/
public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
// 常量属性(置顶排列)
@@ -70,6 +70,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
initMsg.append("当前应用包名:").append(getPackageName()).append("\n");
initMsg.append("Termux应用包名com.termux\n");
initMsg.append("sharedUserIdcom.termux需一致\n");
initMsg.append("支持功能目录读取、Gradle命令执行唤起Termux窗口\n");
initMsg.append("-------------------------\n");
tvMessage.setText(initMsg.toString());
@@ -121,8 +122,8 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
if (createSuccess) {
LogUtils.d(TAG, "initTermuxDirectory() Termux目录创建成功" + TERMUX_HOME_PATH);
tvMessage.append("Termux目录创建成功");
tvMessage.append(TERMUX_HOME_PATH);
tvMessage.append("\n");
tvMessage.append(TERMUX_HOME_PATH);
tvMessage.append("\n");
} else {
LogUtils.e(TAG, "initTermuxDirectory() 错误Termux目录创建失败");
tvMessage.append("警告Termux目录创建失败\n请检查\n1.AndroidManifest.xml中sharedUserId是否为com.termux\n2.设备是否已root部分机型需root才能跨包写私有目录\n");
@@ -138,60 +139,68 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
String fileListStr = readTermuxHomeFileList();
tvMessage.append(fileListStr);
tvMessage.append("\n-------------------------\n");
tvMessage.append("\n-------------------------\n");
LogUtils.d(TAG, "onTestTermuxEnv() 执行完成,读取结果长度:" + fileListStr.length() + "字符");
}
/**
* 测试执行Termux命令按钮点击事件
* 测试执行Gradle命令唤起Termux窗口修复source加载+目录容错
*/
public void onTestTermuxCMD(View view) {
LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击执行Gradle命令修复环境变量加载");
tvMessage.append("\n【测试执行Gradle命令Termux窗口\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. 构造命令(关键修复:&&前后加空格,目录容错,双重环境变量保障)
String targetCmd = "";
// 步骤1进入项目目录不存在则创建避免cd失败
targetCmd += "cd " + projectPath + " || (mkdir -p " + projectPath + " && cd " + projectPath + ") && ";
// 步骤2加载bash环境变量&&前后加空格,确保解析)
targetCmd += "source ~/.bashrc && ";
// 步骤3显式添加Gradle路径到PATH双重保障避免source失效
targetCmd += "export PATH=/data/data/com.termux/files/usr/bin:/data/data/com.termux/files/home/gradle/gradle-7.5.1/bin:$PATH && ";
// 步骤4执行Gradle版本查询指定完整路径三重保障
//targetCmd += gradleFullPath + " -v && ";
targetCmd += gradleFullPath + " task --all | grep assemble && ";
// 步骤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可能原因\n1.Termux未开启外部应用调用权限执行termux-setup-storage后配置\n2.sharedUserId配置不一致\n3.设备未root导致目录创建失败\n");
return;
}
// 5. 应用内详细提示
tvMessage.append("已唤起Termux窗口执行流程\n");
tvMessage.append("1. 检查并创建项目目录:");
tvMessage.append(projectPath);
tvMessage.append("\n");
tvMessage.append("2. 加载Termux环境变量source ~/.bashrc\n");
tvMessage.append("3. 执行Gradle版本查询\n");
tvMessage.append("⚙️ Gradle路径");
tvMessage.append(gradleFullPath);
tvMessage.append("\n");
tvMessage.append("-------------------------\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;
}
// 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. 构造命令无重定向直接在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);
// 关键修改调用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 命令执行结果字符串
* 跨包读取Termux命令结果文件保留原功能兼容其他场景
*/
private String readCmdResultDirectly() {
LogUtils.d(TAG, "readCmdResultDirectly() 开始读取命令结果,文件路径:" + CMD_RESULT_FILE);
@@ -238,7 +247,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
}
/**
* 删除命令结果临时文件
* 删除命令结果临时文件(保留原功能)
*/
private void deleteCmdResultFile() {
LogUtils.d(TAG, "deleteCmdResultFile() 开始删除临时文件,路径:" + CMD_RESULT_FILE);
@@ -263,8 +272,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
}
/**
* 跨包读取Termux目录文件列表
* @return 目录文件列表字符串
* 跨包读取Termux目录文件列表(保留原功能)
*/
private String readTermuxHomeFileList() {
LogUtils.d(TAG, "readTermuxHomeFileList() 开始读取目录,路径:" + TERMUX_HOME_PATH);
@@ -313,8 +321,6 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
/**
* 格式化文件大小B→KB→MB
* @param length 文件长度(字节)
* @return 格式化后的文件大小字符串
*/
private String formatFileSize(long length) {
LogUtils.d(TAG, "formatFileSize() 调用,文件长度:" + length + "B");