1 统一项目依赖
组件化开发,插件化开发成为了项目了标配,android项目中会引入大量依赖,类似v4,v7如果组件和最终编译app的依赖版本不同,可能导致程序崩溃。如果不通过读取配置文件而是要求各个module单独维护版本统一的依赖显然不太现实,除非只有一两个人,否则某个module添加了一个依赖还要反馈给其他用户很麻烦。
Gradle中可以通过引入gradle配置文件的方式,实现依赖等的统一,在项目根目录定义gradle配置文件config.gradle,然后在根目录下的build.gradle通过apply from进行引入,然后各个module就可以通过配置文件获取依赖版本,如果没有自己需要的依赖可以添加到配置文件中,然后同步到服务器上就可以了。
config.gradle 定义方式:
ext {
android = [
compileSdkVersion: 26,
buildToolsVersion: "26.0.1",
minSdkVersion : 19,
targetSdkVersion : 25,
VSupportSdk : '26.0.1',
VRecyclerView : '26.0.1',
]
dependencies = [
minSdkVersion : 19,
"appcompat-v7" : "com.android.support:appcompat-v7:${android["VSupportSdk"]}",
"recyclerView" : "com.android.support:recyclerview-v7:${android["VRecyclerView"]}",
//design
"design" : "com.android.support:design:${android["VSupportSdk"]}",
"annotation" :"com.android.support:support-annotations:${android["VSupportSdk"]}",
]
}
引入方式:
//根目录下的build.gradle
apply from: "config.gradle"
使用方式:
minSdkVersion rootProject.ext.android.minSdkVersion
compile rootProject.ext.dependencies["appcompat-v7"]
compile rootProject.ext.dependencies["recyclerView"]
2 gradle配置文件读取
Gradle中读取配置文件的常用方式:
2.1 在module目录下,gradle.properties中定义变量
COMPILE_SDK_VERSION=27
TARGET_SDK_VERSION=27
MIN_SDK_VERSION=14
PUBLISH_CONFIG=release
然后就可以直接在同级别的build.gradle中读取了。
minSdkVersion Integer.valueOf(MIN_SDK_VERSION)
targetSdkVersion Integer.valueOf(TARGET_SDK_VERSION)
versionCode Integer.valueOf(VERSION_CODE)
versionName VERSION_NAME
如果在project根目录下的gradle.properties中定义变量,则项目中所有module的build.gradle都可以使用。
2.2 读取gradle配置文件获取变量
最常用的配置是在project根目录下生成config.gradle配置文件,然后所有的module就可以共享配置文件,这样做可以统一整个项目不同module编译版本,引入的外部依赖,否则如果开发不同module的同事使用了不同版本的依赖,可能导致程序兼容性问题,例如我遇到的一个组件使用的v7和最终app使用的v7版本不同,导致在设置RecycleView的默认动画时导致崩溃。
自定义配置文件:写法第一部分已经说明,放在默认ext中就行。
引入配置文件:
获取配置属性:
项目根目录下的build.gradle引入的其他配置文件,在整个项目中都可以使用,如果单个module引入gradle配置文件,获取属性的方式有点区别。
第一种情况是如果module的build.gradle引入的配置文件和gradle是同一个目录下(同级,都是当前module根目录下);
第二种情况是引入的配置文件在项目的根目录下,和module的build.gradle不是同一个目录。
经试验引用时需要加入this才能正常引用。