Manifest屬性
通過SDL可以配置一下manifest選項(xiàng):
- minSdkVersion
- targetSdkVersion
- versionName
- applicationId (有效的包名 -- 更多詳情請(qǐng)查閱ApplicationId 對(duì)比 PackageName)
- package Name for the test application
- Instrumentation test runner
在android元素中的defaultConfig元素中定義所有配置剪况。
在構(gòu)建文件中定義的強(qiáng)大之處在于它是動(dòng)態(tài)的。 例如,可以從一個(gè)文件中或者其它自定義的邏輯代碼中讀取版本信息:
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()將會(huì)自動(dòng)調(diào)用defaultConfig.getVersionName()方法蜡豹,你自定義的getVersionName()方法就被取代掉了。
Build Types構(gòu)建類型
默認(rèn)情況下蛮放,Android Plugin會(huì)自動(dòng)給項(xiàng)目設(shè)置同時(shí)構(gòu)建應(yīng)用程序的debug和release版本。 兩個(gè)版本之間的不同主要圍繞著能否在一個(gè)安全設(shè)備上調(diào)試走搁,以及APK如何簽名独柑。
Debug版本可采用默認(rèn)簽名。Release版本在構(gòu)建過程中沒有簽名私植,需要稍后再簽名。
這些配置通過一個(gè)BuildType對(duì)象來配置车酣。默認(rèn)情況下曲稼,這兩個(gè)實(shí)例都會(huì)被創(chuàng)建,分別是一個(gè)debug版本和一個(gè)release版本湖员。
Android plugin允許像創(chuàng)建其他構(gòu)建類型一樣定制debug和release實(shí)例贫悄。這需要在buildTypes的DSL容器中配置:
android {
buildTypes {
debug {
applicationIdSuffix ".debug"
}
jnidebug.initWith(buildTypes.debug)
jnidebug {
packageNameSuffix ".jnidebug"
jnidebugBuild true
}
}
}
以上代碼片段實(shí)現(xiàn)了以下功能:
- 配置默認(rèn)的debug構(gòu)建類型
- 將debug版本的包名設(shè)置為.debug以便能夠同時(shí)在一臺(tái)設(shè)備上安裝debug和release版本的apk。
- 創(chuàng)建了一個(gè)名為jnidebug的新構(gòu)建類型娘摔,并且這個(gè)構(gòu)建類型是debug構(gòu)建類型的一個(gè)副本窄坦。
- 繼續(xù)配置jnidebug構(gòu)建類型,允許使用JNI組件凳寺,并且也添加了不一樣的包名后綴鸭津。
創(chuàng)建一個(gè)新的構(gòu)建類型就是簡(jiǎn)單的在buildType標(biāo)簽下添加一個(gè)新的元素,并且可以使用initWith()或者直接使用閉包來配置它肠缨。
簽名配置
對(duì)一個(gè)應(yīng)用程序簽名需要以下:
- 一個(gè)Keystory
- 一個(gè)keystory密碼
- 一個(gè)key的別名
- 一個(gè)key的密碼
- 存儲(chǔ)類型
位置逆趋,鍵名,兩個(gè)密碼晒奕,還有存儲(chǔ)類型一起形成了簽名配置闻书。
默認(rèn)情況下,debug被配置成使用一個(gè)debug keystory脑慧。 debug keystory使用了默認(rèn)的密碼和默認(rèn)key及默認(rèn)的key密碼魄眉。 debug keystory的位置在$HOME/.android/debug.keystroe,如果對(duì)應(yīng)位置不存在這個(gè)文件將會(huì)自動(dòng)創(chuàng)建一個(gè)闷袒。
可以創(chuàng)建其他配置或者自定義內(nèi)建的默認(rèn)配置坑律。通過signingConfigs這個(gè)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的路徑到項(xiàng)目的根目錄下。在這個(gè)例子中霜运,這將自動(dòng)影響其他使用到debug構(gòu)建類型的構(gòu)建類型脾歇。
這里也創(chuàng)建了一個(gè)新的Single Config(簽名配置)和一個(gè)使用這個(gè)新簽名配置的新的Build Type(構(gòu)建類型)。
注意:只有默認(rèn)路徑下的debug keystory不存在時(shí)會(huì)被自動(dòng)創(chuàng)建淘捡。更改debug keystory的路徑并不會(huì)自動(dòng)在新路徑下創(chuàng)建debug keystory藕各。如果創(chuàng)建一個(gè)新的不同名字的SignConfig,但是使用默認(rèn)的debug keystore路徑來創(chuàng)建一個(gè)非默認(rèn)的名字的SigningConing焦除,那么還是會(huì)在默認(rèn)路徑下創(chuàng)建debug keystory激况。換句話說,會(huì)不會(huì)自動(dòng)創(chuàng)建是根據(jù)keystory的路徑來判斷,而不是配置的名稱乌逐。
依賴關(guān)系
Gradle項(xiàng)目可以依賴于其它組件竭讳。這些組件可以是外部二進(jìn)制包,或者是其它的Gradle項(xiàng)目浙踢。
1. 本地二進(jìn)制包依賴
可以在compile配置中绢慢,添加對(duì)本地jar包或aar包的依賴
dependencies {
compile files('libs/foo.jar')
}
android {
...
}
注意:這個(gè)dependencies DSL標(biāo)簽是標(biāo)準(zhǔn)Gradle API中的一部分,所以它不屬于android標(biāo)簽
這個(gè)compile配置將被用于編譯main application洛波。它里面的所有東西都被會(huì)被添加到編譯的classpath中胰舆,同時(shí)也會(huì)被打包進(jìn)最終的APK。 以下是添加依賴時(shí)可能用到的其它一些配置選項(xiàng):
- compile main application(主module)蹬挤。
- androidTestCompile test application(測(cè)試module)缚窿。
- debugCompile debug Build Type(debug類型的編譯)。
- releaseCompile release Build Type(發(fā)布類型的編譯)焰扳。
APK默認(rèn)配置了兩個(gè)或兩個(gè)以上的編譯配置:compile和< buildtype >Compile. 創(chuàng)建一個(gè)新的Build Type將會(huì)自動(dòng)創(chuàng)建一個(gè)基于它名字的新配置倦零。
2. 遠(yuǎn)程二進(jìn)制包依賴
Gradle支持從Maven或者Ivy倉庫中拉取文件。首先必須將倉庫添加到列表中吨悍,然后必須在依賴中聲明Maven或者Ivy聲明的文件扫茅。
repositories {
//maven倉庫
mavenCentral()
}
dependencies {
//maven文件
compile 'com.google.guava:guava:11.0.2'
}
android {
...
}
注意:mavenCentral()是指定倉庫URL的簡(jiǎn)單方法。Gradle支持遠(yuǎn)程和本地倉庫畜份。
3. 多項(xiàng)目設(shè)置
Gradle項(xiàng)目也可以通過使用多項(xiàng)目配置依賴于其它Gradle項(xiàng)目诞帐。多項(xiàng)目配置的實(shí)現(xiàn)通常是在一個(gè)根項(xiàng)目路徑下將所有項(xiàng)目作為子文件夾包含進(jìn)去。
例如爆雹,給定以下項(xiàng)目結(jié)構(gòu):
MyProject/
+ app/
+ libraries/
+ lib1/
+ lib2/
我們可以定義3個(gè)項(xiàng)目停蕉。Grand將會(huì)按照以下名字映射它們:
:app
:libraries:lib1
:libraries:lib2
每一個(gè)項(xiàng)目都擁有自己的build.gradle文件來聲明自己如何構(gòu)建。 另外钙态,在根目錄下還有一個(gè)setting.gradle文件用于聲明所有項(xiàng)目慧起。 這些文件的結(jié)構(gòu)如下:
MyProject/
| settings.gradle
+ app/
| build.gradle
+ libraries/
+ lib1/
| build.gradle
+ lib2/
| build.gradle
其中setting.gradle的內(nèi)容非常簡(jiǎn)單,這里定義了哪一個(gè)文件夾才是真正的Gradle項(xiàng)目册倒。
include ':app', ':libraries:lib1', ':libraries:lib2'
其中:app項(xiàng)目可能依賴于這些庫蚓挤,這是通過以下依賴配置聲明的:
dependencies {
compile project(':libraries:lib1')
}