日常开发项目中, 有时候会有需要在本地依赖多个库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
在里面按照下面例子写入我们依赖的库版本.
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", ] }
//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 }
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"] }
APPCOMPAT = com.android.support:appcompat-v7:26.0.1 GSON = com.google.code.gson:gson:2.6.2
compile APPCOMPAT compile GSON