WebToApp 源码解析: apkbuilder 字节级分析 + docs 站

This commit is contained in:
kang
2026-04-13 16:45:55 +08:00
commit a51810982a
5 changed files with 776 additions and 0 deletions

255
.memory/source-analysis.md Normal file
View File

@@ -0,0 +1,255 @@
# WebToApp 源码深度解析
> **仓库**https://github.com/shiahonb777/web-to-app
> **Clone 路径**`source/`gitignored
> **分析日期**2026-04-13
> **分析方法**:随机采样 + 关键文件逐行精读 + grep 证据链
---
## 一、项目元数据
| 指标 | 值 |
|------|-----|
| 创建时间 | 2025-11-265 个月) |
| 最后推送 | 2026-04-12 |
| Stars / Forks | 2465 / 353 |
| 仓库大小 | 19.6 MBKotlin 源码 33MB |
| 提交数 | **仅 14 次**(典型代码 dump非社区开发 |
| 文件数 | 522 个 .kt 文件,约 10 万行 |
| 技术栈 | Kotlin 1.9 + Jetpack Compose + Room + KSP + Coroutines + Flow |
| versionCode | 32v1.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 行)
**铁证 3Google 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 1BrowserKernelHTTP 头 + 基础 JS
- Level 2-522 个指纹向量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` 和激活码系统。