新項目中,使用了Google I/O 2013發布的新工具,使用Gradle構建Android項目,並且在新版的Intellig IDEA以及google的Android Studio對其支持。本文就介紹一下怎麼使用gradle構建android項目,進行多個版本編譯。
Gradle創建項目目錄結構 http://www.linuxidc.com/Linux/2012-07/64177.htm
Gradle 打包 Groovy 腳本成 jar與上傳到maven repository http://www.linuxidc.com/Linux/2012-07/64178.htm
Gradle 構建 Android 應用常見問題解決指南 http://www.linuxidc.com/Linux/2013-10/90807.htm
Gradle - 簡單測試驅動Web程序 http://www.linuxidc.com/Linux/2013-11/92611.htm
Gradle - 使用介紹 http://www.linuxidc.com/Linux/2013-11/92611.htm
Gradle是以Groovy為基礎,面向java應用,基於DSL語法的自動化構建工具。是google引入,替換ant和maven的新工具,其依賴兼容maven和ivy。
使用gradle的目的:
更容易重用資源和代碼;
可以更容易創建不同的版本的程序,多個類型的apk包;
更容易配置,擴展;
更好的IDE集成;
Gradle1.10或者更高版本,grale插件0.9或者更高版本.
android SDK需要有Build Tools 19.0.0以及更高版本
使用ide創建的gradle構建的項目,會自動創建一個build.gradle,如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.9.0'
}
}
apply plugin: 'android'
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
}
可以看到,構建文件主要有三個區域:
buildscript{…}
Configures the build script classpath for this project. 設置腳本的運行環境
apply plugin: ‘android’
設置使用android插件構建項目
android{…}
設置編譯android項目的參數
通常會有以下任務:
assemble The task to assemble the output(s) of the project(輸出一個項目文件,android就是打包apk)
check The task to run all the checks.(運行檢查,檢查程序的錯誤,語法,等等)
build This task does both assemble and check (執行assemble和check)
clean This task cleans the output of the project(清理項目輸出文件)
上面的任務assemble,check,build實際上什麼都不做,他們其實都是其他任務的集合。
執行一個任務的方式為gradle 任務名
, 如gradle assemble
在android項目中還有connectedCheck(檢查連接的設備或模擬器),deviceCheck(檢查設備使用的api版本)
通常我們的項目會有至少生成兩個版本,debug和release,我們可以用兩個任務assembleDebug和assembleRelease去分別生成兩個版本,也可以使用assemble一下子生成兩個版本。
gradle支持任務名縮寫,在我們執行gradle assembleRelease的時候,可以用gradle aR代替。
我們可以在build.gradle文件中配置我們的程序版本等信息,從而可以生成多個版本的程序。
支持的配置有:
minSdkVersion 最小支持sdk版本
targetSdkVersion 編譯時的目標sdk版本
versionCode 程序版本號
versionName 程序版本名稱
packageName 程序包名
Package Name for the test application 測試用的程序包名
Instrumentation test runner 測試用的instrumentation實例
例如:
1 2 3 4 5 6 7 8 9 10 11
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
versionCode 12
versionName "2.0"
minSdkVersion 16
targetSdkVersion 16
}
}
默認情況下項目目錄是這樣的 有兩個組件source sets,一個main,一個test,對應下面兩個文件夾。src/main/ src/androidTest/
然後對於每個組件目錄都有兩個目錄,分別存儲java代碼和資源文件java/ resources/
對於android項目中呢,對應的目錄和文件是AndroidManifest.xml //該文件src/androidTest/目錄下不需要,程序執行時會自動構建res/ assets/ aidl/ rs/ jni/
如果需要上面這些文件,但是不是在上面所說的目錄,則需要設置。
1 2 3 4 5 6 7 8 9 10
sourceSets {
main {
java {
srcDir 'src/java'
}
resources {
srcDir 'src/resources'
}
}
}
可以給main或者test設置根目錄,如
1 2 3
sourceSets {
androidTest.setRoot('tests')
}
可以指定每種文件的存儲路徑
1 2 3 4 5 6 7 8 9 10 11
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
}
特別是我們的ndk生成的.so文件,通常我們不是放到jni目錄中的,我們需要設置一下
1 2 3 4 5
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
可以給不同類型進行不同的配置,先看示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
android {
signingConfigs {
debug {
storeFile file("debug.keystore")
}
myConfig {
storeFile file("other.keystore")
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
buildTypes {
foo {
debuggable true
jniDebugBuild true
signingConfig signingConfigs.myConfig
}
}
}
上面的配置文件配置兩個類型,一個時debug類型,一個時自己的自定義類型。兩個分別使用了不同的簽名,同時對於生成密鑰,要填寫設置的密碼。
更多詳情見請繼續閱讀下一頁的精彩內容: http://www.linuxidc.com/Linux/2014-05/102289p2.htm