What

Project Url: y1xian/What
Introduction: 组件化项目
More: Author   ReportBugs   
Tags:

该框架基于 Jetpack + Arouter + Retrofit + MVVM 等实现的一款开源学习项目,该框架存在的意义一方面是为了能实现快速开发、协同开发、实现可复用等,另一方面是想把自己会的、有趣的、可复用的东西写出来,分 Java、Kotlin 版本

下载地址,Java 版,或扫码下载 【不一定记得更新,还是得自己拉代码跑】

image

项目说明

  • 主要使用了 JitPack 、 ARouter 、RxJava2 、Retrofit2 等主流框架,MVVM 模式
  • 主工程运行、业务模块独立运行
  • 各模块相互跳转、通信等
  • 功能(Package By Feature)、业务(Package By Layer)分离解耦
  • SpringMVC 模式开发接口

框架&工具

工欲善其事,必先利其器 skr

  • jetpack 包下封装了 JetPack 功能

    • 底层框架 lib-arch :集成 JetPack ,解决单继承问题,只需实现 IActivityIFragment 和 部分注解 @BindRes@BindViewModel
    • 数据库 Room lib-room:集成 Room 简单封装了个泛型 BaseDao,少实现增删改
    • 分页库 Paging lib-paging:集成 Paging 分页库功能
  • utils 包下 存放无业务逻辑相关的常用工具 轻量级的

    • Android & Java 的工具库,通过静态方法封装,降低相关 API 的学习成本,提高工作效率
    • 适配器 lib-adapter:封装 普通 and Paging 两种适配器,实现头尾、增删查改、多状态布局等
    • Okhttp3 util-okhttp:集成 Okhttp3,简单的抽象封装,实现网络请求
    • 网络请求 lib-network
      • java: Retrofit2 + LiveData + Okhttp3
      • kotlin:Retrofit2 + Okhttp3 + Coroutine
    • ...
  • 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] 文件模块(上传单文件、查询文件目录下的文件、查询文件地址)

组件化单项目运行

  1. 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 一下

  1. 如在单项目需要引用到其他项目(如用户模块需要登录),则 ``` 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

总结

个人经验的积累,项目也会不断的完善(在做了在做了

看了、学了不一定变强,但不看可以帮你省下不少时间

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools