??實(shí)際開發(fā)中我們經(jīng)常需要打一些馬甲包,馬甲包有不同的icon灰伟、appName、啟動(dòng)圖等等栏账。每次修改文件再打包費(fèi)時(shí)費(fèi)力,好在gradle給我們提供了一些替換資源甚至是代碼的方法挡爵。
??1.先看項(xiàng)目結(jié)構(gòu)〔杈椋可以看到在app目錄下面新建了channels文件夾,channels下面新建channel1闭翩、channel2文件夾作為我們要打包的馬甲包。
??2.再看channel1兑障、channel2下的文件目錄。java流译、res下的文件路徑要與main下的路徑完全一致。res下放置馬甲包所需要改變的資源先蒋,如icon、strings里面的app_name竞漾,以及其他想要改變的layout窥翩、color业岁、shape寇蚊、mipmap等笔时。
??重點(diǎn)來了,app目錄下的gradle文件配置前标。添加了productFlavors疗认、sourceSets兩個(gè)配置业稼。配置好gradle蚂蕴,重新rebuild一下項(xiàng)目。
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
defaultConfig {
applicationId "sample.gankers.com.gradlesample"
minSdkVersion 22
targetSdkVersion 26
versionCode 1
versionName "1.0"
flavorDimensions "versionCode"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
productFlavors {
channel1 {applicationId "sample.gankers.com.gradlesample.channel1"}
channel2 {applicationId "sample.gankers.com.gradlesample.channel2"}
productFlavors.all { flavor ->
flavor.manifestPlaceholders = [CHANNEL_VALUE: name]
}
}
sourceSets {
channel1 {
res.srcDirs = ['channels/channel1/res']
java.srcDirs = ['channels/channel1/java']
}
channel2 {
res.srcDirs = ['channels/channel2/res']
java.srcDirs = ['channels/channel2/java']
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'
androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}
??rebuild完成后,此時(shí)點(diǎn)擊Androidstudio右上角gradle按鈕進(jìn)行馬甲包打包引镊,如圖:
??由于本例代碼沒有配置簽名文件吃嘿,所以我只能打debug包兑燥。點(diǎn)擊assembleChannelDebug,等待帶包完成降瞳,會(huì)在build/output下生成所需馬甲包
??把生成的馬甲包安裝到手機(jī)可以看到圖標(biāo)挣饥、名字是不同的,并且因?yàn)樵O(shè)置了不同的applicationid汛聚,所以2個(gè)馬甲包可以同時(shí)存在短荐。
??為了驗(yàn)證馬甲包能否修改java代碼忍宋,我讓馬甲包1和2跳轉(zhuǎn)頁面代碼、布局有所
不同舵稠,如圖: