gradle命令调用成功
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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("sharedUserId:com.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");
|
||||
|
||||
Reference in New Issue
Block a user