android多Modle統一配置Gradle

android多Modle統一配置Gradle

目前as使用gradle來配置項目工程,一般的項目為了模塊化或者結構的清晰。
都會或多或少的使用多library(model)的方式。
so,問題來了。。。

我想升級下項目的支持的最小版本,編譯版本等(下面的代碼),要改很多處,怎么辦呢?

 compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }    

解決問題之前我們先說一下Gradle工作流程

  • 首先是初始化階段。對multi-project build而言,就是執行settings.gradle文件
  • 配置階段,在這個階段就是解析每個model中的build.gradle文件
  • 在這里我叫它配置依賴關系階段,在這里會更具項目的依賴關系,建立一定的順序。
  • 執行任務階段(即各種task)你也可以自己寫task

其實在各個階段我們都可以添加一些我們需要的東東。
這既是關鍵了,嘻嘻...
下面是解決方法:

1.修改local.properties文件

這個文件是properties文件,就是配置一下信息。
這樣的話,等下次再修改的時候就只修改改文件就行了。
這里我簡單的寫一下,可以根據你的項目來添加或者刪除。

ndk.dir=/Users/guxiuzhong/Library/Android/sdk/ndk-bundle
sdk.dir=/Users/guxiuzhong/Library/Android/sdk
minSdkVersion=15
targetSdkVersion=23
compileSdkVersion=23
buildToolsVersion=23.0.2
versionName=1.0
versionCode=1

其實就是把原來gradle中版本等抽取出來,形成鍵值對。

2.讀取local.properties文件

我們新建一個目錄叫selfgradle
如下圖(注意結構)


結構 icon

然后新建一個init.gradle 文件,

//定義一個方法
def initProjectEnvironment() {
    //打印log
    println "initialize  Gradle Environment ....."
    Properties properties = new Properties()
    File propertyFile = new File(rootDir.getAbsolutePath() + "/local.properties")
    properties.load(propertyFile.newDataInputStream())

    //config
    gradle.ext.minSdkVersion = properties.getProperty('minSdkVersion').toInteger().intValue()
    gradle.ext.targetSdkVersion = properties.getProperty('targetSdkVersion').toInteger().intValue()
    gradle.ext.compileSdkVersion = properties.getProperty('compileSdkVersion').toInteger().intValue()
    gradle.ext.buildToolsVersion = properties.getProperty('buildToolsVersion')
    gradle.ext.versionName = properties.getProperty('versionName')
    gradle.ext.versionCode = properties.getProperty('versionCode').toInteger().intValue()
//打印log
 println "initialize  Gradle Environment completes..."
}

//調用
initProjectEnvironment()

3.調用該文件

在哪里調用呢?
肯定是在構建項目的 初始化階段也就是gradle的初始化階段。
也就是settings.gradle文件
修改如下:

//和你的selfgradle文件結構放在哪里有關
apply from: './selfgradle/init.gradle'

include ':app', ':librarya'

4.使用配置的信息

在你的主工程或者各個Modle下使用即可。

  compileSdkVersion gradle.ext.compileSdkVersion
    buildToolsVersion gradle.ext.buildToolsVersion

    defaultConfig {
        applicationId "com.gxz.gradledemo2"
        minSdkVersion gradle.ext.minSdkVersion
        targetSdkVersion gradle.ext.targetSdkVersion
        versionCode gradle.ext.versionCode
        versionName gradle.ext.versionName
    }

最后我們再次編譯:
我們看到首先輸出了我們打印的log,哈哈,是不是呢,媽媽再也不用擔心我了...


編譯-1 icon
編譯-1 icon
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Gradle對于很多開發者來說有一種既熟悉又陌生的感覺,他是離我們那么近,以至于我每天做項目都需要他,但是他又是離...
    阿_希爸閱讀 9,600評論 10 199
  • Spring Cloud為開發人員提供了快速構建分布式系統中一些常見模式的工具(例如配置管理,服務發現,斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,287評論 25 708
  • Spring Boot 參考指南 介紹 轉載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,954評論 6 342
  • 小江畢業已經三年了,還是普通員工,自恃在公司是老員工了,部門其他人員都沒有他熟悉公司熟悉業務,就對公司有怨言,嫌領...
    原理的世界閱讀 206評論 0 2