一、構(gòu)建變體
1. BuildType
1.1默認(rèn)buildType
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
// release版本中設(shè)置了開(kāi)啟混淆冗尤,并且定義了混淆文件的位置
默認(rèn)情況下還有一個(gè)debug版本燎含,我們也可以添加對(duì)debug版本的一些設(shè)置
buildTypes {
debug {
minifyEnabled false
}
}
// debug版本中關(guān)閉混淆
1.2自定義buildType
除了默認(rèn)的構(gòu)建版本尼夺,還可以創(chuàng)建自己的構(gòu)建版本
buildTypes {
custom.initWith(buildTypes.debug)
custom {
applicationIdSuffix ".custom"
versionNameSuffix "-custom" }}
// custom使用initWith方法復(fù)制debug版本并創(chuàng)建了一個(gè)新的構(gòu)建版本越锈,相當(dāng)于繼承了debug版本
// custom版本中添加applicationId后綴,添加versionName后綴
其他屬性的設(shè)置可以查看buildType的文檔可训。
2. ProductFlavor
productFlavor用來(lái)為app創(chuàng)建不同的版本昌妹,如:免費(fèi)版和付費(fèi)版、不同應(yīng)用市場(chǎng)的渠道包等握截。
創(chuàng)建方式:
android {
productFlavors {
free { // 免費(fèi)版
}
paid { // 付費(fèi)版
}
wandoujia { // 豌豆莢應(yīng)用市場(chǎng)渠道包
}
myapp { // 應(yīng)用寶應(yīng)用市場(chǎng)渠道包
}
}
}
每一個(gè)生產(chǎn)版本都可以設(shè)置applicationId飞崖、versionCode、versionName等許多屬性川蒙,具體可以查看productFlavors的文檔蚜厉。
3. BuildVariant
buildType和productFlavor相結(jié)合长已,組成了構(gòu)建變體畜眨。每創(chuàng)建一個(gè)buildType或productFlavor昼牛,都會(huì)同時(shí)創(chuàng)建相應(yīng)的變體。例如:創(chuàng)建一個(gè)myapp的productFlavor時(shí)康聂,將會(huì)創(chuàng)建出兩個(gè)相應(yīng)的變體:myappDebug和myappRelease贰健。
二、依賴管理
依賴管理的具體細(xì)節(jié)這里不多說(shuō)明恬汁,想要詳細(xì)了解的可以查看依賴管理的文檔伶椿。
1. 添加依賴
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.2.1'
}
2. 依賴配置
Gradle中的依賴會(huì)以配置(configurations)分組,一個(gè)配置就是一組依賴氓侧,稱之為依賴配置
android插件定義了一些標(biāo)準(zhǔn)的配置脊另,如:
- compile:編譯項(xiàng)目代碼所需要的依賴。
- debugCompile:debug版本編譯項(xiàng)目代碼所需要的依賴约巷,對(duì)應(yīng)buildTypes中的debug偎痛。默認(rèn)情況下,包含了編譯時(shí)產(chǎn)生的類文件独郎,以及編譯時(shí)期所需要的依賴踩麦。
- releaseCompile:release版本編譯項(xiàng)目代碼所需要的依賴,對(duì)應(yīng)buildType中的release氓癌。默認(rèn)情況下谓谦,包含了編譯時(shí)產(chǎn)生的類文件,以及編譯時(shí)期所需要的依賴贪婉。
- testCompile:編譯測(cè)試代碼時(shí)所需要的依賴反粥。默認(rèn)情況下,包含了編譯時(shí)產(chǎn)生的類文件疲迂,以及編譯時(shí)期所需要的依賴星压。
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.android.support:appcompat-v7:23.3.0'
testCompile 'junit:junit:4.12'
}
三、多版本不同依賴配置
1. 需求
接入廣告是目前許多APP的盈利方式鬼譬,但是隨著不同平臺(tái)的的廣告SDK越來(lái)越多娜膘,各大應(yīng)用市場(chǎng)也開(kāi)始加強(qiáng)這方面的監(jiān)管了,有的應(yīng)用市場(chǎng)禁止接入廣告SDK优质,有的應(yīng)用市場(chǎng)則要求只能接入特定的廣告SDK竣贪,所以就需要針對(duì)不同市場(chǎng)生成含有不同廣告SDK的應(yīng)用版本。
2. 實(shí)現(xiàn)
2.1 原理
- 每創(chuàng)建一個(gè)BuildType就會(huì)自動(dòng)創(chuàng)建一個(gè)基于它名字的編譯依賴配置<buildType>Compile
- 每創(chuàng)建一個(gè)ProductFlavor就會(huì)自動(dòng)創(chuàng)建一個(gè)基于它名字的編譯依賴配置<productFlavor>Compile
- 所以利用這個(gè)特點(diǎn)巩螃,可以為不同的版本設(shè)置不同的依賴配置演怎。
2.2 依賴配置語(yǔ)法說(shuō)明
- 依賴jar文件
dependencies{
// 依賴某個(gè)jar文件
complie files('libs/xxx.jar')
// 依賴libs目錄下所有以.jar結(jié)尾的文件
complie fileTree(dir: 'libs', include: ['*.jar'])
// 依賴libs目錄下除了xxx.jar以外的所有以.jar結(jié)尾的文件
complie fileTree(dir: 'libs', exclude: ['xxx.jar'], include: ['*.jar'])
}
- 依賴module
dependencies{
// 依賴本地項(xiàng)目工程下的某個(gè)module
complie project(:'moduleName')
}
- 依賴aar文件
android {
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies{
// 依賴名字為xxx后綴為aar的文件
compile (name: 'xxx', ext: 'aar')
}
- 依賴遠(yuǎn)程庫(kù)
dependencies{
// 格式為:group:name:version
compile 'com.android.support:appcompat-v7:23.3.0'
// 排除某個(gè)傳遞依賴
compile 'com.android.support:appcompat-v7:23.3.0'{
exclude group: 'xxx', module: 'xxx'
}
2.3 依賴jar包實(shí)現(xiàn)不同依賴
默認(rèn)不依賴任何廣告sdk
在build.gradle中添加ProductFlavor,如下:
android {
productFlavors {
baidu { // 百度應(yīng)用市場(chǎng)
}
lenovo { // 聯(lián)想應(yīng)用市場(chǎng)
}
common { // 其他不監(jiān)管廣告市場(chǎng)
}
}
}
將所有廣告sdk的jar包統(tǒng)一添加前綴"ad_"避乏,在build.gradle中的dependencies下添加
dependencies{
// 默認(rèn)不添加廣告sdk
compile fileTree(dir: 'libs', excludes: ['ad_*.jar'], include: ['*.jar'])
// 百度市場(chǎng)添加百度廣告sdk
baiduCompile files(libs/ad_baidu_sdk.jar)
// 聯(lián)想應(yīng)用市場(chǎng)的包添加聯(lián)想廣告sdk
lenovoCompile files(libs/ad_lenovo_sdk.jar)
// 其他不監(jiān)管廣告應(yīng)用市場(chǎng)添加通用的廣告sdk
commonCompile files(libs/ad_common_sdk.jar)
}
配置完成后運(yùn)行g(shù)radle assembleRelease命令爷耀,就會(huì)生成各個(gè)市場(chǎng)的渠道包,并且含有不用的廣告sdk拍皮。
2.4 依賴遠(yuǎn)程庫(kù)實(shí)現(xiàn)不同依賴
- 方法一:默認(rèn)不依賴任何廣告sdk
在build.gradle中添加ProductFlavor歹叮,如下:
android {
productFlavors {
baidu { // 百度應(yīng)用市場(chǎng)
}
lenovo { // 聯(lián)想應(yīng)用市場(chǎng)
}
common { // 其他不監(jiān)管廣告市場(chǎng)
}
}
}
在build.gradle中的dependencies下添加
dependencies{
// 百度市場(chǎng)添加百度廣告sdk
baiduCompile "com.baidu:ad:1.0.0"
// 聯(lián)想應(yīng)用市場(chǎng)的包添加聯(lián)想廣告sdk
lenovoCompile "com.lenovo:ad:1.0.0"
// 其他不監(jiān)管廣告應(yīng)用市場(chǎng)添加通用的廣告sdk
commonCompile "com.common:ad:1.0.0"
}
- 方法二:默認(rèn)依賴通用廣告sdk
在build.gradle中添加ProductFlavor跑杭,如下:
android {
productFlavors {
baidu { // 百度應(yīng)用市場(chǎng)
}
lenovo { // 聯(lián)想應(yīng)用市場(chǎng)
}
huawei { // 華為應(yīng)用市場(chǎng)
}
}
}
在build.gradle中的dependencies下添加
dependencies{
// 默認(rèn)添加通用廣告sdk
compile "com.common:ad:1.0.0"
// 百度市場(chǎng)在默認(rèn)的compile中去掉通用廣告sdk
baiduCompile configurations.compile {
exclude(group: "com.common:ad:1.0.0", module: "ad")
}
// 百度市場(chǎng)添加百度廣告sdk
baiduCompile "com.baidu:ad:1.0.0"
// 聯(lián)想市場(chǎng)在默認(rèn)的compile中去掉通用廣告sdk
baiduCompile configurations.compile {
exclude(group: "com.common:ad:1.0.0", module: "ad")
}
// 聯(lián)想應(yīng)用市場(chǎng)的包添加聯(lián)想廣告sdk
lenovoCompile "com.lenovo:ad:1.0.0"
// 華為市場(chǎng)在默認(rèn)的compile中去掉通用廣告sdk
baiduCompile configurations.compile {
exclude(group: "com.common:ad:1.0.0", module: "ad")
}
}