Android 插件化开发,依赖配置统一规范
Gradle
插件开发
Kotlin
规范
版本
为什么要对 Gradle 统一管理
在实际项目中,经常会出现一个 Project 中有多个 Module 的情况,如果每个 Module 又同时拥有相同的依赖,比如 v4 包,那么,每次 v4 包升级的时候修改多个 Module 中的 build.gradle 文件,更新其版本都是一件麻烦的事情,而且很有可能忘记某个 Module。而且可能会出现不同的Module依赖相同的jar,但是版本不同,这样子对于开发过程中会出现各种各样的坑,无疑是浪费了开发时间。所以,将依赖进行统一管理,对于一个 Project 下拥有多个 Module 的情况来说是非常必要的
如何管理
Google推荐单独使用一份.gradle 文件来管理引用库;假如我们的项目结构是这样的:
root
--module1
--build.gradle
--module2
--build.gradle
...
--build.gradle
常见的一般是使用config.gradle
root
--module1
--build.gradle
--module2
--build.gradle
...
--build.gradle
--config.gradle
在config.gradle中添加如下代码:
ext {
android = [
compileSdkVersion: 23,
buildToolsVersion: "24.0.0 rc1",
applicationId : "com.sivan.rxretrofitdemo",
minSdkVersion : 16,
targetSdkVersion : 23,
versionCode : 1,
versionName : "1.0"
]dependencies = [
"appcompat-v7" : "com.android.support:appcompat-v7:23.3.0",
"rxjava" : "io.reactivex:rxjava:1.1.3",
"rxandroid" : "io.reactivex:rxandroid:1.1.0",
"retrofit" : "com.squareup.retrofit2:retrofit:2.0.0-beta4",
"gson" : "com.google.code.gson:gson:2.6.2",
"converter-gson" : "com.squareup.retrofit2:converter-gson:2.0.0-beta4",
"adapter-rxjava" : "com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4",
"butterknife" : "com.jakewharton:butterknife:7.0.1",
"logging-interceptor": "com.squareup.okhttp3:logging-interceptor:3.0.1"
]
}
ok,依赖写完了,那如何在项目中依赖引用呢?
在项目的根目录下的build.gradle中添加apply from : "config.gradle"
接下来就是见证奇迹的时刻,开始使用
- android 节点的使用
android {
compileSdkVersion rootProject.ext.android.compileSdkVersion
buildToolsVersion rootProject.ext.android.buildToolsVersion
defaultConfig {
applicationId rootProject.ext.android.applicationId
minSdkVersion rootProject.ext.android.minSdkVersion
targetSdkVersion rootProject.ext.android.targetSdkVersion
versionCode rootProject.ext.android.versionCode
versionName rootProject.ext.android.versionName
}
- dependencies 节点的使用
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile rootProject.ext.dependencies["appcompat-v7"]
compile rootProject.ext.dependencies["rxjava"]
compile rootProject.ext.dependencies["rxandroid"]
compile rootProject.ext.dependencies["gson"]
compile rootProject.ext.dependencies["converter-gson"]
compile rootProject.ext.dependencies["adapter-rxjava"]
compile rootProject.ext.dependencies["retrofit"]
compile rootProject.ext.dependencies["butterknife"]
}
对此这是其中一种方式,但是这种方式你们有没有发现不方便之处,接下来我说一下个人的见解
- 该依赖管理方式对于单个项目可能也看不出什么弊端,但是对于一个公司而言,不可能只是维护一个项目而已。如果项目有多个,那么每个项目都要复制一份,这样子加入某个库修改了,或者升级了。那么就要一个一个区修改
- 在你使用的时候,发现没有,没有autocomplete自动提示功能,简直了。。。;写的时候要不断切换look下,这样子极为不便。
所以下面介绍的一种就是通过插件的形式去实现【Gradle Plugin】
具体如何开发插件这个知识,请看Plugin插件开发流程。
附上Demo地址:点击打开链接