天天看點

(2.2.8.11) Android Studio 中 Gradle 依賴的統一管理

    • 為什麼要對 Gradle 統一管理
    • 使用腳本 config.gradle
    • 使用
    • 不足之處

為什麼要對 Gradle 統一管理

在實際項目中,經常會出現一個 Project 中有多個 Module 的情況,如果每個 Module 又同時擁有相同的依賴,比如 v4 包,那麼,每次 v4 包更新的時候修改多個 Module 中的 build.gradle 檔案,更新其版本都是一件麻煩的事情,而且很有可能忘記某個 Module。

其次如果不同的module引入了不同版本的依賴,在合并的時候也可能導緻一定的隐患

最後在元件化開發中,我們需要保證各個元件的編譯環境應該是一緻的,其中包括compileSdkVersion、buildToolsVersion等等

是以,将依賴進行統一管理,對于一個 Project 下擁有多個 Module 的情況來說是非常必要的。

使用腳本 config.gradle

假設項目結構如下:

root
  --app
         --build.gradle
  --module1
          --build.gradle
  ...
  --build.gradle
           

在root目錄下建立 conf.gradle檔案,在 config.gradle 中添加如下代碼:

ext {

    android = [
            compileSdkVersion: ,// 用于編譯的SDK版本
            buildToolsVersion: "21.1.1",// 用于Gradle編譯項目的工具版本

            applicationId    : "com.sangfor.pocket",//包名

            minSdkVersion    : ,// 最低支援Android版本
            targetSdkVersion : ,// 目标版本

            versionCode      : ,
            versionName      : "9.9.99",

            // Version of "com.android.support:appcompat-v7", refer it as folow:
            // compile "com.android.support:appcompat-v7:${APPCOMPAT_VERSION}"
            VSupportSdk      : '21.0.2'
    ]

    dependencies = [
            "multidex"       : "com.android.support:multidex:1.0.0",
            "appcompat-v7"   : "com.android.support:appcompat-v7:${android["VSupportSdk"]}",
            "annotations"    : "com.android.support:support-annotations:23.1.1",
            //...
            ]


    files = [
            "AMap_Services"     : files('app/libs/AMap_Services_V2.3.1.jar'),
            "AMap_Location"     : files('app/libs/AMap_Location_V3.3.0_20170118.jar'),
            "Android_Map3D_SDK" : files('app/libs/Android_Map3D_SDK_V4.1.2_20161104.jar'),
            "TencentLocationSDK": files('app/libs/TencentLocationSDK_v5.0.1_r251203_170116_1729.jar'),
            "mta-sdk"           : files('app/libs/mta-sdk-1.0.0.jar'),
            "open_sdk"          : files('app/libs/open_sdk.jar'),

            //...
    ]

    projects = [
            "common"              : project(':common'),
            //"jni"                 : project(':jni'),
            //"ormlite"             : project(':ormlite5.0'),
            //"customswipelistview" : project(':customswipelistview'),
            //...
    ]
}
           

其中:

- 針對第三方庫可以知己使用 “”映射

- 針對本地jar檔案,要files(‘相對于root的路徑’)

- 針對本地工程,使用project(‘:工程名’)

使用

在 root 目錄下的build.gradle 中加上apply from: “config.gradle”

接下來就剩下最後一步了,在需要添加依賴的 Module 中使用

  • android 節點的使用
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 rootProject.ext.android.versionCode
        versionName rootProject.ext.android.versionName
    }

}
           
  • dependencies 節點的使用
dependencies {
    compile rootProject.ext.files["AMap_Services"]
    compile rootProject.ext.files["AMap_Location"]
    compile rootProject.ext.files["Android_Map3D_SDK"]
    compile rootProject.ext.files["TencentLocationSDK"]
    compile rootProject.ext.files["mta-sdk"]
    compile rootProject.ext.files["open_sdk"]
}
           

不足之處

在項目中有使用aar方式的引入,譬如compile(name: ‘jni’, ext:’aar’),目前還未找到對應的集中配置管理方式

繼續閱讀