mdd1991 / MVVMFrame

🏰 MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack){ Lifecycle,LiveData,ViewModel,Room } 构建的快速开发框架。现在应该叫JetPack。有了MVVMFrame的加持,从此构建一个MVVM模式的项目变得快捷简单。

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

MVVMFrame

Image

Download JCenter JitPack CI CircleCI API License Blog QQGroup

MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack){ Lifecycle,LiveData,ViewModel,Room } 构建的快速开发框架。有了 MVVMFrame 的加持,从此构建一个 MVVM 模式的项目变得快捷简单。

架构

Image

Android version

引入

Maven:

<dependency>
  <groupId>com.king.frame</groupId>
  <artifactId>mvvmframe</artifactId>
  <version>1.1.3</version>
  <type>pom</type>
</dependency>

Gradle:

//AndroidX 版本
implementation 'com.king.frame:mvvmframe:1.1.3'

//Android 版本
implementation 'com.king.frame:mvvmframe:1.0.2'

Lvy:

<dependency org='com.king.frame' name='mvvmframe' rev='1.1.3'>
  <artifact name='$AID' ext='pom'></artifact>
</dependency>

DaggerRoom 的注解处理器

你需要引入下面的列出的编译时的注解处理器,用于自动生成相关代码。其它对应版本具体详情可查看 Versions

    //AndroidX ------------------ MVVMFrame v1.1.3
    //dagger
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.27'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.27'
    //room
    annotationProcessor 'androidx.room:room-compiler:2.2.5'
    // Android ------------------ MVVMFrame v1.0.2
    //dagger
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.19'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.19'
    //room
    annotationProcessor 'android.arch.persistence.room:compiler:1.1.1'

