最近在项目中遇到apk定制化打包需求,所以就研究多渠道打包。
build.gradle 中部分配置代码如下
defaultConfig{
applicationId "com.hz.epollbook"
minSdkVersion 16
targetSdkVersion 27
versionCode 1
versionName "1.0.1.58"
// 设置MultiDex可用
multiDexEnabled true
//必须要保证所有的flavor 都属于同一个维度 否则会报错All flavors must now belong to a named flavor dimension
flavorDimensions "default"
}
productFlavors{
flavors_local{}
flavors_qld{}
flavors_qld_demo{}
flavors_qld_test{}
}
//打包输出配置
android.applicationVariants.all{ variant ->
variant.outputs.all{
outputFileName= "${variant.productFlavors[0].name}_v${variant.versionName}.apk"
}
}
buildTypes{
release{
buildConfigField"Boolean","DEBUGGER","false"
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
signingConfig signingConfigs.votingsystem
}
debug{
buildConfigField"Boolean","DEBUGGER","false"
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'),'proguard-rules.pro'
signingConfig signingConfigs.votingsystem
}
}
sourceSets{
main{
assets.srcDirs = ['src/main/assets']
}
flavors_local{
assets.srcDirs = ['src/local/assets']
}
flavors_qld{
assets.srcDirs = ['src/qld/assets']
}
flavors_qld_demo{
assets.srcDirs = ['src/qld_demo/assets']
}
flavors_qld_test{
assets.srcDirs = ['src/qld_test/assets']
}
}
项目结构目录中
imageps:不同flavors中的assets 存放不同的文件,相同的可以存放在main中。打包时会将所有打到一起。
多渠道打包命令
打全部包: gradle assemble
打全部 Debug 包: gradle assembleDebug ,可以简写为 gradle aD ,前提是没有相同缩写的参数
打全部 Release 包: gradle assembleRelease,可以简写为 gradle aR
打指定 flavor 包: gradle assemble(flavor)(Debug|Release)
打包完成后安装(设备上没有安装该 apk ,否则会失败,而且只能指定 flavor ,不然也会失败): gradle install(flavor)(Debug|Release)
打包前先 clean 一下(在测试的时候很必要,如果不 clean 的话,可能会导致某些小修改不会及时打入新包): gradle clean assembleDebug
网友评论