【免费下载链接】fqapp
内容聚合 Android 客户端:小说/短剧/漫剧/听书/漫画,Flutter UI + 进程内 Rust 核心,无自建服务器、无需 root
本文是一份面向新手开发者的 fqapp(什锦铺)源码构建完整指南。fqapp 是一个小说/短剧/漫剧/听书/漫画内容聚合 Android 客户端,采用 Flutter UI + 进程内 Rust 核心的混合架构,无需自建服务器、无需 root。文章将带你走通从环境准备、Rust 核心 NDK 交叉编译,到最终 APK 打包、真机验证的全过程。
一、动手之前:先看懂这个混合架构
在敲第一条构建命令前,花两分钟理解项目结构,能帮你少走很多弯路:
| 目录 | 作用 |
|---|---|
| lib/ | Flutter UI、数据模型与本地状态 |
| rust/ | Rust 原生核心fqapi_core源码(签名、解密、设备池、分发器) |
| native/ | 自行实现的 CENC MP4 流式解密 C 库,Gradle 构建时由 CMake 自动编译 |
| scripts/ | 构建、验证与资源生成脚本 |
| android/ | Android 工程与 JVM 测试 |
构建链路只有三件事:Rust 源码 →libfqapi_core.so(NDK 交叉编译)、C 源码 →libshortplay_crypto.so(CMake 自动生成)、两者打进 APK。架构与部署细节可查阅官方开发者文档 DEVELOPMENT.md。
📦 注意:仓库不含任何预编译二进制,两个
.so都必须由你自己构建生成——这正是本教程的重点。
二、构建环境准备:工具链版本清单
fqapp 对工具链版本有严格固定的要求,版本表如下:
| 工具 | 版本 | 用途 |
|---|---|---|
| Flutter | 3.44.6 (stable) | 构建 App |
| Dart SDK | 3.12+ | 随 Flutter 自带 |
| Rust | stable | 编译原生核心fqapi_core |
| flutter_rust_bridge | 2.13.0 | 生成 Flutter/Rust 绑定 |
| Android SDK | 36 + Build-Tools | 编译 APK |
| JDK | 17 | Android Gradle 构建 |
| Android NDK | 28.2.13676358 | 交叉编译 Rust 核心与 C 解密库 |
| CMake | 3.22.1 | Android 构建自动编译 C 库 |
用 SDK Manager 安装缺失组件:
sdkmanager "platforms;android-36" sdkmanager "ndk;28.2.13676358" sdkmanager "cmake;3.22.1"⚠️NDK 版本必须精确匹配28.2.13676358。构建脚本会硬性校验版本号,指向其它 NDK 会直接报错退出,不会静默回退到"最新安装的 NDK"——这是刻意设计,防止工具链悄悄改变导致构建结果不可复现。
三、克隆仓库与获取依赖
git clone https://gitcode.com/gh_mirrors/fq/fqapp cd fqapp flutter pub get --enforce-lockfile--enforce-lockfile会强制使用 pubspec.lock 中锁定的依赖版本,保证多人构建结果一致。
四、NDK 交叉编译 Rust 核心:一条命令生成 libfqapi_core.so
这是整个构建里最关键的一步。项目提供了单一入口脚本:
- Linux / macOS:scripts/build_rust_backend.sh
- Windows PowerShell:scripts/build_rust_backend.ps1
./scripts/build_rust_backend.sh脚本内部自动完成四件事:
- 生成绑定:运行
flutter_rust_bridge_codegen generate,按 flutter_rust_bridge.yaml 的配置生成 Dart/Rust 双向 FFI 绑定(输入rust/src/api,输出lib/src/rust/); - 交叉编译:用 NDK 自带的 clang 工具链编译
aarch64-linux-android(arm64-v8a)与armv7-linux-androideabi(armeabi-v7a)两个目标; - 自动归位:把
libfqapi_core.so复制到android/app/src/main/jniLibs/<abi>/,供 Gradle 直接打包; - 打印 SHA-256:方便你核对产物。
常用开关(绑定已是最新时可加速):
./scripts/build_rust_backend.sh --skip-codegen # 跳过绑定生成 ./scripts/build_rust_backend.sh --profile debug # 调试配置 ./scripts/build_rust_backend.sh --host-lib # 额外构建桌面 cdylibCargo 按目标缓存编译结果,没有改动 Rust 源码时重建会很快。
C 解密库:不需要你手动编译
native/下的 CENC 流式解密库由 Gradle 的externalNativeBuild通过 native/CMakeLists.txt 在 APK 构建阶段自动编译并打包,同样显式设置了 16 KiB ELF 页对齐参数,无需任何额外操作。
五、构建 APK:debug 与 release 两种姿势
# 当前 Rust 核心主要面向 arm64 设备,显式指定目标 ABI flutter build apk --debug --target-platform android-arm64 flutter build apk --release --target-platform android-arm64生成结果位于build/app/outputs/flutter-apk/app-debug.apk(或app-release.apk)。
🛑release 构建不要加
--no-pub:integration_test在dev_dependencies里,flutter test会把它写进插件注册表,跳过 pub 步骤后 Gradle 会报package dev.flutter.plugins.integration_test does not exist。
六、安装到真机并验证
# 真机开启 USB 调试连接后 adb install -r build/app/outputs/flutter-apk/app-debug.apk adb shell am start -n com.fqapp.fqapp/.MainActivity首次启动流程:App 将 config.json、过滤器等资源部署到应用私有目录,通过 flutter_rust_bridge 在进程内初始化 Rust 核心,轮询/health健康检查通过后进入主界面。
几个实用调试命令:
# 查看后端日志 adb shell run-as com.fqapp.fqapp cat files/backend/backend.log # loopback 端口转发(核心默认监听 127.0.0.1:18921) adb forward tcp:18080 tcp:18921 curl http://127.0.0.1:18080/health # Flutter 日志 adb logcat -s flutter如果内容解密乱码,一般是设备池过期,删除files/backend/config/device_pool.json后重启 App 即可自动重注册。
七、构建后验证:测试与 16 KiB 对齐检查
# 按模块秒级跑测试(子串匹配测试文件名) ./scripts/test_quick.sh home ./scripts/test_quick.sh --all # 交付前收尾全量 # Rust 核心测试 cargo test --manifest-path rust/Cargo.toml --locked # 检查 .so 的 ELF 16 KiB 对齐 node scripts/check_native_alignment.cjs android/app/src/main/jniLibs/arm64-v8a/libfqapi_core.soscripts/test_quick.sh 支持按模块名快速迭代,拼错的模块词会直接报错,不会静默少跑。
八、常见构建错误速查表
| 问题 | 解决方案 |
|---|---|
| 找不到 NDK 28.2.13676358 | sdkmanager "ndk;28.2.13676358",或设置ANDROID_NDK_HOME指向它 |
Unable to locate Android SDK | flutter config --android-sdk <路径> |
Flutter requires Android SDK 36 | sdkmanager "platforms;android-36" |
Could not close incremental caches | 项目已在gradle.properties关闭 Kotlin 增量编译,无需处理 |
偶发The settings are not yet available for build | Gradle 9.1.0 偶发 bug,重跑即可恢复 |
| maven.google.com 超时 | 仓库已配置阿里云镜像(见 android/settings.gradle.kts) |
九、不想本地配环境?看看 CI 云端编译
.github/workflows/android-apk.yml 固定了与上文一致的 Flutter 3.44.6、Rust 工具链、flutter_rust_bridge 2.13.0、JDK 17、NDK 28.2.13676358 和 CMake 3.22.1。推送代码或手动触发 Run workflow 后,可在运行记录的Artifacts中下载app-release.apk(含 SHA-256 与签名报告,保留 14 天)。CI 每次都会完整跑 Rust 测试、Flutter 静态分析、全量单元/组件测试并验证最终 APK。
总结
fqapp 源码构建的核心路径可以浓缩为一句话:
flutter pub get→scripts/build_rust_backend.*交叉编译 Rust 核心 →flutter build apk --target-platform android-arm64→ 真机验证。
C 解密库由 CMake 自动接管,CI 帮你兜底验证,整条链路没有自建服务器、不需要 root,也无需任何私有检出。祝你构建顺利,构建产物跑起来的那一刻,就是理解这个项目架构最好的方式。
【免费下载链接】fqapp
内容聚合 Android 客户端:小说/短剧/漫剧/听书/漫画,Flutter UI + 进程内 Rust 核心,无自建服务器、无需 root
相关推荐
MAS 一键激活:3 步完成 Windows 11 与 Office 永久激活
MAS 一键激活:3 步完成 Windows 11 与 Office 永久激活 MAS(Microsoft Activation Scripts)是一款完全开源
运维Android上的CMake构建:ndk-samples如何配置NDK编译?初学者完整教程
Android上的CMake构建:ndk samples如何配置NDK编译?初学者完整教程 在 Android 上用 C/C++ 开发,绕不开 Android
示例工程移动开发Voltius源码构建实战:开发者必备的安装、开发与Docker交叉编译完整教程
Voltius源码构建实战:开发者必备的安装、开发与Docker交叉编译完整教程 Voltius 是一款基于 Rust + Tauri 构建的本地优先(Loca
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考