MVVMFrame引入的库(具体对应版本请查看 Versions

    //appcompat
    compileOnly deps.appcompat

    //retrofit
    api deps.retrofit.retrofit
    api deps.retrofit.gson
    api deps.retrofit.converter_gson

    //lifecycle
    api deps.lifecycle.runtime
    api deps.lifecycle.extensions
    annotationProcessor deps.lifecycle.compiler

    //room
    api deps.room.runtime
    annotationProcessor deps.room.compiler

    //dagger
    api deps.dagger.dagger
    api deps.dagger.android
    api deps.dagger.android_support
    annotationProcessor deps.dagger.android_processor
    annotationProcessor deps.dagger.compiler

    //log
    api deps.timber
如果Gradle出现compile失败的情况,可以在Project的build.gradle里面添加如下:(也可以使用上面的JitPack来compile)
allprojects {
    repositories {
        //...
        maven { url 'https://dl.bintray.com/jenly/maven' }
    }
}

示例

集成步骤代码示例 (示例出自于app中)

Step.1 启用DataBinding,在你项目中的build.gradle的android{}中添加配置:

dataBinding {
    enabled true
}

Step.2 使用JDK8编译(v1.1.2新增),在你项目中的build.gradle的android{}中添加配置:

compileOptions {
    targetCompatibility JavaVersion.VERSION_1_8
    sourceCompatibility JavaVersion.VERSION_1_8
}

Step.3 自定义全局配置(继承MVVMFrame中的FrameConfigModule)(提示:如果你没有自定义配置的需求,可以直接忽略此步骤)

/**
 * 自定义全局配置
 * @author <a href="mailto:jenly1314@gmail.com">Jenly</a>
 */
public class AppConfigModule extends FrameConfigModule {
    @Override
    public void applyOptions(Context context, ConfigModule.Builder builder) {
        builder.baseUrl(Constants.BASE_URL)//TODO 配置Retrofit中的baseUrl
                .retrofitOptions(new RetrofitOptions() {
                    @Override
                    public void applyOptions(Retrofit.Builder builder) {
                        //TODO 配置Retrofit
                        //如想使用RxJava
                        //builder.addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    }
                })
                .okHttpClientOptions(new OkHttpClientOptions() {
                    @Override
                    public void applyOptions(OkHttpClient.Builder builder) {
                        //TODO 配置OkHttpClient
                    }
                })
                .gsonOptions(new GsonOptions() {
                    @Override
                    public void applyOptions(GsonBuilder builder) {
                        //TODO 配置Gson
                    }
                })
                .roomDatabaseOptions(new RoomDatabaseOptions<RoomDatabase>() {
                    @Override
                    public void applyOptions(RoomDatabase.Builder<RoomDatabase> builder) {
                        //TODO 配置RoomDatabase
                    }
                });
    }
}

Step.4 在你项目中的AndroidManifest.xml中通过配置meta-data来自定义全局配置(提示:如果你没有自定义配置的需求,可以直接忽略此步骤)

<!-- MVVMFrame 全局配置 -->
<meta-data android:name="com.king.mvvmframe.app.config.AppConfigModule"
           android:value="FrameConfigModule"/>

Step.5 用你项目的Application继承MVVMFrame中的BaseApplication

/**
 *  MVVMFrame 框架基于Google官方的Architecture Components dependencies 构建,在使用MVVMFrame时,需遵循一些规范:
 *  1.你的项目中的Application中需初始化MVVMFrame框架相关信息,有两种方式处理:
 *      a.直接继承本类{@link BaseApplication}即可;
 *      b.如你的项目中的Application本身继承了其它第三方的Application,因为Java是单继承原因,导致没法继承本类,可参照{@link BaseApplication}类,
 *      将{@link BaseApplication}中相关代码复制到你项目的Application中,在相应的生命周期中调用即可。
 *
 * @author <a href="mailto:jenly1314@gmail.com">Jenly</a>
 */
public class App extends BaseApplication {

    @Override
    public void onCreate() {
          //TODO 如果默认配置已经能满足你的需求,你不需要自定义配置,可以通过下面注释掉的方式设置 BaseUrl,从而可以省略掉 step3 , setp4 两个步骤。
//        RetrofitHelper.getInstance().setBaseUrl(baseUrl);
        super.onCreate();
        //开始构建项目时,DaggerApplicationComponent类可能不存在,你需要执行Make Project才能生成,Make Project快捷键 Ctrl + F9
        ApplicationComponent appComponent = DaggerApplicationComponent.builder()
                .appComponent(getAppComponent())
                .build();
        //注入
        appComponent.inject(this);

    }


}

目前通过设置 BaseUrl 的入口主要有两种:

1.一种是通过在 Manifest 中配置 meta-data 的来自定义 FrameConfigModule,在里面 通过 {@link ConfigModule.Builder#baseUrl(String)}来配置 BaseUrl。(一次设置,全局配置)

2.一种就是通过RetrofitHelper {@link RetrofitHelper#setBaseUrl(String)} 或 {@link RetrofitHelper#setBaseUrl(HttpUrl)} 来配置 BaseUrl。(可多次设置,动态全局配置,有前提条件)

以上两种配置 BaseUrl 的方式都可以达到目的。但是你可以根据不同的场景选择不同的配置方式。

主要场景与选择如下:

一般场景:对于只使用单个不变的 BaseUrl的

场景1:如果本库的默认已满足你的需求,无需额外自定义配置的。
     选择:建议你直接使用 {@link RetrofitHelper#setBaseUrl(String)} 或 {@link RetrofitHelper#setBaseUrl(HttpUrl)} 来初始化 BaseUrl,切记在框架配置初始化之前,即你的 {@link Application#onCreate()}的父类onCreate之前设置。
场景2:如果本库的默认配置不满足你的需求,你需要自定义一些配置的。(比如需要使用 RxJava相关)
     选择:建议你在自定义配置中通过 {@link ConfigModule.Builder#baseUrl(String)} 来初始化 BaseUrl。

二般场景:对于只使用单个 BaseUrl 但是,BaseUrl中途会变动的。

场景3:和一般场景一样,也能分两种,所以选择也和一般场景也可以是一样的。
     选择:两种选择都行,但当 BaseUrl需要中途变动时,还需将 {@link RetrofitHelper#setDynamicDomain(boolean)} 设置为 {@code true} 才能支持动态改变 BaseUrl。

特殊场景:对于支持多个 BaseUrl 且支持动态可变的。

   选择:这个场景的选择,主要涉及到另外的方法,请查看 {@link RetrofitHelper#putDomain(String, String)} 和 {@link RetrofitHelper#putDomain(String, HttpUrl)}相关详情

Kotlin Demo

更多使用详情,请查看app中的源码使用示例或直接查看API帮助文档

相关开源项目

KingWeather 一款天气预报APP
EasyChat 一款即时通讯APP
AppTemplate 一款基于MVVMFrame构建的App模板

压缩与混淆

Android Studio 3.3+ 之后,AS新增特性代码压缩工具 R8R8 旨在集成 ProGuardD8 的功能。 目前推荐第三方库都自己配置混淆规则,这样在混淆时,如果使用 R8 ,则可以直接包含第三方依赖库的混淆规则,就不用繁琐的去配置每个依赖库的混淆规则。

目前 MVVFrame 所有依赖混淆规则详情:ProGuard rules

版本记录

v1.1.3:2020-6-1

  • 支持配置多个BaseUrl,且支持动态改变(详情查看 RetrofitHelper
  • 对外暴露更多配置,(详情查看 FrameConfigModule)
  • 优化细节
  • 更新Retrofit至v2.9.0

v1.1.2:2020-4-5

  • 优化细节
  • 更新Gradle至v5.6.4
  • 更新Lifecycle至v2.2.0
  • 更新Room至v2.2.5
  • 更新Dagger至v2.27
  • 更新Retrofit至v2.8.1

v1.1.1:2019-11-4

  • 优化部分细节
  • 更新编译SDK至29
  • 更新Gradle至v5.4.1
  • 更新Lifecycle至v2.2.0-rc01
  • 更新Room至v2.2.1
  • 更新Dagger至v2.25.2
  • 更新Retrofit至v2.6.2
  • 更新Gson至v2.8.6

v1.1.0:2019-7-22

  • 更新Dagger至v2.23.2
  • 更新Gradle至v5.1.1
  • 完全迁移至AndroidX版本

v1.0.2:2019-7-22

  • 更新Dagger至v2.19
  • 为迁移至AndroidX做准备(下一版本将直接发布AndroidX版)

v1.0.1:2019-7-9

  • Retrofit更新至v2.6.0

v1.0.0:2018-12-12

  • MVVMFrame初始版本

赞赏

如果你喜欢MVVMFrame,或感觉MVVMFrame帮助到了你,可以点右上角“Star”支持一下,你的支持就是我的动力,谢谢 😃

你也可以扫描下面的二维码,请作者喝杯咖啡 ☕

关于我

Name: Jenly

Email: jenly1314#gmail.com / jenly1314#vip.qq.com

CSDN: jenly121

CNBlogs: jenly

GitHub: jenly1314

Gitee: jenly1314

加入QQ群: 20867961

About

🏰 MVVMFrame for Android 是一个基于Google官方推出的Architecture Components dependencies(现在叫JetPack){ Lifecycle,LiveData,ViewModel,Room } 构建的快速开发框架。现在应该叫JetPack。有了MVVMFrame的加持,从此构建一个MVVM模式的项目变得快捷简单。

License:MIT License


Languages

Language:Java 100.0%