如果有多个module的配置是一样的,可以将这些配置提取出来,也就是使用全局配置。全局配置有多种方式,这里介绍其中的两种。
1. 使用ext块配置
在项目build.gradle中使用ext块,如下所示。
GRADLE
ext{
compileSdkVersion =28
buildToolsVersion ="28.0.3"
minSdkVersion =15
targetSdkVersion =28
}
在某个module的build.gradle中使用配置:
GRADLE
apply plugin: 'com.android.application'
android {
compileSdkVersion rootProject.ext.compileSdkVersion
buildToolsVersion rootProject.ext.buildToolsVersion
defaultConfig {
applicationId "com.example.liuwangshu.hookinstrumentation"
minSdkVersion rootProject.ext.minSdkVersion
targetSdkVersion rootProject.ext.targetSdkVersion
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
...
}
...
2. 使用config.gradle配置
首先在根目录下创建config.gradle文件来进行配置。
config.gradle
GRADLE
ext{
android=[
applicationId:"com.example.liuwangshu.hookinstrumentation",
compileSdkVersion :28,
buildToolsVersion :"28.0.3",
minSdkVersion : 15,
targetSdkVersion : 28,
]
dependencies =[
"appcompat-v7" : "com.android.support:appcompat-v7:28.0.0",
"constraint" : "com.android.support.constraint:constraint-layout:1.1.3",
]
}
接着在项目build.gradle中添加apply from: "config.gradle",这样项目的所有module都能用config.gradle中定义的参数。
最后在module的build.gradle中使用配置:
GRADLE
apply plugin: 'com.android.application'
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 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
...
dependencies {
implementation rootProject.ext.dependencies["constraint"]
implementation rootProject.ext.dependencies["appcompat-v7"]
...
}
4.3 dependencies 块
dependencies 块用于配置该module构建过程中所依赖的所有库。Gradle插件3.4版本新增了 api 和 implementation 来代替 compile 配置依赖,其中 api 和此前的 compile是一样的。dependencies和api主要以下的区别:
implementation可以让module在编译时隐藏自己使用的依赖,但是在运行时这个依赖对所有模块是可见的。而api与compile一样,无法隐藏自己使用的依赖。
如果使用api,一个module发生变化,这条依赖链上所有的module都需要重新编译,而使用implemention,只有直接依赖这个module需要重新编译。
本文转载自:https://blog.youkuaiyun.com/guodashen007/article/details/113886181