256 lines
11 KiB
Markdown
256 lines
11 KiB
Markdown
# WebToApp 源码深度解析
|
||
|
||
> **仓库**:https://github.com/shiahonb777/web-to-app
|
||
> **Clone 路径**:`source/`(gitignored)
|
||
> **分析日期**:2026-04-13
|
||
> **分析方法**:随机采样 + 关键文件逐行精读 + grep 证据链
|
||
|
||
---
|
||
|
||
## 一、项目元数据
|
||
|
||
| 指标 | 值 |
|
||
|------|-----|
|
||
| 创建时间 | 2025-11-26(5 个月) |
|
||
| 最后推送 | 2026-04-12 |
|
||
| Stars / Forks | 2465 / 353 |
|
||
| 仓库大小 | 19.6 MB(Kotlin 源码 33MB) |
|
||
| 提交数 | **仅 14 次**(典型代码 dump,非社区开发) |
|
||
| 文件数 | 522 个 .kt 文件,约 10 万行 |
|
||
| 技术栈 | Kotlin 1.9 + Jetpack Compose + Room + KSP + Coroutines + Flow |
|
||
| versionCode | 32(v1.9.5)|
|
||
| 模块数 | `core/` 下 43+ 个子模块 |
|
||
|
||
**一句话定位**:这是某个商业产品(`shiaho.sbs` 品牌)的**阉割版开源引流版**,核心代码开源但服务端+激活码+订阅闭源。
|
||
|
||
---
|
||
|
||
## 二、核心发现(按评分排序)
|
||
|
||
### ⭐⭐⭐⭐⭐ 1. APK 构建引擎 —— 真功夫,全项目最高价值
|
||
|
||
**位置**:`app/src/main/java/com/webtoapp/core/apkbuilder/`(480KB 源码)
|
||
|
||
**关键实锤**:
|
||
|
||
1. **自实现 AXML 二进制编辑器** —— `AxmlEditor.kt:26-248`
|
||
- UTF-8 / UTF-16LE 双编码支持
|
||
- 字节对齐替换(修改字符串池必须保持字节长度)
|
||
- 支持清除 `android:testOnly`、权限修复、组件类名恢复
|
||
|
||
2. **自实现 ARSC 资源表编辑器** —— `ArscEditor.kt:32-79`
|
||
- 第 10-128 行有详细注释,说明作者深入理解 APK 字节格式
|
||
- 可修改 `resources.arsc` 中的字符串(如应用名称本地化)
|
||
|
||
3. **集成 Google 官方 apksig 库**
|
||
- `build.gradle.kts:210` → `com.android.tools.build:apksig:8.3.0`
|
||
- `JarSigner.kt:8` 导入 `com.android.apksig.ApkSigner`
|
||
- 支持 v1/v2/v3 签名,SHA-256withRSA 2048bit RSA
|
||
- 支持 Android KeyStore 和 PKCS12 证书切换
|
||
|
||
4. **真·流式 ZIP 写入** —— `ZipUtils.kt:92-122`
|
||
- 10MB+ 文件用 STORED 模式(先算 CRC32 再流式写)避免 OOM
|
||
- `ApkBuilder.kt:1022` 注释写明:Node 二进制 ~40MB 走 streaming write
|
||
|
||
5. **Zip 4 字节对齐** —— `ZipAligner.kt:23-156`
|
||
- 自己实现对齐(Java `ZipOutputStream` 不暴露流位置,官方 API 无法做到)
|
||
|
||
**评价**:**国内罕见的字节级 APK 操作实现**。不是调 `Android Gradle Plugin`,不是调 AAPT,而是完全手搓。这块单拎出来就是一个独立项目的价值。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐ 2. 浏览器引擎抽象 —— 真集成 GeckoView
|
||
|
||
**位置**:`core/engine/`
|
||
|
||
- `BrowserEngine.kt:11-122` 定义统一接口(`loadUrl`、`evaluateJavascript`、`getShields`...)
|
||
- `GeckoViewEngine.kt:30-80` 真·导入 `org.mozilla.geckoview.*`
|
||
- `GeckoRuntime.create(context, settings)` 运行时单例(第 63 行)
|
||
- 反追踪、SafeBrowsing、Cookie 隔离配置(第 52-61 行)
|
||
- **Gecko 原生库不内置**:`build.gradle.kts:137-142` 明确排除 `libxul.so`,由 `GeckoEngineDownloader.kt` 按需下载(减小主 APK 体积)
|
||
- `SystemWebViewEngine.kt` 提供备选路径
|
||
|
||
**评价**:真的把 Firefox 内核塞进了 Android 壳应用,不是字符串常量。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐ 3. 多运行时 —— 真打包真跑
|
||
|
||
| 运行时 | 实现 | 真假 |
|
||
|------|------|------|
|
||
| **Node.js** | `NodeRuntime.kt` + JNI 桥 `NodeBridge.kt` | 真:调用 `node::Start()` 进程内跑,但 `NodeRuntime.kt:18-26` 注释说 libnode.so 是共享库,**单进程只能启动一次**(nodejs-mobile 限制) |
|
||
| **PHP** | `PhpAppRuntime.kt` + ProcessBuilder | 真:`build.gradle.kts:250-284` 有 `downloadPhpBinary` gradle task,从 `pmmp/PHP-Binaries` 下载 PHP 8.4;`PhpAppRuntime.kt:70-72` 优先从 `nativeLibraryDir` 加载(绕 SELinux `execute_no_trans`) |
|
||
| **Python** | `PythonRuntime.kt` + ProcessBuilder | 真:下载 CPython,支持 Flask/Django/FastAPI |
|
||
| **Go** | `GoRuntime.kt` + ProcessBuilder | 轻度:只支持预编译的 Go 程序 |
|
||
| **"Linux"** | `PerformanceOptimizer.kt`(2809 行)| 名不副实:其实是纯 Kotlin 做的图片压缩/JS/CSS minify |
|
||
|
||
**评价**:真打包了二进制,但通过下载策略(而非内置)控制主 APK 体积。设计合理。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐⭐ 4. 商业化模块 —— 阉割版铁证
|
||
|
||
**铁证 1:硬编码云服务端** —— `CloudApiClient.kt:30`
|
||
```kotlin
|
||
const val BASE_URL = "https://api.shiaho.sbs"
|
||
```
|
||
- `/api/v1/activation/redeem`(第 50 行):激活码兑换
|
||
- `/api/v1/activation/preview`(第 80 行):激活码预览
|
||
- 完整的云备份 / 通知 / 分析后端
|
||
|
||
**铁证 2:激活码系统** —— `ActivationManager.kt:20-507`
|
||
- 4 种激活码类型:`PERMANENT` / `TIME_LIMITED` / `USAGE_LIMITED` / `DEVICE_BOUND`
|
||
- 常量时间比较防时序攻击(第 441-448 行)
|
||
- 时限/用途持久化到 DataStore(第 281-305 行)
|
||
|
||
**铁证 3:Google Play 订阅** —— `BillingManager.kt:15-25`
|
||
- 6 个 SKU:`pro_monthly/quarterly/yearly`、`ultra_monthly/quarterly/yearly`
|
||
- 集成 `com.android.billingclient:billing-ktx:7.0.0`
|
||
- 订阅检查:第 300-328 行
|
||
|
||
**评价**:开源的是引流版,真正的商业版有闭源后端。作者的变现逻辑是清晰的。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐ 5. 加密与加固 —— 教科书级
|
||
|
||
**crypto/(15 文件,4459 行)**:
|
||
- `AesCryptoEngine.kt`:AES-GCM + PBKDF2 派生
|
||
- `KeyManager.kt:48-95`:按包名+签名派生,每个 APK 独立密钥
|
||
- `AssetEncryptor.kt` + `SecureAssetLoader.kt`:资源加密加载
|
||
|
||
**disguise/(5 文件,2773 行)** —— 浏览器指纹伪装:
|
||
- `BrowserDisguiseEngine.kt:39-80` 三层架构:
|
||
- Level 1:BrowserKernel(HTTP 头 + 基础 JS)
|
||
- Level 2-5:22 个指纹向量(Canvas / WebGL / Audio / Screen / Timezone...)
|
||
- OAuth 专用层:`OAuthCompatEngine`
|
||
- `BrowserDisguiseJsGenerator.kt`:动态生成伪装 JS
|
||
- 明确针对 Google/Facebook/Microsoft OAuth 反检测
|
||
|
||
**blacktech/(`BlackTechConfig.kt` 203 行)** —— ⚠️ 可疑:
|
||
- "核弹模式""隐身模式""摩斯电码""SOS 求救"
|
||
- `forceMaxPerformance` / `forceBlockPowerKey` / `forceAirplaneMode` 需要系统权限
|
||
- 用户应用层 APK 根本拿不到这些权限 → **可能是设计文档 / PPT 功能**
|
||
|
||
**评价**:加密真功夫,指纹伪装真功夫,"黑科技"模块水分大。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐ 6. Chrome 扩展兼容层 —— 真做到了
|
||
|
||
**extension/(31 文件,22661 行,单模块最大)**
|
||
|
||
- `ChromeExtensionParser.kt:77-243`:真的解析 `manifest.json`
|
||
- 支持 `content_scripts`、`permissions`、`background` 等
|
||
- 生成虚拟 `chrome-extension://` URL scheme
|
||
- `ChromeExtensionPolyfill.kt:1409`:实现 `chrome.runtime.sendMessage()`
|
||
- `DeclarativeNetRequestEngine.kt`:声明式网络请求规则(Manifest V3)
|
||
- `ExtensionFileManager.kt:399-407`:扫描嵌套目录找 manifest.json
|
||
|
||
**评价**:可以原生运行简单 Chrome 扩展。国内少见的完整实现。
|
||
|
||
---
|
||
|
||
### ⭐⭐⭐⭐ 7. AI 模块 —— 多家 LLM 适配
|
||
|
||
**ai/(14 文件,10850 行)**
|
||
|
||
- `AiApiClient.kt:30` 支持 Claude / Gemini / OpenAI / OpenRouter
|
||
- Anthropic header:`anthropic-version: 2023-06-01`
|
||
- 资源文件 `litellm_model_prices.json`(39KB)包含 100+ 模型即时价格
|
||
- **无硬编码 API Key**(grep 未命中 sk-/claude-/AIza)—— 用户自带凭证,设计正确
|
||
|
||
**评价**:不是噱头,真做了多提供商抽象。价格表的存在说明考虑了成本优化。
|
||
|
||
---
|
||
|
||
## 三、体积与依赖
|
||
|
||
```
|
||
core/ 模块体积 Top:
|
||
i18n/ 1.4M ← 翻译资源(可能机器生成,体积 20%+ 水分)
|
||
extension/ 916K ← Chrome 扩展系统
|
||
apkbuilder/ 480K ← ★ APK 构建
|
||
webview/ 480K
|
||
ai/ 468K
|
||
cloud/ 328K
|
||
crypto/ 172K
|
||
linux/ 108K
|
||
|
||
assets/:
|
||
litellm_model_prices.json (39KB)
|
||
php_router_server.php (24KB)
|
||
sample_projects/ (40+ 示例)
|
||
|
||
jniLibs/: libxul.so 被排除,运行时下载
|
||
```
|
||
|
||
**APK 体积控制策略**:所有大二进制(GeckoView/Node/PHP/Python/Go)均通过 gradle task 下载 + 运行时下载,不直接打包。
|
||
|
||
---
|
||
|
||
## 四、技术评分矩阵
|
||
|
||
| 模块 | 评分 | 类型 | 备注 |
|
||
|------|------|------|------|
|
||
| APK 构建引擎 | 9/10 | 真功夫 | **全项目最高价值**,字节级 APK 操作 |
|
||
| 加密体系 | 8/10 | 真功夫 | PBKDF2+AES-GCM,按包名派生 |
|
||
| 浏览器引擎 | 8/10 | 真集成 | GeckoView 真接入 |
|
||
| Chrome 扩展 | 8/10 | 真功夫 | 完整 Polyfill |
|
||
| AI 多模型 | 7/10 | 真功夫 | 无硬编码 Key |
|
||
| 运行时集成 | 7/10 | 真集成 | 下载而非内置策略 |
|
||
| 指纹伪装 | 7/10 | 部分真 | Canvas/WebGL/Audio 真做 |
|
||
| 激活/订阅 | 6/10 | 调包 | 商业化模板 |
|
||
| "黑科技" BlackTech | 3/10 | 空壳 | 系统权限拿不到 |
|
||
|
||
---
|
||
|
||
## 五、用处与立项判断
|
||
|
||
### 能用来干什么
|
||
|
||
1. **给自己的网站套 Android 壳并上架** —— 能做,但要小心商业版激活码锁
|
||
2. **学习 APK 字节格式 / 打包原理** —— ⭐强烈推荐,`apkbuilder/` 就是教材
|
||
3. **学习 Android 加密最佳实践** —— ⭐推荐,`crypto/` 很扎实
|
||
4. **学习 Android 里跑多语言运行时** —— PHP/Node/Python 的集成套路可抄
|
||
5. **Chrome 扩展移动化** —— 稀缺参考
|
||
6. **做商业 SaaS 应用** —— ❌ 不推荐,别用别人的引流版
|
||
|
||
### 适合的人
|
||
|
||
- ✅ Android 开发者想学 APK 底层
|
||
- ✅ Web 开发者想给自己站点套壳自用
|
||
- ✅ 研究 Android 加密 / 反爬 / 扩展系统的人
|
||
- ❌ 追求严肃商业落地的团队(用 Capacitor / Tauri Mobile)
|
||
- ❌ 想要社区生态的(单人项目 + 商业背景,风险大)
|
||
|
||
### 抄代码优先级
|
||
|
||
1. **`core/apkbuilder/` 整块** —— 字节级 APK 操作,无替代品
|
||
2. **`core/crypto/KeyManager.kt`** —— 按包名派生密钥的设计
|
||
3. **`core/engine/BrowserEngine.kt` + `GeckoViewEngine.kt`** —— GeckoView 集成套路
|
||
4. **`core/extension/ChromeExtensionParser.kt`** —— manifest.json 解析
|
||
5. **`core/ai/AiApiClient.kt`** —— 多 LLM 适配
|
||
|
||
---
|
||
|
||
## 六、关键风险提示
|
||
|
||
1. **商业背景**:`https://api.shiaho.sbs` 硬编码,上游可能随时改协议
|
||
2. **代码 dump 风格**:14 次提交 = 社区贡献几乎不可能,作者跑路就死
|
||
3. **i18n 1.4MB 水分**:翻译疑似机器生成,不是真本地化投入
|
||
4. **BlackTech 模块噱头**:核弹模式等系统级功能权限拿不到
|
||
5. **GeckoView 按需下载**:首次启动有网络依赖,离线场景会报错
|
||
|
||
---
|
||
|
||
## 七、最终定论
|
||
|
||
**"是不是噱头"**:不是。APK 构建引擎这一块是真家伙,单独拎出来都够发一篇技术文章。
|
||
|
||
**"是不是纯开源神器"**:不是。是商业产品的引流版。
|
||
|
||
**"值不值得看"**:**非常值得**。作为 Android 底层学习材料,是近年来质量最高的开源项目之一。
|
||
|
||
**"该不该用在自己项目里"**:抄技术细节,别抄整个方案。尤其不要依赖 `https://api.shiaho.sbs` 和激活码系统。
|