最近在做一个学校缴费终端应用,给不同的学校使用。先前是通过切换代码分支来管理的,实在是繁琐和痛苦,仅仅是需要更改不同的常量、包名等,主体代码逻辑功能基本不变。所以了解了多渠道包的使用,在这里做个记录。

一、通过 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:"大学二缴学费"]

}

}

对应调用

f9ed7613ce51

在配置文件中使用

三、buildConfigField 使用

productFlavors {

xiandianzi {

dimension 'jiaofei'

buildConfigField "String", "titleName", '\"大学一缴学费\"'

}

yixueyuan {

dimension 'jiaofei'

buildConfigField "String", "titleName", '\"大学二缴学费\"'

}

}

编译生成的文件

f9ed7613ce51

编译生成的文件

对应代码里面调用

f9ed7613ce51

代码里面调用

四、替换资源文件

每个渠道的资源布局 主题样式,启动页图标、应用名称可能 不一样,我的做法如下:

在 main 的同级目录下创建以渠道名命名的文件夹,然后创建资源文件(路径要与 main 中的一致),然后打包的时候 gradle 就会自己替换或者合并资源。

f9ed7613ce51

渠道资源

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 会自动编译指定渠道

f9ed7613ce51

编译不同的渠道

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