版權聲明:本文為部落客原創文章,轉載請注明出處http://blog.csdn.net/u013132758。 https://blog.csdn.net/u013132758/article/details/52355915
前段時間忽然發現自己對于Android studio的Gradle打包并不了解,這篇部落格參考網上衆多教程,為大家詳細介紹Gradle。
Gradle簡介
We would like to introduce Gradle to you, a build system that we think is a quantum leap for build technology in the Java (JVM) world. Gradle
provides:
- A very flexible general purpose build tool like Ant.
- Switchable, build-by-convention frameworks a la Maven. But we never lock you in!
- Very powerful support for multi-project builds.
- Very powerful dependency management (based on Apache Ivy).
- Full support for your existing Maven or Ivy repository infrastructure.
- Support for transitive dependency management without the need for remote repositories or pom.xml and ivy.xml files.
- Ant tasks and builds as first class citizens.
- Groovy build scripts.
- A rich domain model for describing your build。
上面這段是grade官方介紹的grade的特性:
- 一個像 Ant 一樣的靈活的建構工具
- 一種可切換的, 像 maven 一樣的基于合約建構的架構
- 支援強大的多工程建構
- 支援強大的依賴管理(基于 ApacheIvy )
- 支援已有的 maven 和 ivy 倉庫
- 支援傳遞性依賴管理, 而不需要遠端倉庫或者 pom.xml 或者 ivy 配置檔案
- 優先支援 Ant 式的任務和建構
- 基于 groovy 的建構腳本
- 有豐富的領域模型來描述你的建構
gradle屬于任務驅動型建構工具,它的建構過程是基于Task的。Gradle是以
Groovy 語言為基礎,面向Java應用為主。基于DSL(領域特定語言)文法的自動化建構工具。
Gradle安裝與環境變量配置
。。。。。。。。。略!!!
網上有好多關于Windows,Linux,MAC的grade安裝與配置的教程這裡就不寫了。
Gradle腳本建構(build.gradle)
Gradle中的所有東西都是圍繞兩個基本概念:項目和任務。
每個Gradle建構都是由一個或多個項目組成。一個項目代表什麼,取決于你用Gradle正在做的。比如,一個項目可能代表一個庫或一個網絡應用。它可能代表一個由其他項目産生的一個或多個jar包打包d一個zip包。一個項目不需要代表一個事物而被建構。它可以代表一個事物而被做出來,比如部署你的應用到暫存區或産品環境。不要擔心這個現在是否好像有一點含糊。Gradle的通過約定來建構的功能支援為一個項目添加一個更加具體的定義。
下面介紹一下build.gradle檔案:
apply plugin: 'com.android.application'//說明module的類型,com.android.application為程式,com.android.library為庫
android {
compileSdkVersion 22//編譯的SDK版本
buildToolsVersion "22.0.1"//編譯的Tools版本
defaultConfig {//預設配置
applicationId "com.nd.famlink"//應用程式的包名
minSdkVersion 8//支援的最低版本
targetSdkVersion 19//支援的目标版本
versionCode 52//版本号
versionName "3.0.1"//版本名
}
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模式的路徑
}
signingConfigs {//簽名配置
release {//釋出版簽名配置
storeFile file("fk.keystore")//密鑰檔案路徑
storePassword "123"//密鑰檔案密碼
keyAlias "fk"//key别名
keyPassword "123"//key密碼
}
debug {//debug版簽名配置
storeFile file("fk.keystore")
storePassword "123"
keyAlias "fk"
keyPassword "123"
}
}
buildTypes {//build類型
release {//釋出
minifyEnabled true//混淆開啟
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt'//指定混淆規則檔案
signingConfig signingConfigs.release//設定簽名資訊
}
debug {//調試
signingConfig signingConfigs.release
}
}
packagingOptions {
exclude 'META-INF/ASL2.0'//排除一些檔案
exclude 'META-INF/LICENSE'
exclude 'META-INF/NOTICE'
exclude 'META-INF/MANIFEST.MF'
}
lintOptions {
abortOnError false//lint時候終止錯誤上報,防止編譯的時候莫名的失敗
}
}
dependencies {
compile fileTree(dir: 'libs', exclude: ['android-support*.jar'], include: ['*.jar']) //編譯lib目錄下的.jar檔案
compile project(':Easylink')//編譯附加的項目
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'//編譯來自Jcenter的第三方開源庫
}
Gradle常用指令
直接執行gradle build會生成debug包和release包如果不想要debug包可以使用gradleasR指令。
上面大家接觸了一些指令如 ./gradlew -v ./gradlew clean ./gradlew
build, 這裡注意是./gradlew, ./代表目前目錄,gradlew代表
gradlewrapper,意思是gradle的一層包裝,大家可以了解為在這個項目本地就封裝了gradle,即gradle
wrapper,在9GAG/gradle/wrapper/gralde-wrapper.properties檔案中聲明了它指向的目錄和版本。隻要下載下傳成功即可用grdlew
wrapper的指令代替全局的gradle指令。z了解了gradlewrapper的概念,下面一些常用指令也就容易了解了。
· ./gradlew-v版本号
· ./gradlewclean清除9GAG/app目錄下的build檔案夾
· ./gradlewbuild檢查依賴并編譯打包
這裡注意的是 ./gradlew build 指令把debug、release環境的包都打出來,如果正式釋出隻需要打Release的包,該怎麼辦呢,下面介紹一個很有用的指令 assemble,如
· ./gradlewassembleDebug編譯并打Debug包
· ./gradlewassembleRelease編譯并打Release的包
除此之外,assemble還可以和productFlavors結合使用,具體在下一篇多管道打包進一步解釋。
· ./gradlewinstallRelease Release模式打包并安裝
· ./gradlewuninstallRelease解除安裝Release模式包
local.properties檔案:
這個檔案主要是配置sdk、 ndk路徑,格式必須符合要求。
settings.gradle檔案
include ‘:app’
該檔案中就僅僅隻包含了一句話,在你的項目中如果有多個Model存在的時候,就可以選擇包含哪些進行編譯。
這個檔案是全局的項目配置檔案,裡面主要聲明一些需要加入gradle的module,如:
include':app', ':extras:ShimmerAndroid'
檔案中的 app, extras:ShimmerAndroid 都是module,如果還有其他module都需要按照如上格式加進去。
gradle-wrapper.properties 檔案
可以看到裡面聲明了gradle的目錄與下載下傳路徑以及目前項目使用的gradle版本,這些預設的路徑我們一般不會更改的,這個檔案裡指明的gradle版本不對也是很多導包不成功的原因之一。
default.properties檔案
我們看紅色框中圈的兩句,第一句說:不要修改這個檔案,您的修改将被清除。第二句說:這個檔案必須被版本控制系統檢查。
意思就說這個檔案我們不能動。這個檔案的内容是配置混淆檔案及android系統版本。
project.properties檔案
這個檔案和上個檔案一樣,我們不能修改。