Skip to content

2、通过 submodule 引入框架 基本配置

imyyq edited this page Sep 21, 2020 · 3 revisions

要么通过远程仓库引入框架,要么通过 submodule 引入框架源码,二选一,要通过远程仓库引入,详见: Wiki - 0、通过远程仓库引入框架,如果是你是通过远程仓库引入的,那么本篇和(Wiki - 1、通过 submodule 引入框架)都不用看了。

1、在你项目根目录中的 settings.gradle 中加入框架:

include ':MVVMArchitecture'

2、生成配置文件,指定 SDK 版本,开启相关需要的库。

拷贝 MVVMArchitecture/mvvm-config.gradle.template 到项目根目录,重命名为 mvvm-config.gradle。 配置 SDKVersion,IncludeLib 指定你需要包含哪些库。

/**
 * 决定需要开启哪些库的使用,有些库是有关联的,比如 bindingCollection 引用了 recyclerView。
 * 因此即使禁用掉 recyclerView,开启 bindingCollection,也会导入 recyclerView
 *
 * 禁用掉的库,就不能使用该库的内容,正常来说在 release 打包的时候会从包中移除
 */
ext {
    IncludeLib = [
        // 内存泄露
        leakCanary2 : true,
        // 应用前后台监听
        lifecycleProcess : false,

        // 通常来说以上都需要为 true

        recyclerView : false,

        room : false,
        roomRxJava2 : false,

        retrofit2 : false,
        retrofit2RxJava2 : false,

        glide : false,

        // 权限申请
        livePermissions : false,

        // 内嵌加载中
        loadSir : false,

        rxJava2 : false
    ]

    SDKVersion = [
        compileSdkVersion : 29,
        minSdkVersion : 21,
        targetSdkVersion : 29
    ]
}

都是 Google 官方的库居多,具体是什么库,大部分见名知意,如果还不懂是什么库,可查看 dependencies.gradle 文件。

3、配置项目根目录下的 build.gradle

buildscript {
    // 注意:以下文件的声明顺序不能乱
    apply from: 'mvvm-config.gradle'
    apply from: 'MVVMArchitecture/config.gradle'
    apply from: 'MVVMArchitecture/dependencies.gradle'

    addRepository(repositories)

    dependencies {
        // 根据 AS 的版本而不同
        classpath "com.android.tools.build:gradle:x.x.x"
        classpath Deps.kotlinPlugin
    }
}

allprojects {
    addRepository(repositories)
}

// 有需要的话,这里可以强制使用某个版本的库,通常没必要配置
configurations.all {
    resolutionStrategy {
        force 'androidx.annotation:annotation:1.1.0',
            'androidx.arch.core:core-common:2.0.1',
            'androidx.arch.core:core-runtime:2.0.1',
            'androidx.core:core:1.0.1'
    }
}

...

4、模块(比如 app)目录下的 build.gradle 必须启用如下功能,并引用 MVVMArchitecture 模块

// Kotlin 需要增加 kapt plugin 才可以使用 DataBinding
apply plugin: 'kotlin-kapt'

android {
    // 指定 sdk 相关信息,上面的第 2 步已经配置了,这里直接使用
    compileSdkVersion SysConfig.compileSdkVersion

    defaultConfig {
        applicationId "com.xxxx.xxxxx" // 你的应用包名

        minSdkVersion SysConfig.minSdkVersion
        targetSdkVersion SysConfig.targetSdkVersion

        ...
    }

    // Gradle Plugin 4.0 及以上
    buildFeatures{
        dataBinding = true
        viewBinding = true
    }

    // Gradle Plugin 4.0 以下
    dataBinding {
        enabled = true
    }

    viewBinding {
        enabled = true
    }
    
    // 以上配置二选一,其中 viewBinding 是你有不需要用 DataBinding 的类时,才需要开启,不想用 DataBinding,可只继承自 ViewBindingBaseXxxxx 基类

    // 开启 Java 8 支持
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    kotlinOptions {
        jvmTarget = "${JavaVersion.VERSION_1_8}"
    }

}
dependencies {
    ...

    // 将 appcompat,core-ktx,constraintlayout,kotlin 等项目创建时默认生成的都去掉,只留下 test 和 MVVMArchitecture 即可
    implementation project(path: ':MVVMArchitecture')

    ...
}

5、执行 Sync Now

此时基本配置已经完成了,默认拥有的能力除了配置文件中值为 true 的属性,还有如下默认开启的:

// 这两个是创建项目默认就有的库
api Deps.kotlinStdLib
api Deps.kotlinKTX
// 兼容库
api Deps.appcompat
// 约束布局
api Deps.constraintLayout
// 侧滑布局,是用来界面侧滑退出的,因为只有一个类,就不做可配置去除了
api Deps.slidingPaneLayout

// 以下三个是为了使用最新的特性
api Deps.activity
api Deps.activityKTX
api Deps.fragment

// 在 Lifecycles 中使用协程,视图销毁则自动取消
api Deps.lifecycleRuntimeKTX
// 在 LiveData 中使用协程
api Deps.lifecycleLiveDataKTX
// 简化 Fragment 的 API 调用,同时通过 viewModels 扩展方法创建 vm 来的非常容易
api Deps.fragmentKTX
// 在 vm 中使用协程,视图销毁自动取消
api Deps.viewModelKTX
// 使用 Java8 替换 lifecycleCompiler,让 vm 可以感知 v 生命周期
api Deps.lifecycleJava8

以上默认开启的包都非常的小,都是用得上的,所以不用担心引入了许多无用的,Google 分包很细致,比如 lifecycleJava8 就只有一个类,专门完成特定的功能。

好了,基本配置已经完成了,现在你已经可以使用框架了。