日常开发项目中, 有时候会有需要在本地依赖多个库module的情况, 那么我们为了保证所有库支持的系统版本统一. 就需要用到这个技巧了.
--- 2018年6月6日 更新---
最整洁友好的方式:
在项目根目录下建立一个自定义名字的.gradle文件. 例如我创建的是:
ext.gradle
ext{ appVersionCode = 1 appVersionName = "1.0" compileSdkVersion = 27 minSdkVersion = 15 targetSdkVersion = 27 supportVersion = "27.1.1" appcompat = "com.android.support:appcompat-v7:$supportVersion" design = "com.android.support:design:$supportVersion" constraint = "com.android.support.constraint:constraint-layout:1.1.1" junit = "junit:junit:4.12" runner = "com.android.support.test:runner:1.0.2" espresso = "com.android.support.test.espresso:espresso-core:3.0.2" // 友盟推送 umengCommon = "com.umeng.sdk:common:1.5.3" umengUtdid = "com.umeng.sdk:utdid:1.1.5.3" umengPush = "com.umeng.sdk:push:4.2.0" }之后在项目根目录的 build.gradle 文件的最后写入这样一行代码, 把 ext.gradle 文件插入到配置文件中
buildscript { ... task clean(type: Delete) { delete rootProject.buildDir } apply from: rootProject.file('ext.gradle')之后在app 模块下的 build.gradle 这样写.
apply plugin: 'com.android.application' android { compileSdkVersion rootProject.ext.compileSdkVersion defaultConfig { applicationId "app.geekqian.com.umengtest" minSdkVersion rootProject.ext.minSdkVersion targetSdkVersion rootProject.ext.targetSdkVersion versionCode rootProject.ext.appVersionCode versionName rootProject.ext.appVersionName testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation rootProject.ext.appcompat implementation rootProject.ext.design implementation rootProject.ext.constraint testImplementation rootProject.ext.junit androidTestImplementation rootProject.ext.runner androidTestImplementation rootProject.ext.espresso //PushSDK必须依赖基础组件库,所以需要加入对应依赖 implementation rootProject.ext.umengCommon //PushSDK必须依赖utdid库,所以需要加入对应依赖 implementation rootProject.ext.umengUtdid //PushSDK implementation rootProject.ext.umengPush }----- 2018年3月9日 更新 -----
#1. **推荐第一种比较方便**: 首先打开根目录下的 build.gradle 文件。并在文档最后换行输入以下代码: ext{ //SDK minSdkVersion = 15 targetSdkVersion = 26 compileSdkVersion = 26 //dependencies supportLibraryVersion ='27.1.0' butterknifeVersion = '8.8.1' }
如下图 :
接着打开 app mudule下的 build.gradle 文件, 使用刚刚配置的 ext---------------
引用自 http://www.jianshu.com/p/a092bcc3de7d
# 这种太麻烦了, 废弃
首先我们在项目根目录下创建一个任意命名的xxx.gradle文件. 例如 : custom.gradle
在里面按照下面例子写入我们依赖的库版本.
custom.gradle ext { android = [ compileSdkVersion : 26, buildToolsVersion : "26.0.1", applicationId : "com.ingdan.innews", minSdkVersion : 15, targetSdkVersion : 26, versionCode : 1, versionName : "1.0", testInstrumentationRunner: "android.support.test.runner.AndroidJUnitRunner" ] dependencies = [ "appcompat-v7" : "com.android.support:appcompat-v7:26.0.1", "kotlin_version" : "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version", "constraint-layout" : "com.android.support.constraint:constraint-layout:1.0.2", "junit" : "junit:junit:4.12", "runner" : "com.android.support.test:runner:1.0.0", "espresso-core" : "com.android.support.test.espresso:espresso-core:3.0.0", "ahbottomnavigation": "com.aurelhubert:ahbottomnavigation:2.0.6", "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", ] } 接着打开项目根目录下的build.gradle, 在最顶上依赖我们刚刚创建的custom.gradle. 实例如下: build.gradle //Top-level build file where you can add configuration options common to all sub-projects/modules. apply from : "custom.gradle" buildscript { ext.kotlin_version = '1.1.3-2' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.0.0-beta3' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { google() jcenter() } } task clean(type: Delete) { delete rootProject.buildDir } 接着打开app module 中的build.gradle文件, 按照下面实例格式修改: (PS: 看第一句代码就可以知道, 这里是获取刚刚写的custom.gradle中的ext块中两个配置的对象, 典型的面向对象编程, 下面大家应该就都能看懂了. 不同的是android节点的可以使用 obj.xx的方式来调用, 而dependencies是使用类似数组的["xxx"]来调用 ) build.gradle apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' def cfg = rootProject.ext.android def dpc = rootProject.ext.dependencies android { compileSdkVersion cfg.compileSdkVersion buildToolsVersion cfg.buildToolsVersion defaultConfig { applicationId cfg.applicationId minSdkVersion cfg.minSdkVersion targetSdkVersion cfg.targetSdkVersion versionCode cfg.versionCode versionName cfg.versionName testInstrumentationRunner cfg.testInstrumentationRunner } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { implementation fileTree(dir: 'libs', include: ['*.jar']) implementation dpc["kotlin_version"] implementation dpc["appcompat-v7"] implementation dpc["constraint-layout"] testImplementation dpc["junit"] androidTestImplementation dpc["runner"] androidTestImplementation dpc["espresso-core"] //底部导航 compile dpc["ahbottomnavigation"] } 之后我们要改动的话直接在custom.gradle中的ext区域改就行了. PS: 这里注意一下, implementation 以及 testImplementation 以及 androidTestImplementation 这些依赖修饰符我也不清楚有啥区别, 但是我测试了下使用compile来写也没啥问题, 照样跑的动. 再补充学习另一种统一配置方式 在项目根目录下有个gradle.properties文件, 在文件中这样写 APPCOMPAT = com.android.support:appcompat-v7:26.0.1 GSON = com.google.code.gson:gson:2.6.2 然后在app module中的build.gradle文件dependencies{}中引用 compile APPCOMPAT compile GSON