gradle命令调用成功
This commit is contained in:
@@ -1,8 +1,8 @@
|
|||||||
#Created by .winboll/winboll_app_build.gradle
|
#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
|
stageCount=11
|
||||||
libraryProject=
|
libraryProject=
|
||||||
baseVersion=15.11
|
baseVersion=15.11
|
||||||
publishVersion=15.11.10
|
publishVersion=15.11.10
|
||||||
buildCount=26
|
buildCount=36
|
||||||
baseBetaVersion=15.11.11
|
baseBetaVersion=15.11.11
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ import java.nio.charset.StandardCharsets;
|
|||||||
/**
|
/**
|
||||||
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
* @Author 豆包&ZhanGSKen<zhangsken@qq.com>
|
||||||
* @Date 2026/01/19 11:11:00
|
* @Date 2026/01/19 11:11:00
|
||||||
* @LastEditTime 2026/01/20 15:30:00
|
* @LastEditTime 2026/01/21 10:45:00
|
||||||
* @Describe Termux环境测试工具(跨包+sharedUserId模式)
|
* @Describe Termux环境测试工具(跨包+sharedUserId模式)
|
||||||
* 适配不同应用包名(当前包:cc.winboll.studio.winboll.beta / Termux包:com.termux)
|
* 适配不同应用包名(当前包:cc.winboll.studio.winboll.beta / Termux包:com.termux)
|
||||||
* 支持Termux目录读取、命令执行及结果展示,基于sharedUserId实现跨包权限适配
|
* 支持Termux目录读取、Gradle命令执行(唤起窗口显示输出),基于sharedUserId实现跨包权限适配
|
||||||
*/
|
*/
|
||||||
public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
||||||
// 常量属性(置顶排列)
|
// 常量属性(置顶排列)
|
||||||
@@ -70,6 +70,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
initMsg.append("当前应用包名:").append(getPackageName()).append("\n");
|
initMsg.append("当前应用包名:").append(getPackageName()).append("\n");
|
||||||
initMsg.append("Termux应用包名:com.termux\n");
|
initMsg.append("Termux应用包名:com.termux\n");
|
||||||
initMsg.append("sharedUserId:com.termux(需一致)\n");
|
initMsg.append("sharedUserId:com.termux(需一致)\n");
|
||||||
|
initMsg.append("支持功能:目录读取、Gradle命令执行(唤起Termux窗口)\n");
|
||||||
initMsg.append("-------------------------\n");
|
initMsg.append("-------------------------\n");
|
||||||
tvMessage.setText(initMsg.toString());
|
tvMessage.setText(initMsg.toString());
|
||||||
|
|
||||||
@@ -121,8 +122,8 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
if (createSuccess) {
|
if (createSuccess) {
|
||||||
LogUtils.d(TAG, "initTermuxDirectory() Termux目录创建成功:" + TERMUX_HOME_PATH);
|
LogUtils.d(TAG, "initTermuxDirectory() Termux目录创建成功:" + TERMUX_HOME_PATH);
|
||||||
tvMessage.append("Termux目录创建成功:");
|
tvMessage.append("Termux目录创建成功:");
|
||||||
tvMessage.append(TERMUX_HOME_PATH);
|
tvMessage.append(TERMUX_HOME_PATH);
|
||||||
tvMessage.append("\n");
|
tvMessage.append("\n");
|
||||||
} else {
|
} else {
|
||||||
LogUtils.e(TAG, "initTermuxDirectory() 错误:Termux目录创建失败");
|
LogUtils.e(TAG, "initTermuxDirectory() 错误:Termux目录创建失败");
|
||||||
tvMessage.append("警告:Termux目录创建失败!\n请检查:\n1.AndroidManifest.xml中sharedUserId是否为com.termux\n2.设备是否已root(部分机型需root才能跨包写私有目录)\n");
|
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();
|
String fileListStr = readTermuxHomeFileList();
|
||||||
tvMessage.append(fileListStr);
|
tvMessage.append(fileListStr);
|
||||||
tvMessage.append("\n-------------------------\n");
|
tvMessage.append("\n-------------------------\n");
|
||||||
|
|
||||||
LogUtils.d(TAG, "onTestTermuxEnv() 执行完成,读取结果长度:" + fileListStr.length() + "字符");
|
LogUtils.d(TAG, "onTestTermuxEnv() 执行完成,读取结果长度:" + fileListStr.length() + "字符");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 测试执行Termux命令(按钮点击事件)
|
* 测试执行Gradle命令(唤起Termux窗口,修复source加载+目录容错)
|
||||||
*/
|
*/
|
||||||
/**
|
public void onTestTermuxCMD(View view) {
|
||||||
* 测试执行Termux命令(按钮点击事件,唤起Termux窗口并直接显示输出)
|
LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,执行Gradle命令(修复环境变量加载)");
|
||||||
*/
|
tvMessage.append("\n【测试:执行Gradle命令(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. 定义核心路径(确保路径与Termux中一致)
|
||||||
File termuxDir = new File(TERMUX_HOME_PATH);
|
String gradleFullPath = "/data/data/com.termux/files/home/gradle/gradle-7.5.1/bin/gradle";
|
||||||
if (!termuxDir.exists()) {
|
String projectPath = TERMUX_HOME_PATH + "/Sources/WinBoLL"; // 项目目录
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:Termux目录不存在,路径:" + TERMUX_HOME_PATH);
|
|
||||||
tvMessage.append("错误:Termux目录不存在,无法执行命令\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 3. 构造命令(无重定向,直接在Termux窗口执行)
|
// 3. 构造命令(关键修复:&&前后加空格,目录容错,双重环境变量保障)
|
||||||
tvMessage.append("正在唤起Termux窗口并执行命令...\n");
|
String targetCmd = "";
|
||||||
//String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami";
|
// 步骤1:进入项目目录(不存在则创建,避免cd失败)
|
||||||
// 命令末尾添加read,执行完后等待用户按回车
|
targetCmd += "cd " + projectPath + " || (mkdir -p " + projectPath + " && cd " + projectPath + ") && ";
|
||||||
String targetCmd = "ls -la " + TERMUX_HOME_PATH + " && echo '\n系统信息:' && uname -a && echo '\n当前用户:' && whoami && read -p '按回车键关闭终端...'";
|
// 步骤2:加载bash环境变量(&&前后加空格,确保解析)
|
||||||
LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + targetCmd);
|
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 '按回车键关闭终端...'";
|
||||||
|
|
||||||
// 关键修改:调用executeTerminalCommand(默认终端会话模式,唤起Termux窗口)
|
LogUtils.d(TAG, "onTestTermuxCMD() 执行命令:" + targetCmd);
|
||||||
// 移除输出重定向,让命令直接在Termux窗口中显示
|
|
||||||
boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, targetCmd);
|
|
||||||
if (!cmdSuccess) {
|
|
||||||
LogUtils.e(TAG, "onTestTermuxCMD() 错误:命令发送失败");
|
|
||||||
tvMessage.append("命令发送失败!\n可能原因:\n1.Termux未开启外部应用调用权限\n2.sharedUserId配置不一致\n");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 提示用户查看Termux窗口
|
// 4. 执行命令(终端会话模式,唤起Termux窗口)
|
||||||
tvMessage.append("已唤起Termux窗口,命令输出将直接显示在Termux中\n");
|
boolean cmdSuccess = TermuxCommandExecutor.executeTerminalCommand(this, targetCmd);
|
||||||
tvMessage.append("-------------------------\n");
|
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命令结果文件(保留原功能,兼容其他场景)
|
||||||
* @return 命令执行结果字符串
|
|
||||||
*/
|
*/
|
||||||
private String readCmdResultDirectly() {
|
private String readCmdResultDirectly() {
|
||||||
LogUtils.d(TAG, "readCmdResultDirectly() 开始读取命令结果,文件路径:" + CMD_RESULT_FILE);
|
LogUtils.d(TAG, "readCmdResultDirectly() 开始读取命令结果,文件路径:" + CMD_RESULT_FILE);
|
||||||
@@ -238,7 +247,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 删除命令结果临时文件
|
* 删除命令结果临时文件(保留原功能)
|
||||||
*/
|
*/
|
||||||
private void deleteCmdResultFile() {
|
private void deleteCmdResultFile() {
|
||||||
LogUtils.d(TAG, "deleteCmdResultFile() 开始删除临时文件,路径:" + CMD_RESULT_FILE);
|
LogUtils.d(TAG, "deleteCmdResultFile() 开始删除临时文件,路径:" + CMD_RESULT_FILE);
|
||||||
@@ -263,8 +272,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 跨包读取Termux目录文件列表
|
* 跨包读取Termux目录文件列表(保留原功能)
|
||||||
* @return 目录文件列表字符串
|
|
||||||
*/
|
*/
|
||||||
private String readTermuxHomeFileList() {
|
private String readTermuxHomeFileList() {
|
||||||
LogUtils.d(TAG, "readTermuxHomeFileList() 开始读取目录,路径:" + TERMUX_HOME_PATH);
|
LogUtils.d(TAG, "readTermuxHomeFileList() 开始读取目录,路径:" + TERMUX_HOME_PATH);
|
||||||
@@ -313,8 +321,6 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* 格式化文件大小(B→KB→MB)
|
* 格式化文件大小(B→KB→MB)
|
||||||
* @param length 文件长度(字节)
|
|
||||||
* @return 格式化后的文件大小字符串
|
|
||||||
*/
|
*/
|
||||||
private String formatFileSize(long length) {
|
private String formatFileSize(long length) {
|
||||||
LogUtils.d(TAG, "formatFileSize() 调用,文件长度:" + length + "B");
|
LogUtils.d(TAG, "formatFileSize() 调用,文件长度:" + length + "B");
|
||||||
|
|||||||
Reference in New Issue
Block a user