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
导入使用 - [x] 调试功能组件
- 存放各种自定义的
module-main
模块- 启动页、闪屏页、主界面布局
module-login
模块- 登录、注册界面及功能
- [x] 提供、存储用户信息
module-user
模块- 用户个人界面
- [x] 展示信息
- [ ] 编辑信息
module-wanandroid
模块- 使用 wanandroid 提供的 API,开发的一款简略版客户端
- [x] 部分功能点
- [x] 跳转 web
- [x] 内容搜索
module-video
模块- 模仿抖音列表及部分基础功能
- [x] 播放列表
- [ ] 详情页
- [ ] 评论功能
module-joke
模块- 模块皮皮虾的视频、图文界面及部分基础功能
- [x] 多状态列表
- [ ] 详情页
- [ ] 评论功能
module-music
模块- 音乐播放基础功能
- [x] 本地音乐列表、
- [ ] 网络音乐列表,**无合适 API
- [x] 通知栏控制
module-novel
模块- 小说基础功能
- [x] 列表页
- [x] 小说阅读页、翻页效果、缓存
- [x] 书架页
module-caht
模块- 接入
环信 SDk
在其基础上开发 - [ ] 聊天室
- [ ] 群聊
- 接入
module-news
模块- 新闻资讯基础功能
- [ ] 列表
- [ ] 详情
module-mall
模块- 商城基础功能
- [ ] 商品列表
- [ ] 商品详情
- [ ] 购物车
- [ ] 支付流程
- [ ] 订单状态
module-live
模块- 直播基础功能
- [ ] 直播列表
- [ ] 直播室,推拉流
- [ ] 聊天室
- [ ] 礼物效果
module-server
模块- 使用 AndServer 提供
SpringMVC
方式输出 RESTFUL 风格的 Api - 使用
Room
数据库将数据存储本地,文件存储到外部存储上的缓存目录下 - [x] 登录模块(手机登录、游客登录、获取验证码)
- [x] 用户模块(查询用户信息、退出登录)
- [x] 文件模块(上传单文件、查询文件目录下的文件、查询文件地址)
- 使用 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` 详细请阅读代码即可,无需经常改动
### 工具 [最新版本](https://github.com/y1xian/What/releases) [![](https://jitpack.io/v/y1xian/What.svg)](https://jitpack.io/#y1xian/What)
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
总结
个人经验的积累,项目也会不断的完善(在做了在做了