# APK 源码 · 编译环境说明（2026-10-25）

> 这份是「星爱野 / 三角洲雷达」安卓客户端的**完整源码**，不含任何构建产物。
> 编译环境已在本机验证通过，下面写的是**照抄就能编**的步骤。

---

## 一、必须安装 / 准备的运行环境

### 1. 操作系统

```
Windows 10 / 11 x64（本工程在 Windows 下验证；Linux 需自行改 CMake 的 make.exe 参数）
```

### 2. JDK 17（必须 17，不能用 21/8）

```
版本：Temurin 17.0.20.1+1（OpenJDK 17.0.20.1）
本机路径：D:\03\30\jdk
下载：https://adoptium.net/temurin/releases/?version=17
```

> **重要**：`D:\03\30\jdk\bin` 里额外带了三个 DLL ——
> `msvcp140.dll` / `vcruntime140.dll` / `vcruntime140_1.dll`。
> Android SDK 自带的 `cmake.exe` 依赖它们，缺了会以 `0xC0000135` 秒退（看起来像 cmake 坏了）。
> **所以编译前必须把 `jdk\bin` 放进 PATH。**

### 3. Gradle 8.14

```
本机路径：D:\03\30\gradle
版本：gradle-launcher-8.14.jar（即 Gradle 8.14）
下载：https://services.gradle.org/distributions/gradle-8.14-bin.zip
```

### 4. Android SDK

```
本机路径：D:\03\30\android-sdk
必须包含：
  platforms\android-35            （compileSdk 35 / targetSdk 35）
  build-tools\34.0.0  或 35.0.0
  platform-tools
  cmake\3.22.1                    （SDK 自带那份，被 build.gradle 直接引用）
  ndk\27.0.12077973               （ndkVersion 写死这个版本）
下载：https://developer.android.com/studio  → SDK Manager 勾选上面这些
```

### 5. 网络（首次编译要下依赖）

```
Maven 仓库：google() / mavenCentral() / gradlePluginPortal() / 阿里云镜像（settings.gradle 已配）
依赖：androidx + compose + kotlinx-coroutines-android:1.8.1
```

---

## 二、环境变量（每次开新终端都要设）

```powershell
$env:JAVA_HOME = 'D:\03\30\jdk'
$env:Path      = 'D:\03\30\jdk\bin;D:\03\30\gradle\bin;' + $env:Path
$env:GRADLE_USER_HOME = 'C:\Users\<你的用户名>\.gradle'
```

`local.properties`（工程根目录）里写 SDK 路径：

```properties
sdk.dir=D:/03/30/android-sdk
```

---

## 三、编译命令

```powershell
cd <解压目录>\radar-app

# 正式包（用 debug 签名，可直接安装；要上架请换成自己的 keystore）
D:\03\30\gradle\bin\gradle.bat :app:assembleRelease --no-daemon

# 调试包
D:\03\30\gradle\bin\gradle.bat :app:assembleDebug --no-daemon
```

产物位置：

```
app\build\outputs\apk\release\app-release.apk
app\build\outputs\apk\debug\app-debug.apk
```

---

## 四、工程关键配置（源码里已写死，别乱改）

| 项 | 值 | 位置 |
|---|---|---|
| AGP | 8.7.3 | `build.gradle` |
| Kotlin | 2.0.21（含 compose 插件） | `build.gradle` |
| compileSdk / targetSdk | 35 | `app/build.gradle` |
| minSdk | 24 | 同上 |
| ndkVersion | 27.0.12077973 | 同上 |
| ABI | arm64-v8a / armeabi-v7a / x86 / x86_64 | 同上 |
| Java / Kotlin target | 17 | 同上 |
| CMake 的 make.exe | `D:/03/30/android-sdk/ndk/27.0.12077973/prebuilt/windows-x86_64/bin/make.exe` | `app/build.gradle` 的 cmake arguments |
| 签名 | release 用 debug keystore（可直接安装） | `app/build.gradle` |
| versionCode / versionName | 1 / 1.0.0（**刻意不动**，参与面板"检查更新"比较） | 同上 |

> `app/build.gradle` 里那句 `-DCMAKE_MAKE_PROGRAM=...make.exe` 是**为了绕开 ninja 挂死**：
> 本机 ninja 进程 0% CPU 永久卡在 try_compile。换机器如果路径不同，改这一行即可。

---

## 五、已做的业务改动（接手人必看）

隧道内核是开源项目 **hev-socks5-tunnel**（`app/src/main/cpp/vendor/hev-socks5-tunnel/`），
下面三处已改过，**不要还原**：

| 文件 | 改动 | 作用 |
|---|---|---|
| `vendor/hev-socks5-tunnel/src/core/src/hev-socks5-misc.c` | `static int udp_timeout = 3600000;` | UDP 关联不再 60 秒被拆 |
| `vendor/hev-socks5-tunnel/src/core/src/hev-config.c` | tcp/udp 默认 3600000 | 同上 |
| `app/src/main/java/com/xay/radar/core/Tunnel.kt` | yaml 里 `tcp-read-write-timeout` / `udp-read-write-timeout` = 3600000 | 隧道 5 分钟自杀问题（**这条最要命**：5 分钟全灭会让雷达空白、游戏弹重连） |

> 历史：另一人用 smali 打过 `1-debug.apk` / `1-debug2.apk`（把 300000 改成 3600000、log-level 改 debug），
> **那些改动的源码版本就是这里**，直接用本工程编 release 即可得到带 1 小时超时的正式包。

---

## 六、常见编译错误（本机都踩过）

| 现象 | 原因 | 解决 |
|---|---|---|
| `cmake.exe` 秒退 / `0xC0000135` | PATH 里没有 jdk\bin（缺 MSVC 运行时 DLL） | 按第二节设 PATH |
| ninja 0% CPU 永久挂住 | 本机 ninja 与该 NDK 组合有问题 | `app/build.gradle` 里已用 `-DCMAKE_MAKE_PROGRAM=...make.exe` 绕开 |
| `Couldn't open current thread, error = 5` | Kotlin 编译 daemon 在受限环境起不来 | `gradle.properties` 已设 `kotlin.compiler.execution.strategy=in-process` |
| 编译成功但 gradle 返回非 0 | 文件监听器初始化失败 | 已设 `org.gradle.vfs.watch=false` |
| 依赖下载卡住 | 网络 | `settings.gradle` 已配阿里云镜像 |

---

## 七、包内目录

```
radar-app\
  app\src\main\java\com\xay\radar\     Kotlin 应用层（24 个源文件）
      Tunnel.kt / TunnelService.kt     隧道生命周期、自动重连
      MainViewModel.kt / MainActivity.kt
      data\Api.kt Config.kt Models.kt SettingsStore.kt NetworkMonitor.kt
      ui\ (Connect / Nodes / Mine / About / Root / Components / theme)
  app\src\main\cpp\                    JNI 桥 + CMake
      radar_tunnel_jni.c
      vendor\hev-socks5-tunnel\        ★ 隧道内核（改过 2 个文件）
      vendor\hev-task-system\  lwip\  yaml\
  app\src\main\res\                    图标/资源
  app\build.gradle  build.gradle  settings.gradle  gradle.properties
  local.properties                     模板（需改成你自己的 SDK 路径）
  PATCHES.md  REPORT*.md  VERIFICATION.md    历次改动与验证记录
  icon_tools\  tools\                  小工具脚本
```

**打包说明**：本包已剔除 `build/`、`.gradle/`、`.cxx/`、`.kotlin/`、`*.apk`、`*.out`，
解压即源码，直接编译即可。
