What
该框架基于 Jetpack + Arouter + Retrofit + MVVM 等实现的一款开源学习项目,该框架存在的意义一方面是为了能实现快速开发、协同开发、实现可复用等,另一方面是想把自己会的、有趣的、可复用的东西写出来,分 Java、Kotlin 版本
流程图 - 项目业务开发方向( 2021-3-17 更新了个寂寞 )
组件化流程图 - 大概
下载地址,Java 版,或扫码下载 【不一定记得更新,还是得自己拉代码跑】
项目说明
- 主要使用了 JitPack 、 ARouter 、RxJava2 、Retrofit2 等主流框架,MVVM 模式
- 主工程运行、业务模块独立运行
- 各模块相互跳转、通信等
- 功能(Package By Feature)、业务(Package By Layer)分离解耦
- SpringMVC 模式开发接口
框架&工具
工欲善其事,必先利其器 skr
jetpack包下封装了JetPack功能- 底层框架
lib-arch:集成JetPack,解决单继承问题,只需实现IActivity、IFragment和 部分注解@BindRes、@BindViewModel等 - 数据库 Room
lib-room:集成Room简单封装了个泛型 BaseDao,少实现增删改 - 分页库 Paging
lib-paging:集成Paging分页库功能
- 底层框架
utils包下 存放无业务逻辑相关的常用工具 轻量级的- Android & Java 的工具库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率
- 适配器
lib-adapter:封装 普通 andPaging两种适配器,实现头尾、增删查改、多状态布局等 - Okhttp3
util-okhttp:集成Okhttp3,简单的抽象封装,实现网络请求 - 网络请求
lib-network:- java:
Retrofit2+LiveData+Okhttp3 - kotlin:
Retrofit2+Okhttp3+Coroutine
- java:
- ...
widgets包下 存放与业务逻辑相关的组件工具- 对话框
- 悬浮框
- 换肤
- 下载
- ...
自行查看
libs目录,工具包都在其包下。具体实现方法可在module-widget模块下查看 (不完全)
开发环境:Android Studio 4.1.1 、gradle 6.6 、kotlin 1.4.30 、JDK 1.8 、SdkVersion support 28 - AndroidX 30
主干为 Java + AndroidX ( 得跟上 jio 步
Java + support 版本的看 java-support 分支;
最新 AndroidX + Kotlin 版本的看 What-Kotlin ,【 kotlin 版本会比 java 版本更新慢,重心还在 java 版本上(kotlin 也就图一乐,吃饭还是得靠 java 】;
模块功能
(PS:各模块还处于打磨中,一堆 bug,辣眼勿怪. 功能点只列举个别,包含但不限于)
app主模块- 只用于打包、配置
gradle个别信息
- 只用于打包、配置
module-widget模块(该模块只引用了common-base,区别于其他模块)- 存放各种自定义的
lib-包 (于widgets包下),方便发布JitPack导入使用 - 调试功能组件
- 存放各种自定义的
module-main模块- 启动页、闪屏页、主界面布局
module-login模块- 登录、注册界面及功能
- 提供、存储用户信息
module-user模块- 用户个人界面
- 展示信息
- 编辑信息
module-wanandroid模块- 使用 wanandroid 提供的 API,开发的一款简略版客户端
- 部分功能点
- 跳转 web
- 内容搜索
module-video模块- 模仿抖音列表及部分基础功能
- 播放列表
- 详情页
- 评论功能
module-joke模块- 模块皮皮虾的视频、图文界面及部分基础功能
- 多状态列表
- 详情页
- 评论功能
module-music模块- 音乐播放基础功能
- 本地音乐列表、
- 网络音乐列表,**无合适 API
- 通知栏控制
module-novel模块- 小说基础功能
- 列表页
- 小说阅读页、翻页效果、缓存
- 书架页
module-caht模块- 接入
环信 SDk在其基础上开发 - 聊天室
- 群聊
- 接入
module-news模块- 新闻资讯基础功能
- 列表
- 详情
module-mall模块- 商城基础功能
- 商品列表
- 商品详情
- 购物车
- 支付流程
- 订单状态
module-live模块- 直播基础功能
- 直播列表
- 直播室,推拉流
- 聊天室
- 礼物效果
module-server模块- 使用 AndServer 提供
SpringMVC方式输出 RESTFUL 风格的 Api - 使用
Room数据库将数据存储本地,文件存储到外部存储上的缓存目录下 - 登录模块(手机登录、游客登录、获取验证码)
- 用户模块(查询用户信息、退出登录)
- 文件模块(上传单文件、查询文件目录下的文件、查询文件地址)
- 使用 AndServer 提供
组件化单项目运行
- 在
local.properties下添加,模块名=true
module-main=true
module-login=true
module-user=true
module-video=true
module-music=true
module-novel=true
module-chat=true
module-joke=true
module-wanandroid=true
module-news=true
module-mall=true
module-live=true
module-widget=true
...
之后 build 一下
- 如在单项目需要引用到其他项目(如用户模块需要登录),则
dependencies {
if (runAsApp) {
//模块化下需要引用到的模块
addComponent 'module-login'
...
}
}
用户模块完整例子:
apply from: rootProject.file('module.gradle')
android {
defaultConfig {
//仅在以 application 方式编译时才添加 applicationId 属性
if (runAsApp) {
applicationId build_version.applicationId + '.module_user'
}
}
//统一规范资源名称前缀,防止多个 module 之间资源冲突
resourcePrefix "user_"
}
dependencies {
if (runAsApp) {
//模块化下需要引用到的模块
addComponent 'module-login'
addComponent 'module-chat'
}
}
module.gradle 详细请阅读代码即可,无需经常改动
工具 最新版本 
allprojects {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
}
}
//要求项目使用 Java 8
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
dependencies {
// 基于 jetpack 框架,实现快速开发、协同开发、实现可复用等
implementation 'com.github.y1xian.What:lib-arch:+'
// 适配器,封装 paging 头尾部、增删查改
implementation 'com.github.y1xian.What:lib-adapter:+'
···
// 更多组件在 widget 下查看
// 更多常用工具在 utils 下查看
}
其它说明
Gradle 配置
-
module.gradle为业务模块配置的,每个业务模块都需配置 -
lib-util.gradle为工具类配置 -
simple.gradle为简单配置
换肤
- 新建模块,只需
res包且对应资源名即可,可更换颜色,图片,shape。 - 本项目中已实现
skin-night夜间模式的皮肤,只需编译该模块,把生成的night.apk放进module-user用户模块即可,路径为assets/skins/night.apk
总结
个人经验的积累,项目也会不断的完善(在做了在做了
