刷新了對Android Studio中gradle.properties的認知

平時對這個文件也沒太大關注,只是以前大佬把簽名信息放這裏,能用,也就學着這樣搞,並不知道其中的原理什麼的,無意中看到了AndroidStudio本地化配置gradle的buildToolsVersion和gradleBuildTools這篇文章,也算是明白了爲啥可以這麼做了。
以下內容來自AndroidStudio本地化配置gradle的buildToolsVersion和gradleBuildTools

gradle.properties 兩個非常有用的屬性

  • 1.在Android項目中的任何一個 build.gradle 文件中都可以把 gradle.properties 中的常量讀取出來,不管這個 build.gradle 是組件的還是整個項目工程的 build.gradle;
  • 2.gradle.properties 中的數據類型都是 String 類型,使用其他數據類型需要自行轉換;

gradle.properties能夠解決的問題
利用 gradle.properties 的屬性可以解決在多人協同開發Android項目的時候,因爲開發團隊成員的Android開發環境(開發環境指 Android SDK 和 AndroidStudio)不一致而導致頻繁改變線上項目的 build.gradle 配置。

  • 1.在每個Android組件的 build.gradle 中有一個屬性:buildToolsVersion,表示構建工具的版本號,這個屬性值對應 AndroidSDK 中的 Android SDK Build-tools,正常情況下 build.gradle 中的 buildToolsVersion 跟你電腦中 Android SDK Build-tools 的最新版本是一致的,比如現在 Android SDK Build-tools 的最新的版本是:25.0.3,那麼我的Android項目中 build.gradle 中的 buildToolsVersion 版本號也是 25.0.3,但是一旦一個Android項目是由好幾個人同時開發,總會出現每個人的開發環境 Android SDK Build-tools 是都是不一樣的,並不是所有人都會經常升級更新 Android SDK,而且代碼是保存到線上環境的(例如使用 SVN/Git 等工具),某個開發人員提交代碼後線上Android項目中 build.gradle 中的 buildToolsVersion 也會被不斷地改變。
  • 2.另外一個原因是因爲Android工程的根目錄下的 build.gradle 聲明瞭 Android Gradle 構建工具,而這個工具也是有版本號的,而且 Gradle Build Tools 的版本號跟 AndroidStudio 版本號一致的,但是有些開發人員基本很久都不會升級自己的 AndroidStudio 版本,導致團隊中每個開發人員的 Gradle Build Tools 的版本號也不一致。
  • 如果每次同步代碼後這兩個工具的版本號被改變了,開發人員可以自己手動改回來,並且不要把改動工具版本號的代碼提交到線上環境,這樣還可以勉強繼續開發;但是很多公司都會使用持續集成工具(例如Jenkins)用於持續的軟件版本發佈,而Android出包是需要 Android SDK Build-tools 和 Gradle Build Tools 配合的,一旦提交到線上的版本跟持續集成工具所依賴的Android環境構建工具版本號不一致就會導致Android打包失敗。

爲了解決上面問題就必須將Android項目中 build.gradle 中的 buildToolsVersion 和 GradleBuildTools 版本號從線上代碼隔離出來,保證線上代碼的 buildToolsVersion 和 Gradle Build Tools 版本號不會被人爲改變。

配置策略
1、首先在Android工程的 gradle.properties 中分別定義兩個常量:localBuildToolsVersion 和 localGradlePluginVersion,分別表示 buildToolsVersion 和 Gradle Build Tools 的版本號:

# 爲自動化出包配置(因爲每個開發的電腦壞境不一致)
localBuildToolsVersion=25.0.3
# 這個值一般跟你的AndroidStudio版本號一致
localGradlePluginVersion=2.3.2

2.然後在Android工程的 build.gradle 中引用 localGradlePluginVersion:

dependencies {
        //classpath "com.android.tools.build:gradle:$localGradlePluginVersion"
        //$localGradlePluginVersion是gradle.properties中的數據
        classpath "com.android.tools.build:gradle:$localGradlePluginVersion"
    }

3.在組件的build.gradle中引用 localBuildToolsVersion:

android {
    compileSdkVersion rootProject.ext.compileSdkVersion
    //localBuildToolsVersion是gradle.properties中的數據
    buildToolsVersion localBuildToolsVersion

    defaultConfig {
        minSdkVersion rootProject.ext.minSdkVersion
        targetSdkVersion rootProject.ext.targetSdkVersion
        versionCode rootProject.ext.versionCode
        versionName rootProject.ext.versionName
    }
}

4.最後,將 gradle.properties 從版本控制工具(Git、SVN)中給忽略掉;然後把配置好的 gradle.properties 給每個開發人員發一份。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章