Gradle快速構建(一)AS專案構建配置進階
阿新 • • 發佈:2018-12-09
用Gradle構建Android Studio專案,預設會有一個基礎配置,那麼在這個基礎上,我們通過將變數聚合在一起,既明瞭又簡潔。
文章目錄
一、配置原始碼編譯路徑
我們都知道,AS會有預設的原始碼編譯路徑,比如java的在main/java下,.so庫的引用在main/jniLibs下,如下修改它的引用地址:
配置資源目錄
學會配置資源編譯路徑,在jni的庫和src編譯路徑,馬甲包的編譯等非常實用
android { sourceSets.main { //預設是jniLibs,修改為libs目錄 jniLibs.srcDir 'src/main/libs' //disable automatic ndk-build call //當手動編寫NDK編譯指令時設定 jni.srcDirs = [] manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java'] resources.srcDirs = ['src/main/resources'] aidl.srcDirs = ['src/main/aidl'] renderscript.srcDirs = ['src/main/renderscript'] res.srcDirs = ['src/main/res'] assets.srcDirs = ['src/main/assets'] } }
二、配置編譯版本和依賴版本為全域性變數
通常我們構建一個上線專案必定包含多個Modules和第三方庫的依賴,有時候依賴或者編譯版本衝突時,手動改,很麻煩,一個自動化的專案,必定需要統一配置,以下通過一個gradle全域性的配置來實現這個操作。
-
我們在主工程目錄App: build.gradle中配置全域性的版本引數
ext { supportLibVersion = '27.0.1' // variable that can be referenced to keep support libs consistent versionBuildTool = '27.0.3' versionCompiler = 27 versionTarget = 27 versionNameString = '1.0.0' javaSourceCompatibility = JavaVersion.VERSION_1_8 javaTargetCompatibility = JavaVersion.VERSION_1_8 }
-
在Modules的build.gradle中使用
android { compileSdkVersion versionCompiler buildToolsVersion versionBuildTool //指定java版本和配置屬性 compileOptions { sourceCompatibility javaSourceCompatibility targetCompatibility javaTargetCompatibility } defaultConfig { applicationId "com.xxx.xxx" minSdkVersion 18 targetSdkVersion versionTarget versionCode 1 versionName versionNameString testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } //----------忽略部分 } dependencies { api fileTree(dir: 'libs', include: ['*.jar']) implementation "com.android.support:support-v4:${supportLibVersion}" implementation "com.android.support:support-annotations:${supportLibVersion}" }
三、打包相關的一些配置
-
其中shrinkResources在我測試看來效果並不明顯,如果release工程釋出,可以用【Refactor】選項【Remove Unused Resources】,在編譯前移除
buildTypes { release {{//打release包 shrinkResources true // 檢查並移除無用res檔案,縮小apk zipAlignEnabled true // Zipalign優化,壓縮效率高一些 minifyEnabled true //是否混淆 //指定混淆檔案 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' debuggable false //是否debug模式 jniDebuggable true //指定jni是否debug模式打包 } debug {//打debug包 } }
四、Gradle編譯相容性配置
1. lint檢查
通過新增lintOptons宣告,配置編譯時一些不重要報錯打斷編譯問題(個人不建議新增,因為欠債要還,不規範的地方總會有爆發的一天)
lintOptions {
/** Whether lint should set the exit code of the process if errors are found */
abortOnError false //報錯打斷編譯選項
/**
* Returns whether lint should check for fatal errors during release builds. Default is true.
* If issues with severity "fatal" are found, the release build is aborted.
*/
checkReleaseBuilds false //release編譯時檢查
}
2. 依賴倉庫
通過gradle我們方便的使用依賴包,但如同一起eclipse使用maven倉庫時一樣,我們在配置gradle的時也要宣告Lib倉庫。
在project下的build.gradle中宣告:
buildscript {
repositories {
google()
jcenter()
//mavenCentral() 使用maven倉庫的話,各有各的庫,可能都有,看自己配置
}
dependencies {
classpath 'com.android.tools.build:gradle:3.2.0-alpha13'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}