Appteka 客户端技术栈:Kotlin + MVP + Clean Architecture
为什么要了解 Appteka 的技术栈
Appteka 是开源的(GPL v3),任何人可以 fork 主仓库做二次开发。社区已经出现了多个 fork(Material You 主题版、IzzyOnDroid 镜像构建)。如果你想基于 Appteka 做自己的应用市场、或者研究 Android 应用市场客户端的实现方式——了解它的技术栈就是第一步。
完整技术栈表
官方主仓库 README 里明确列出:
| 类别 | 技术选型 |
|---|---|
| 语言 | Kotlin |
| UI | Material Design 3 + AndroidX |
| 架构 | MVP(Model-View-Presenter)+ Clean Architecture |
| 依赖注入 | Dagger 2 |
| 响应式编程 | RxJava 3 + RxKotlin + RxRelay |
| 网络 | Retrofit 3 + OkHttp 5 |
| 图片加载 | Simple Image Loader |
| 列表渲染 | Konveyor(自定义 RecyclerView 管理器) |
| 构建 | Gradle + ProGuard |
架构:MVP + Clean Architecture
Appteka 遵循的是 Clean Architecture 原则,用 MVP 作为表现层模式。README 里的描述:
Activity/Fragment → 路由 + 导航接口
Presenter → 表现层,框架无关,易于测试
View → 纯 UI 渲染,不含业务逻辑
Interactor → 业务逻辑 + Repository 模式 + 数据缓存
Converter → 数据层之间的 DTO 映射
ResourceProvider → Android 资源访问(框架无关层用)
为什么 Clean Architecture 重要:它把业务逻辑和 Android 框架解耦,Presenter 和 Interactor 层可以在 JVM 上独立跑单元测试,不需要 Android 设备。这对一个长期维护的开源项目来说很关键——Appteka 从 2016 年发起,已经 10 年了,技术债务能控制在合理范围里和这套架构直接相关。
依赖选型的取舍
- Dagger 2 而不是 Hilt——Appteka 发起时 Hilt 还没出来,Dagger 2 是当时最成熟的依赖注入方案;
- RxJava 3 而不是 Flow——同理,项目开始时 Kotlin Coroutines 还没稳定;
- Simple Image Loader 而不是 Glide/Coil——Simple Image Loader 是一个轻量级库,Appteka 需要加载大量应用图标但不追求极致性能;
- Konveyor 代替原生 RecyclerView 管理器——Appteka 的列表有分类分组、瀑布流、多类型 item 等复杂布局需求。
怎么构建
主仓库 README 里列出的构建要求:
- Android Studio Ladybug 或更新版本;
- JDK 17;
- Android SDK with API 37。
标准构建命令:
git clone https://github.com/solkin/appteka-android.git
cd appteka-android
./gradlew assembleDebug
# APK 输出到 app/build/outputs/apk/
Release 构建需要签名配置——主仓库示例里没有把签名文件提交到 git,你需要自己配 keystore.properties。
如果我想 fork Appteka
GPL v3 许可证要求你开源所有改动——fork 之后无论改多少、无论闭不闭源,都必须把源码公开。这也是社区分支(比如 Material You 主题版)都公开仓库地址的原因。
下一页
**9 种语言本地化**——Appteka 支持哪些语言、为什么中文排在前面。