From a53a0cbcdcc18da4d1062e0cd3532be87f12b8e8 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Fri, 13 Mar 2026 13:41:48 +0800 Subject: [PATCH 01/27] APK 15.11.15 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index dd56b55..bd9c1e4 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 29 17:03:53 HKT 2026 -stageCount=15 +#Fri Mar 13 13:41:48 HKT 2026 +stageCount=16 libraryProject= baseVersion=15.11 -publishVersion=15.11.14 +publishVersion=15.11.15 buildCount=0 -baseBetaVersion=15.11.15 +baseBetaVersion=15.11.16 From ea3a66bebe404afc74314d3630cfb9326f42a3fb Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:07:00 +0800 Subject: [PATCH 02/27] APK 15.11.16 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index bd9c1e4..7fecfba 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Fri Mar 13 13:41:48 HKT 2026 -stageCount=16 +#Sun Mar 15 10:07:00 HKT 2026 +stageCount=17 libraryProject= baseVersion=15.11 -publishVersion=15.11.15 +publishVersion=15.11.16 buildCount=0 -baseBetaVersion=15.11.16 +baseBetaVersion=15.11.17 From f2788dda9699590bd026d98d82179ecefebb9526 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:09:28 +0800 Subject: [PATCH 03/27] APK 15.11.17 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 7fecfba..03aac31 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:07:00 HKT 2026 -stageCount=17 +#Sun Mar 15 10:09:28 HKT 2026 +stageCount=18 libraryProject= baseVersion=15.11 -publishVersion=15.11.16 +publishVersion=15.11.17 buildCount=0 -baseBetaVersion=15.11.17 +baseBetaVersion=15.11.18 From b747d8397243675b9f0af4b149a034d72f5d78a4 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:26:55 +0800 Subject: [PATCH 04/27] APK 15.11.18 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 03aac31..01f4878 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:09:28 HKT 2026 -stageCount=18 +#Sun Mar 15 10:26:55 HKT 2026 +stageCount=19 libraryProject= baseVersion=15.11 -publishVersion=15.11.17 +publishVersion=15.11.18 buildCount=0 -baseBetaVersion=15.11.18 +baseBetaVersion=15.11.19 From 16a2c3c0c8e4a36b775f4df8aa129cadb5f58798 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:36:01 +0800 Subject: [PATCH 05/27] APK 15.11.19 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 01f4878..905fa47 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:26:55 HKT 2026 -stageCount=19 +#Sun Mar 15 10:36:01 HKT 2026 +stageCount=20 libraryProject= baseVersion=15.11 -publishVersion=15.11.18 +publishVersion=15.11.19 buildCount=0 -baseBetaVersion=15.11.19 +baseBetaVersion=15.11.20 From 7bd1357c8c4d388f132043d4d1c86ac1614f0831 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:46:25 +0800 Subject: [PATCH 06/27] APK 15.11.20 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 905fa47..851d86f 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:36:01 HKT 2026 -stageCount=20 +#Sun Mar 15 10:46:25 HKT 2026 +stageCount=21 libraryProject= baseVersion=15.11 -publishVersion=15.11.19 +publishVersion=15.11.20 buildCount=0 -baseBetaVersion=15.11.20 +baseBetaVersion=15.11.21 From c417d9732aaf7c45c6383b12a6f780ce1dc796f4 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 10:52:23 +0800 Subject: [PATCH 07/27] APK 15.11.21 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 851d86f..2c8fadf 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:46:25 HKT 2026 -stageCount=21 +#Sun Mar 15 10:52:23 HKT 2026 +stageCount=22 libraryProject= baseVersion=15.11 -publishVersion=15.11.20 +publishVersion=15.11.21 buildCount=0 -baseBetaVersion=15.11.21 +baseBetaVersion=15.11.22 From ad3aecf86712ac3d6c384f8a20b434f039729155 Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 11:07:05 +0800 Subject: [PATCH 08/27] APK 15.11.22 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 2c8fadf..923092b 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 10:52:23 HKT 2026 -stageCount=22 +#Sun Mar 15 11:07:05 HKT 2026 +stageCount=23 libraryProject= baseVersion=15.11 -publishVersion=15.11.21 +publishVersion=15.11.22 buildCount=0 -baseBetaVersion=15.11.22 +baseBetaVersion=15.11.23 From d49ecb3943e3464a58ac33d206ed81ae46d739ff Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 11:09:40 +0800 Subject: [PATCH 09/27] APK 15.11.23 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 923092b..62b110a 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 11:07:05 HKT 2026 -stageCount=23 +#Sun Mar 15 11:09:40 HKT 2026 +stageCount=24 libraryProject= baseVersion=15.11 -publishVersion=15.11.22 +publishVersion=15.11.23 buildCount=0 -baseBetaVersion=15.11.23 +baseBetaVersion=15.11.24 From ea896228d70ad03d6adeffa21024589a20de3c0c Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 11:46:14 +0800 Subject: [PATCH 10/27] APK 15.11.24 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index 62b110a..aa4c787 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 11:09:40 HKT 2026 -stageCount=24 +#Sun Mar 15 11:46:14 HKT 2026 +stageCount=25 libraryProject= baseVersion=15.11 -publishVersion=15.11.23 +publishVersion=15.11.24 buildCount=0 -baseBetaVersion=15.11.24 +baseBetaVersion=15.11.25 From b3976a863325bf52408fe278a2a300df381f27dd Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 11:48:40 +0800 Subject: [PATCH 11/27] APK 15.11.25 release Publish. --- winboll/build.properties | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/winboll/build.properties b/winboll/build.properties index aa4c787..ea90ffc 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Sun Mar 15 11:46:14 HKT 2026 -stageCount=25 +#Sun Mar 15 11:48:40 HKT 2026 +stageCount=26 libraryProject= baseVersion=15.11 -publishVersion=15.11.24 +publishVersion=15.11.25 buildCount=0 -baseBetaVersion=15.11.25 +baseBetaVersion=15.11.26 From 31c15920860f62f88d93ccf3575faa94604232da Mon Sep 17 00:00:00 2001 From: ZhanGSKen Date: Sun, 15 Mar 2026 11:50:01 +0800 Subject: [PATCH 12/27] =?UTF-8?q?Termux=E7=BB=88=E7=AB=AF=E8=B0=83?= =?UTF-8?q?=E7=94=A8=E6=8E=A5=E5=8F=A3=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- winboll/build.properties | 4 +- winboll/src/main/AndroidManifest.xml | 11 +- .../studio/winboll/models/NfcTermuxCmd.java | 14 +++ .../termux/NfcTermuxBridgeActivity.java | 104 ++++++++++++++++++ .../unittest/TermuxEnvTestActivity.java | 29 +++-- .../res/layout/activity_termux_env_test.xml | 6 + 6 files changed, 153 insertions(+), 15 deletions(-) create mode 100644 winboll/src/main/java/cc/winboll/studio/winboll/models/NfcTermuxCmd.java create mode 100644 winboll/src/main/java/cc/winboll/studio/winboll/termux/NfcTermuxBridgeActivity.java diff --git a/winboll/build.properties b/winboll/build.properties index dd56b55..ed66dae 100644 --- a/winboll/build.properties +++ b/winboll/build.properties @@ -1,8 +1,8 @@ #Created by .winboll/winboll_app_build.gradle -#Thu Jan 29 17:03:53 HKT 2026 +#Sun Mar 15 03:45:21 GMT 2026 stageCount=15 libraryProject= baseVersion=15.11 publishVersion=15.11.14 -buildCount=0 +buildCount=9 baseBetaVersion=15.11.15 diff --git a/winboll/src/main/AndroidManifest.xml b/winboll/src/main/AndroidManifest.xml index 74b3ee5..5344b59 100644 --- a/winboll/src/main/AndroidManifest.xml +++ b/winboll/src/main/AndroidManifest.xml @@ -18,7 +18,7 @@ tools:ignore="QueryAllPackagesPermission" /> - + + + + + + + + diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/models/NfcTermuxCmd.java b/winboll/src/main/java/cc/winboll/studio/winboll/models/NfcTermuxCmd.java new file mode 100644 index 0000000..c0ea16d --- /dev/null +++ b/winboll/src/main/java/cc/winboll/studio/winboll/models/NfcTermuxCmd.java @@ -0,0 +1,14 @@ +package cc.winboll.studio.winboll.models; + +/** + * @Author 豆包&ZhanGSKen + * @Date 2026/03/15 08:46 + */ +public class NfcTermuxCmd { + public String script; // 要执行的预制脚本名(如 auth.sh) + public String[] args; // 脚本参数 + public String workDir; // 工作目录 + public boolean background; // 是否后台执行 + public String resultDir; // 结果输出目录(可为 null) +} + diff --git a/winboll/src/main/java/cc/winboll/studio/winboll/termux/NfcTermuxBridgeActivity.java b/winboll/src/main/java/cc/winboll/studio/winboll/termux/NfcTermuxBridgeActivity.java new file mode 100644 index 0000000..40eefa2 --- /dev/null +++ b/winboll/src/main/java/cc/winboll/studio/winboll/termux/NfcTermuxBridgeActivity.java @@ -0,0 +1,104 @@ +package cc.winboll.studio.winboll.termux; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.widget.Toast; +import cc.winboll.studio.libappbase.LogUtils; +import cc.winboll.studio.winboll.models.NfcTermuxCmd; +import com.google.gson.Gson; + +public class NfcTermuxBridgeActivity extends Activity { + + private static final String TAG = "NfcTermuxBridge"; + private static final Gson GSON = new Gson(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + handleNfcIntent(getIntent()); + } + + @Override + protected void onNewIntent(Intent intent) { + super.onNewIntent(intent); + handleNfcIntent(intent); + } + + /** + * 处理 NFC 传递的 JSON 指令 + */ + private void handleNfcIntent(Intent intent) { + if (intent == null) return; + + try { + String json = intent.getStringExtra(Intent.EXTRA_TEXT); + + // 1. 发布版逻辑:正常接收 NFC 传入的 JSON + if (json == null || json.isEmpty()) { + LogUtils.e(TAG, "NFC 指令为空"); + finish(); + return; + } + + LogUtils.d(TAG, "接收 JSON:" + json); + + // 2. 解析指令 + NfcTermuxCmd cmd = GSON.fromJson(json, NfcTermuxCmd.class); + if (cmd.script == null || cmd.script.isEmpty()) { + LogUtils.e(TAG, "script 不能为空"); + finish(); + return; + } + + // 3. 拼接脚本路径 + String scriptPath = "/data/data/com.termux/files/home/TermuxWorkSpaces/BashShells/AutoNFC/" + cmd.script; + + // 4. 执行 Termux 命令 + boolean success = TermuxCommandExecutor.executeCommand( + this, + scriptPath, + cmd.args, + cmd.workDir, + cmd.background, + cmd.resultDir + ); + + // 5. 结果反馈 + if (success) { + Toast.makeText(this, "指令已发送:" + cmd.script, Toast.LENGTH_SHORT).show(); + LogUtils.i(TAG, "执行成功:" + scriptPath); + } else { + Toast.makeText(this, "指令发送失败", Toast.LENGTH_SHORT).show(); + LogUtils.e(TAG, "执行失败"); + } + + } catch (Exception e) { + LogUtils.e(TAG, "处理异常:" + e.getMessage(), e); + Toast.makeText(this, "解析失败", Toast.LENGTH_SHORT).show(); + } finally { + finish(); + } + } + + // =========================================================== + // 公共静态测试函数:外部可直接调用注入测试 JSON + // =========================================================== + public static void testCommand(Context context) { + try { + // 测试用指令 + String testJson = "{\"script\":\"BuildWinBoLLProject.sh\",\"args\":[\"WinBoLL_Demo\"],\"workDir\":null,\"background\":true,\"resultDir\":null}"; + + Intent testIntent = new Intent(context, NfcTermuxBridgeActivity.class); + testIntent.putExtra(Intent.EXTRA_TEXT, testJson); + + // 模拟跳转至自身 Activity + context.startActivity(testIntent); + + } catch (Exception e) { + LogUtils.e(TAG, "测试指令注入失败:" + e.getMessage()); + } + } +} + 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 16652ed..d24b40c 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 @@ -1,5 +1,6 @@ package cc.winboll.studio.winboll.unittest; +import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Looper; @@ -7,11 +8,11 @@ import android.view.View; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; -import cc.winboll.studio.libaes.utils.WinBoLLActivityManager; import cc.winboll.studio.libappbase.LogUtils; -import cc.winboll.studio.winboll.MainActivity; +import cc.winboll.studio.libappbase.ToastUtils; import cc.winboll.studio.winboll.R; import cc.winboll.studio.winboll.activities.BaseWinBoLLActivity; +import cc.winboll.studio.winboll.termux.NfcTermuxBridgeActivity; import cc.winboll.studio.winboll.termux.TermuxCommandExecutor; import java.io.BufferedReader; import java.io.File; @@ -19,7 +20,6 @@ import java.io.FileInputStream; import java.io.IOException; import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; -import android.app.Activity; /** * @Author 豆包&ZhanGSKen @@ -103,12 +103,12 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { ((AppCompatActivity) getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); mToolbar.setNavigationOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - LogUtils.d(TAG, "initToolbar() 导航栏返回按钮点击"); - getActivity().finish(); - } - }); + @Override + public void onClick(View v) { + LogUtils.d(TAG, "initToolbar() 导航栏返回按钮点击"); + getActivity().finish(); + } + }); LogUtils.d(TAG, "initToolbar() 初始化完成"); } @@ -216,7 +216,12 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { tvMessage.append("💡 若未实时输出,请在Termux中执行:pkg install coreutils(安装stdbuf)\n"); tvMessage.append("-------------------------\n"); } - + + public void onTestWinBoLLProjectBuild(View view) { + ToastUtils.show("onOpenTermuxBash"); + NfcTermuxBridgeActivity.testCommand(this); + } + public void onOpenTermuxBash(View view) { LogUtils.d(TAG, "onTestTermuxCMD() 按钮点击,执行Gradle命令(实时输出)"); tvMessage.append("\n【测试:执行Gradle命令(实时输出)】\n"); @@ -275,7 +280,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { tvMessage.append("💡 若未实时输出,请在Termux中执行:pkg install coreutils(安装stdbuf)\n"); tvMessage.append("-------------------------\n"); } - + /** * 跨包读取Termux命令结果文件(保留原功能,兼容其他场景) */ @@ -399,7 +404,7 @@ public class TermuxEnvTestActivity extends BaseWinBoLLActivity { String filePath = file.getAbsolutePath(); String fileSize = file.isFile() ? " | 大小:" + formatFileSize(file.length()) : ""; String filePerm = " | 权限:r:" + file.canRead() + "/w:" + file.canWrite(); - + result.append(fileType); result.append(" "); result.append(fileName); 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 918a360..a478c68 100644 --- a/winboll/src/main/res/layout/activity_termux_env_test.xml +++ b/winboll/src/main/res/layout/activity_termux_env_test.xml @@ -34,6 +34,12 @@ android:layout_height="wrap_content" android:text="TestTermuxEnv" android:onClick="onTestTermuxEnv"/> + +