最近在做一个学校缴费终端应用,给不同的学校使用。先前是通过切换代码分支来管理的,实在是繁琐和痛苦,仅仅是需要更改不同的常量、包名等,主体代码逻辑功能基本不变。所以了解了多渠道包的使用,在这里做个记录。
一、通过 productFlavors 配置不同的渠道
以下为完整的实际项目中使用的渠道配置
flavorDimensions "jiaofei"
//配置多版本的apk
productFlavors {
xiandianzi {
dimension 'jiaofei'
buildConfigField "String", "titleName", '\"大学一缴学费\"'
buildConfigField "String", "schoolName", '\"大学一\"'
buildConfigField "String", "serviceIp", '\"10.10.14.200\"'
buildConfigField "int", "servicePort", '5577'
applicationId "cn.boc.xian.daxueyi"
manifestPlaceholders = [APP_NAME:"大学一缴学费"]
}
yixueyuan {
dimension 'jiaofei'
versionCode 5
versionName "2.1.1"
buildConfigField "String", "titleName", '\"大学二缴学费\"'
buildConfigField "String", "schoolName", '\"大学二\"'
buildConfigField "String", "serviceIp", '\"10.10.14.199\"'
buildConfigField "int", "servicePort", '5577'
applicationId "cn.boc.xian.daxueer"
manifestPlaceholders = [APP_NAME:"大学二缴学费"]
}
}
applicationVariants.all { variant ->
variant.outputs.all {
def apkName = "${productFlavors[0].name}-jiaofei-v${defaultConfig.versionName}-${variant.buildType.name}.apk"
outputFileName = apkName
}
}
二、manifestPlaceholders的使用
渠道信息的配置
productFlavors {
xiandianzi {
manifestPlaceholders = [APP_NAME:"大学一缴学费"]
}
yixueyuan {
manifestPlaceholders = [APP_NAME:"大学二缴学费"]
}
}
对应调用
在配置文件中使用
三、buildConfigField 使用
productFlavors {
xiandianzi {
dimension 'jiaofei'
buildConfigField "String", "titleName", '\"大学一缴学费\"'
}
yixueyuan {
dimension 'jiaofei'
buildConfigField "String", "titleName", '\"大学二缴学费\"'
}
}
编译生成的文件
编译生成的文件
对应代码里面调用
代码里面调用
四、替换资源文件
每个渠道的资源布局 主题样式,启动页图标、应用名称可能 不一样,我的做法如下:
在 main 的同级目录下创建以渠道名命名的文件夹,然后创建资源文件(路径要与 main 中的一致),然后打包的时候 gradle 就会自己替换或者合并资源。
渠道资源
gradle android下面添加资源配置
sourceSets {
xiandianzi { res.srcDirs = ['src/xiandianzi/res', 'src/xiandianzi/res/'] }
yixueyuan { res.srcDirs = ['src/yixueyuan/res', 'src/yixueyuan/res/'] }
main {
jniLibs.srcDirs = ['libs']
res.srcDirs = ['src/main/res', 'src/main/res/']
}
}
五、打包和调试编译安装不同的渠道
选取不同的渠道,Gradle 会自动编译指定渠道
编译不同的渠道
网友评论