From 1f6f538aaac9c66c2f59e8f1b87c25a412be2722 Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 11:41:07 +0800 Subject: [PATCH 1/8] Enable metered connection setting for VPN builder Revoke the default metered connections on Android Q and above. --- .../main/kotlin/com/simplexray/an/service/TProxyService.kt | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt b/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt index 1b67c055..a021b0f6 100644 --- a/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt +++ b/app/src/main/kotlin/com/simplexray/an/service/TProxyService.kt @@ -295,6 +295,10 @@ class TProxyService : VpnService() { setBlocking(false) setMtu(prefs.tunnelMtu) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + setMetered(false) + } + if (prefs.bypassLan) { addRoute("10.0.0.0", 8) addRoute("172.16.0.0", 12) @@ -440,4 +444,4 @@ tunnel: return tproxyConf } } -} \ No newline at end of file +} From c339760d4429c428b975c7d1554a1236eacd7abc Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 12:24:47 +0800 Subject: [PATCH 2/8] Change build process to assembleDebug APK --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 6fc23aea..cc3779b6 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,7 +100,7 @@ jobs: run: chmod +x ./gradlew - name: Build Release APK - run: ./gradlew assembleRelease + run: ./gradlew assembleDebug - name: Find and Copy APKs run: | From 7547b0186b669a1279a6d36f68e1295571659607 Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 12:37:30 +0800 Subject: [PATCH 3/8] Disable signingConfig for debug build Comment out signingConfig for debug build type. --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index 0ef06b98..f8eae0c6 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,7 +70,7 @@ android { } debug { minifyEnabled false - signingConfig signingConfigs.release + // signingConfig signingConfigs.release debuggable true } } From 57dccbfc639b119a9c77b227033ce8b1e64bbf40 Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 12:48:14 +0800 Subject: [PATCH 4/8] Change APK copy path from release to debug --- .github/workflows/build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index cc3779b6..c4e88592 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -105,7 +105,7 @@ jobs: - name: Find and Copy APKs run: | mkdir -p apks - find app/build/outputs/apk/release -name "*.apk" -exec cp {} apks/ \; + find app/build/outputs/apk/debug -name "*.apk" -exec cp {} apks/ \; - name: Upload Artifacts uses: actions/upload-artifact@v4 From b957839f3ba9e32d736e5e8e78e2dce8190987e8 Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 13:29:01 +0800 Subject: [PATCH 5/8] Enable signingConfig for debug build --- app/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/build.gradle b/app/build.gradle index f8eae0c6..0ef06b98 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -70,7 +70,7 @@ android { } debug { minifyEnabled false - // signingConfig signingConfigs.release + signingConfig signingConfigs.release debuggable true } } From e2f8484f949150c41d64ec5319eb9750540ff3af Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Mon, 6 Apr 2026 13:30:06 +0800 Subject: [PATCH 6/8] Change build process to assemble release APK --- .github/workflows/build.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c4e88592..6fc23aea 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -100,12 +100,12 @@ jobs: run: chmod +x ./gradlew - name: Build Release APK - run: ./gradlew assembleDebug + run: ./gradlew assembleRelease - name: Find and Copy APKs run: | mkdir -p apks - find app/build/outputs/apk/debug -name "*.apk" -exec cp {} apks/ \; + find app/build/outputs/apk/release -name "*.apk" -exec cp {} apks/ \; - name: Upload Artifacts uses: actions/upload-artifact@v4 From 6cb3194a65aa2cb347d0adb800cc77263cd113a0 Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Sun, 12 Apr 2026 21:35:14 +0800 Subject: [PATCH 7/8] Add fd_helper.c to manage file descriptor flags --- app/src/main/jni/fd_helper.c | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 app/src/main/jni/fd_helper.c diff --git a/app/src/main/jni/fd_helper.c b/app/src/main/jni/fd_helper.c new file mode 100644 index 00000000..331d9104 --- /dev/null +++ b/app/src/main/jni/fd_helper.c @@ -0,0 +1,15 @@ +#include +#include +#include + +#define LOG_TAG "FdHelper" +#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) + +JNIEXPORT void JNICALL +Java_com_simplexray_an_service_TProxyService_clearFdCloexec(JNIEnv *env, jobject thiz, jint fd) { + int flags = fcntl(fd, F_GETFD); + if (flags >= 0) { + fcntl(fd, F_SETFD, flags & ~FD_CLOEXEC); + LOGD("FD %d: cleared FD_CLOEXEC", fd); + } +} From dd7a6d464d16e661f8b489c8ff96369501a9dd4e Mon Sep 17 00:00:00 2001 From: dfliaoyue Date: Sun, 12 Apr 2026 21:36:02 +0800 Subject: [PATCH 8/8] Delete app/src/main/jni/fd_helper.c --- app/src/main/jni/fd_helper.c | 15 --------------- 1 file changed, 15 deletions(-) delete mode 100644 app/src/main/jni/fd_helper.c diff --git a/app/src/main/jni/fd_helper.c b/app/src/main/jni/fd_helper.c deleted file mode 100644 index 331d9104..00000000 --- a/app/src/main/jni/fd_helper.c +++ /dev/null @@ -1,15 +0,0 @@ -#include -#include -#include - -#define LOG_TAG "FdHelper" -#define LOGD(...) __android_log_print(ANDROID_LOG_DEBUG, LOG_TAG, __VA_ARGS__) - -JNIEXPORT void JNICALL -Java_com_simplexray_an_service_TProxyService_clearFdCloexec(JNIEnv *env, jobject thiz, jint fd) { - int flags = fcntl(fd, F_GETFD); - if (flags >= 0) { - fcntl(fd, F_SETFD, flags & ~FD_CLOEXEC); - LOGD("FD %d: cleared FD_CLOEXEC", fd); - } -}