本篇將講述Android Gradle插件在實際項目中的使用,以實際使用爲例java
引入第三方插件的方法: 根build.gradle中:android
buildscript{
repositories {
jcenter()
}
dependecies {
classpath 'com.android.tools.build:gradle:1.5.0'
}
}
複製代碼
引入第三方gradle庫的方法:先在根build.gradle中使用classpath引入路徑,由於是在根工程中配置,全部子工程都不用配置了markdown
在其餘模塊中使用,如App模塊,在模塊下的build.gradle文件中:app
apply plugin : 'com.android.application'
android{
compileSdkVersion 23
buildToolsVersion "23.0.1"
}
複製代碼
apply plugin: 'com.android.application' 建立應用項目 apply plugin: 'com.android.library' 建立庫工程 apply plugin: 'com.android.test' 建立測試工程框架
編譯SDK版本和構建工具版本模塊化
android {
//編譯Android工程的SDK版本
compileSdkVersion 23
//Android構建工具的版本
buildToolsVersion "23.0.1"
}
複製代碼
defaultConfig:默認配置,它是一個ProductFlavor工具
defaultConfig {
//配置包名
applicationId "com.breeze.qrcode"
//最低支持的Android版本
minSdkVersion 15
//基於哪一個Android版本開發
targetSdkVersion 26
//版本號
versionCode 1
//版本名稱
versionName "1.0.0"
}
複製代碼
配置簽名信息測試
signingConfigs {
release {
//簽名證書文件路徑
storeFile file("myrelease.keystore")
//簽名證書文件密碼
storePassword "password"
//簽名證書中的密鑰別名
keyAlias "Alias"
//簽名證書中密鑰的密碼
keyPassword "password"
}
//配置多項
debug {
//....
}
}
//使用
defaultConfig{
signingConfig signingConfigs.release
}
複製代碼
構建的應用類型gradle
android {
buildTypes {
release {
//是否混淆
minifyEnabled true
//配置是否啓用自動拆分多個Dex
multiDexEnabled true
// 配置是否自動清理未使用的資源,默認未false
shrinkResources true
//簽名配置
signingConfig signingConfigs.release
//混淆文件配置
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
//啓用zip對齊
zipAlignEnabled true
}
//配置其餘編譯類型
debug {
//不混淆
minifyEnabled false
zipAlignEnabled true
signingConfig signingConfigs.debug
}
}
}
複製代碼
修改生成的apk的名稱 先介紹一個概念: 變體:打包渠道和編譯類型的組合,對應一個apk包ui
this.afterEvaluate {
tasks['build'].doLast {
android.applicationVariants.all {
variant ->
variant.outputs.each {
output->
def fileName = "xxxxx.apk"
if(variant.buildType.isDebuggable()) {
fileName = "yyyy.apk"
}
def outputFile = output.outputFile
File targetFile = new File(outputFile.parent, fileName)
if (targetFile.exists()) {
targetFile.delete()
}
if (outputFile != null && outputFile.name.endsWith(".apk")) {
output.outputFile.renameTo(targetFile)
}
}
}
}
}
複製代碼
多渠道打包
android {
productFlavors {
google {
applicationId "com.xxx.game.google"
manifestPlaceholders.put("UMENG_CHANNEL", "google")
}
}
}
//manifest文件中使用
<meta-data android:value="${UMENG_CHANNEL}" android:name="UMENG_CHANNEL"/>
複製代碼
作模塊化框架時會遇到將module獨立成應用編譯運行,和將module看成libiary的狀況,而且使用不一樣的Manifest,不一樣的源碼
//isBuildModule定義的布爾值表明當前module要作lib仍是application
if (IsBuildModule.toBoolean()) {
apply plugin: 'com.android.application'
} else {
apply plugin: 'com.android.library'
}
//配置相應的manifest
sourceSets {
main {
if (IsBuildModule.toBoolean()) {
manifest.srcFile 'src/main/debug/AndroidManifest.xml'
} else {
manifest.srcFile 'src/main/release/AndroidManifest.xml'
//集成開發模式下排除debug文件夾中的全部Java文件
java {
exclude 'debug/**'
}
}
}
}
複製代碼