Manifest屬性
通過SDL可以配置一下manifest選項:
- minSdkVersion
- targetSdkVersion
- versionName
- applicationId (有效的包名 -- 更多詳情請查閱ApplicationId 對比 PackageName)
- package Name for the test application
- Instrumentation test runner
在android元素中的defaultConfig元素中定義所有配置。
在構(gòu)建文件中定義的強大之處在于它是動態(tài)的。 例如,可以從一個文件中或者其它自定義的邏輯代碼中讀取版本信息:
def computeVersionName() {
...
}
android {
compileSdkVersion 19
buildToolsVersion "19.0.0"
defaultConfig {
versionCode 12
versionName computeVersionName()
minSdkVersion 16
targetSdkVersion 16
}
}
注意:不要使用與在給定范圍內(nèi)的getter方法可能引起沖突的方法名。例如,在defaultConfig{...}中調(diào)用getVersionName()將會自動調(diào)用defaultConfig.getVersionName()方法,你自定義的getVersionName()方法就被取代掉了。
Build Types構(gòu)建類型
默認情況下,Android Plugin會自動給項目設(shè)置同時構(gòu)建應(yīng)用程序的debug和release版本。 兩個版本之間的不同主要圍繞著能否在一個安全設(shè)備上調(diào)試,以及APK如何簽名。
Debug版本可采用默認簽名。Release版本在構(gòu)建過程中沒有簽名,需要稍后再簽名。
這些配置通過一個BuildType對象來配置。默認情況下,這兩個實例都會被創(chuàng)建,分別是一個debug版本和一個release版本。
Android plugin允許像創(chuàng)建其他構(gòu)建類型一樣定制debug和release實例。這需要在buildTypes的DSL容器中配置:
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
jnidebug.initWith(buildTypes.debug)
jnidebug {
packageNameSuffix ".jnidebug"
jnidebugBuild true
}
}
}
以上代碼片段實現(xiàn)了以下功能:
- 配置默認的debug構(gòu)建類型
- 將debug版本的包名設(shè)置為.debug以便能夠同時在一臺設(shè)備上安裝debug和release版本的apk。
- 創(chuàng)建了一個名為jnidebug的新構(gòu)建類型,并且這個構(gòu)建類型是debug構(gòu)建類型的一個副本。
- 繼續(xù)配置jnidebug構(gòu)建類型,允許使用JNI組件,并且也添加了不一樣的包名后綴。
創(chuàng)建一個新的構(gòu)建類型就是簡單的在buildType標簽下添加一個新的元素,并且可以使用initWith()或者直接使用閉包來配置它。
簽名配置
對一個應(yīng)用程序簽名需要以下:
- 一個Keystory
- 一個keystory密碼
- 一個key的別名
- 一個key的密碼
- 存儲類型
位置,鍵名,兩個密碼,還有存儲類型一起形成了簽名配置。
默認情況下,debug被配置成使用一個debug keystory。 debug keystory使用了默認的密碼和默認key及默認的key密碼。 debug keystory的位置在$HOME/.android/debug.keystroe,如果對應(yīng)位置不存在這個文件將會自動創(chuàng)建一個。
可以創(chuàng)建其他配置或者自定義內(nèi)建的默認配置。通過signingConfigs這個DSL容器來配置:
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 keystory的路徑到項目的根目錄下。在這個例子中,這將自動影響其他使用到debug構(gòu)建類型的構(gòu)建類型。
這里也創(chuàng)建了一個新的Single Config(簽名配置)和一個使用這個新簽名配置的新的Build Type(構(gòu)建類型)。
注意:只有默認路徑下的debug keystory不存在時會被自動創(chuàng)建。更改debug keystory的路徑并不會自動在新路徑下創(chuàng)建debug keystory。如果創(chuàng)建一個新的不同名字的SignConfig,但是使用默認的debug keystore路徑來創(chuàng)建一個非默認的名字的SigningConing,那么還是會在默認路徑下創(chuàng)建debug keystory。換句話說,會不會自動創(chuàng)建是根據(jù)keystory的路徑來判斷,而不是配置的名稱。
依賴關(guān)系
Gradle項目可以依賴于其它組件。這些組件可以是外部二進制包,或者是其它的Gradle項目。
1. 本地二進制包依賴
可以在compile配置中,添加對本地jar包或aar包的依賴
dependencies {
compile files('libs/foo.jar')
}
android {
...
}
注意:這個dependencies DSL標簽是標準Gradle API中的一部分,所以它不屬于android標簽
這個compile配置將被用于編譯main application。它里面的所有東西都被會被添加到編譯的classpath中,同時也會被打包進最終的APK。 以下是添加依賴時可能用到的其它一些配置選項:
- compile main application(主module)。
- androidTestCompile test application(測試module)。
- debugCompile debug Build Type(debug類型的編譯)。
- releaseCompile release Build Type(發(fā)布類型的編譯)。
APK默認配置了兩個或兩個以上的編譯配置:compile和< buildtype >Compile. 創(chuàng)建一個新的Build Type將會自動創(chuàng)建一個基于它名字的新配置。
2. 遠程二進制包依賴
Gradle支持從Maven或者Ivy倉庫中拉取文件。首先必須將倉庫添加到列表中,然后必須在依賴中聲明Maven或者Ivy聲明的文件。
repositories {
//maven倉庫
mavenCentral()
}
dependencies {
//maven文件
compile 'com.google.guava:guava:11.0.2'
}
android {
...
}
注意:mavenCentral()是指定倉庫URL的簡單方法。Gradle支持遠程和本地倉庫。
3. 多項目設(shè)置
Gradle項目也可以通過使用多項目配置依賴于其它Gradle項目。多項目配置的實現(xiàn)通常是在一個根項目路徑下將所有項目作為子文件夾包含進去。
例如,給定以下項目結(jié)構(gòu):
MyProject/
+ app/
+ libraries/
+ lib1/
+ lib2/
我們可以定義3個項目。Grand將會按照以下名字映射它們:
:app
:libraries:lib1
:libraries:lib2
每一個項目都擁有自己的build.gradle文件來聲明自己如何構(gòu)建。 另外,在根目錄下還有一個setting.gradle文件用于聲明所有項目。 這些文件的結(jié)構(gòu)如下:
MyProject/
| settings.gradle
+ app/
| build.gradle
+ libraries/
+ lib1/
| build.gradle
+ lib2/
| build.gradle
其中setting.gradle的內(nèi)容非常簡單,這里定義了哪一個文件夾才是真正的Gradle項目。
include ':app', ':libraries:lib1', ':libraries:lib2'
其中:app項目可能依賴于這些庫,這是通過以下依賴配置聲明的:
dependencies {
compile project(':libraries:lib1')
}