【Gradle】配置詳解(持續更正補充)
阿新 • • 發佈:2019-02-08
1、build.gradle 工程構建檔案。
頂級構建檔案,為整個專案新增配置
// 宣告gradle指令碼自身需要使用的資源,包括依賴項、第三方外掛、maven倉庫地址等。
buildscript {
// 宣告倉庫的源。之前這裡用mavenCentral()
repositories {
jcenter() // jCenter可以理解成是一個新的中央遠端倉庫,相容maven中心倉庫,而且效能更優
}
// 配置使用gradle所需要依賴的版本庫
dependencies {
classpath 'com.android.tools.build:gradle:2.2.0'
classpath 'com.jakewharton:butterknife-gradle-plugin:8.4.0'
}
}
// 為所有的工程的repositories配置為jcenters
allprojects {
repositories {
jcenter() // 支援Java 依賴庫管理(maven/ivy)
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
2、app/build.gradle module構建檔案
// 宣告要使用的外掛。可以自己定製
apply plugin: 'com.android.application' // 說明該module的構建型別。如果該moudle是個庫,就寫com.android.library
apply plugin: 'com.jakewharton.butterknife' // 註解外掛
apply plugin: 'com.google.gms.google-services' // 谷歌服務外掛
// 設定編譯android專案的引數
android {
// SDK的一些宣告
compileSdkVersion 25 // 編譯使用的SDK版本(本地要有)
buildToolsVersion "24.0.2" // 編譯使用的tools版本(在sdk目錄/build-tools/下)
// 預設配置
defaultConfig {
applicationId "com.neiliner.mymovie.xiaomi" // 安裝時依據該ID區分是否為同一個應用
minSdkVersion 14 //支援的最低版本
targetSdkVersion 25 //支援的目標版本
versionCode 1 // 版本號,使用者能看到的版本號
versionName "1.0" // 版本名,內部定義的版本名
// 單元測試相關的配置。擴充套件見<補充1>
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
//關閉Android Studio的PNG合法性檢查的
aaptOptions.cruncherEnabled = false
aaptOptions.useNewCruncher = false
// 指定資源的路徑。比如從Eclipse遷過來的程式碼,和AS的檔案位置不同,就需要手動設定
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml' //指定AndroidManifest檔案
java.srcDirs = ['src'] //指定source目錄
resources.srcDirs = ['src'] //指定source目錄
aidl.srcDirs = ['src'] //指定source目錄
renderscript.srcDirs = ['src'] //指定source目錄
res.srcDirs = ['res'] //指定資源目錄
assets.srcDirs = ['assets'] //指定assets目錄
jniLibs.srcDirs = ['libs'] //指定lib庫目錄
}
debug.setRoot('build-types/debug') //指定debug模式的路徑
release.setRoot('build-types/release') //指定release模式的路徑
}
//簽名配置。需要與下面buildTypes配合使用
signingConfigs {
//釋出版簽名配置
release {
storeFile file("fk.keystore") // 金鑰檔案路徑
storePassword "123" // 金鑰檔案密碼
keyAlias "fk" // key別名
keyPassword "123" // key密碼
}
//debug版簽名配置
debug {
storeFile file("fk.keystore") // 金鑰檔案路徑
storePassword "123" // 金鑰檔案密碼
keyAlias "fk" // key別名
keyPassword "123" // key密碼
}
}
// build型別
buildTypes {
debug {
applicationIdSuffix ".debug" //將包名設定為.debug,以便同時安裝debug和release版本。
signingConfig signingConfigs.release //設定上面signingConfigs的簽名配置
}
release {
minifyEnabled false // 是否進行混淆
zipAlignEnabled true //是否支援zip
shrinkResources true // 移除無用的resource檔案
debuggable false //是否支援除錯
signingConfig signingConfigs.debug //設定簽名信息
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 設定混淆檔案的位置。擴充套件見<補充2>
}
}
// 打包時的相關配置。當專案中依賴的第三方庫越來越多時,有可能會出現兩個依賴庫中存在同一個(名稱)檔案。如果這樣,Gradle在打包時就會提示錯誤(警告)。那麼就可以根據提示,然後使用以下方法將重複的檔案剔除。
packagingOptions {
exclude 'META-INF/ASL2.0'
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
}
// 程式在編譯的時候會檢查lint,有任何錯誤提示會停止build,我們可以關閉這個開關
lintOptions {
abortOnError false // 有錯誤是否停止build
checkReleaseBuilds false //打包release版本的時候是否進行檢測
}
// multiDex的一些相關配置,這樣配置可以讓你的編譯速度更快
dexOptions {
preDexLibraries = false
incremental true // 讓它不要對Lib做preDexing
// 開啟incremental dexing,優化編譯效率,這個功能android studio預設是關閉的。
javaMaxHeapSize "4g" // 設定java堆記憶體大小
}
// 設定產品特性,即多渠道打包的東西,比如不同的應用名,圖示、AndroidManifest.xml
// 配合manifest merger使用的時候就可以達成在一次編譯過程中產生多個具有自己特性配置的版本。
productFlavors {
xiaomi {
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "xiaomi"] // 渠道包配置
manifest.srcFile 'exampleapk/AndroidManifest1.xml'
applicationId "com.abc.def.xiaomi"
}
googlePlay {
applicationId "com.abc.def.googleplay"
}
}
// productFlavors的批量方法,類似一個循序遍歷作用。
productFlavors.all {
flavor -> flavor.manifestPlaceholders = [UMENG_CHANNEL_VALUE: name]
}
// java版本
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_7
targetCompatibility JavaVersion.VERSION_1_7
}
}
// 依賴。遠端本地都在這兒配置
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs') // 編譯libs目錄下的所有jar包
testCompile 'junit:junit:4.12' // 編譯單元測試框架
compile project(':library') // 依賴本專案中名為library的庫
compile 'com.github.bumptech.glide:glide:3.7.0' // 編譯第三方庫
compile 'com.jakewharton:butterknife:8.4.0' // 編譯第三方庫
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0' // 指定處理Annotation的庫。AS2.2以前版本這裡用 apt。
}
3、setting.gradle 工程配置
// 宣告需要加入gradle的module,即告訴gradle專案中有哪些module需要處理
include ':app', ':extras:ShimmerAndroid'
補充
2、proguardFiles getDefaultProguardFile(‘proguard-android.txt’), ‘proguard-rules.pro’
前一部分代表系統預設的混淆檔案,該檔案包含了基本的混淆宣告,目錄在 /tools/proguard/proguard-android.txt ;
後一部分是我們自定義的混淆檔案,目錄在 app/proguard-rules.txt,在這裡可以宣告一些第三方依賴的混淆規則;
最終混淆的結果是這兩部分檔案共同作用的。