如果有多个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需要重新编译。
版权声明:本文为guodashen007原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。