Files
webtoapp-docs/.memory/source-analysis.md

256 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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` 和激活码系统。