Gradle常用配置

基本介紹

Gradle 是一個基于 Ant 和 Maven 概念的項目自動化建構工具。它使用一種基于 Groovy 的特定領域語言 (DSL) 來聲明項目設置,這比我們的 ANT 使用 XML 構建配置要靈活的多。在編寫配置時,你可以像編程一樣靈活,Gradle 是基于 Groovy 的 DSL 語言,完全兼容 JAVA 。

Android Gradle 基本配置

apply plugin: 'com.android.application'

android {
    compileSdkVersion 25
    buildToolsVersion "26.0.0"
    defaultConfig {
        applicationId "com.ahui.gradleconfig"
        minSdkVersion 14
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:25.3.1'
    compile 'com.android.support.constraint:constraint-layout:1.0.0-alpha8'
    testCompile 'junit:junit:4.12'
}

上面是 android 默認創建的 gradle 文件,在項目的開發過程中。我們會不斷的對這個 gradle 文件進行操作。具體一些常用操作下面介紹。

  1. 引入第三方庫。
compile 'me.drakeet.multitype:multitype:3.0.0'
  1. 當第三方的庫中引入的庫,不是你想要的庫的話,可以使用 exclude 將它排除掉。
dependencies {
    compile('me.drakeet.multitype:multitype:3.0.0', {
       exclude group: 'com.android.support'
    })
    compile 'com.android.support:recyclerview-v7:你選擇的版本'
}
  1. 配置構建類型
 buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

可以往 buildTypes 里面添加新的構建類型。一般都會配置一個 bug 和 release 這兩種類型來區分測試環境下的和生產環境下。不同環境下可能需要的簽名文件和簽名文件的信息可能不同。所以需要用 signingConfig 來描述簽名信息

  signingConfigs {
        release {
            storeFile file("lhl.jks")
            storePassword "1111"
            keyAlias "111"
            keyPassword "1111"
        }
    }

    buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
  1. 設備安裝多個版本的Apk
    對于Android App 來講,相同包名的 apk 在同一個設備上只能存在一個。所以我們無法做到在同一個設備上同時安裝生產環境和測試環境的安裝包,這對于日常的開發工作和測試人員的測試工作極不方便。 常規的解決方式,要么是修改包名,重新打一個包出來。現在我們利用 gradle 可以輕松的做到。
buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.release
            applicationIdSuffix '.debug'
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
其實上面的配置就是更改 applicationId 的值,讓 debug 中的 applicationId 的值=applicationId+applicationIdSuffix 。這個時候,你可能會想,如何去配置測試包和生產包的域名,名字,icon呢?
  1. 更改生產包和測試包的 AppName
    1. 借鑒多渠道打包占位符
buildTypes {
      release {
          minifyEnabled false
          signingConfig signingConfigs.release
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          manifestPlaceholders = [
                  app_name: "我是正式版的名字",
                  app_icon: "@mipmap/ic_launcher_2"
          ]
      }
      debug {
          minifyEnabled false
          signingConfig signingConfigs.release
          applicationIdSuffix '.debug'
          proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
          manifestPlaceholders = [
                  app_name: "我是測試版的名字",
                  app_icon: "@mipmap/ic_launcher"
          ]
      }
  }
 2. 直接使用resValue
buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            resValue "string", "app_name", "我是正式版的名字"
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.release
            applicationIdSuffix '.debug'
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            resValue "string", "app_name", "我是測試版的名字"
        }
    }
  1. 配置測試環境的域名和生產環境的域名
    BuildConfig 是 Android Gradle 自動生成的一個 Java 類文件,無法手動編譯,但是可以通過Gradle 控制,我們可以利用這個來進行定義一些有關于環境的一些參數。類如生產環境和預發環境。控制 Log 的開關等等。
 buildTypes {
        release {
            minifyEnabled false
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            manifestPlaceholders = [
                    app_name: "我是正式版的名字",
                    app_icon: "@mipmap/ic_launcher_2"
            ]
            buildConfigField "String", "URL", '"http://www.taobao.com"'
        }
        debug {
            minifyEnabled false
            signingConfig signingConfigs.release
            applicationIdSuffix '.debug'
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
            manifestPlaceholders = [
                    app_name: "我是測試版的名字",
                    app_icon: "@mipmap/ic_launcher"
            ]
            buildConfigField "String", "URL", '"http://www.baidu.com"'
        }
  1. 控制全局的版本信息 。首先在項目根目錄創建一個version.gradle來控制版本信息,在需要的地方引入即可。
ext {
    android = [
            compileSdkVersion: 26,
            buildToolsVersion: "26.0.1",
            minSdkVersion    : 14,
            targetSdkVersion : 26,
            versionCode      : 1,
            versionName      : "1.0"
    ]

    dependencies = [
            "appcompat"       : 'com.android.support:appcompat-v7:26.+',
            "logger"          : 'com.orhanobut:logger:2.1.1',
            "gson"            : "com.google.code.gson:gson:2.6.2",
            "eventbus"        : 'org.greenrobot:eventbus:3.0.0',
            "butterknife"     : 'com.jakewharton:butterknife:7.0.1',
            "support-design"  : 'com.android.support:design:24.1.1',
            "support-percent" : 'com.android.support:percent:24.1.1',
            "support-multidex": 'com.android.support:multidex:1.0.1',
            "glide"           : 'com.github.bumptech.glide:glide:3.7.0',
            "support-v4"      : 'com.android.support:support-v4:24.1.1',
            "okhttp3"         : 'com.squareup.okhttp3:okhttp:3.3.1',
            "nineoldandroids" : 'com.nineoldandroids:library:2.4.0'
    ]
}

引入

apply plugin: 'com.android.library'
def androidConfig = rootProject.ext.android
def compileConfig = rootProject.ext.dependencies
android {
    compileSdkVersion androidConfig.compileSdkVersion
    buildToolsVersion androidConfig.buildToolsVersion

    defaultConfig {
        minSdkVersion androidConfig.minSdkVersion
        targetSdkVersion androidConfig.targetSdkVersion
        versionCode androidConfig.versionCode
        versionName androidConfig.versionName
    }
   }

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile compileConfig.appcompat
    compile compileConfig.logger
    testCompile 'junit:junit:4.12'
}

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

推薦閱讀更多精彩內容