Loading... > 一般我们在制作多渠道的时候通常是针对productFlavors属性的处理。 ### 如何分渠道? 1. 针对```build.gradle```中的```productFlavors```属性进行处理。 ```xml productFlavors { quality { dimension "version" buildConfigField('String', 'TYPE', '"Phone"') buildConfigField('boolean', 'NEED_PUSH', 'true') manifestPlaceholders = [ app_icon : "@mipmap/icon", app_name : "@string/app_name" ] } tb { dimension "version" buildConfigField('String', 'TYPE', '"Phone"') buildConfigField('boolean', 'NEED_PUSH', 'true') manifestPlaceholders = [ app_icon : "@mipmap/icon_tb", app_name : "@string/app_name_tb" ] } dabieshan { dimension "version" buildConfigField('String', 'TYPE', '"Phone"') buildConfigField('boolean', 'NEED_PUSH', 'true') manifestPlaceholders = [ app_icon : "@mipmap/icon", app_name : "@string/app_name" ] } xulong { dimension "version" buildConfigField('String', 'TYPE', '"Phone"') buildConfigField('boolean', 'NEED_PUSH', 'true') manifestPlaceholders = [ app_icon : "@mipmap/icon", app_name : "@string/app_name" ] } } ``` 可以看到,分完渠道后,我们可以针对不同的渠道构建不同的icon或者APP名称等,当然这只是在各个渠道区别较少的时候,在各渠道变化较大时就需要分包方式处理了。 ### 如何根据渠道输出不同的apk?(基于Android studio4.1.1) 1. 目前来说,渠道定义好了后,在编译打包后,会自动构建相应渠道的文件夹,类似下面的  但是如果没有处理的话,打包出来的apk名称都是一样的 2. 各个渠道特定的apk名称 ```xml applicationVariants.all { variant -> if (variant.buildType.name == 'release') { variant.outputs.all { // outputFileName = "${productFlavors.name}_app_${defaultConfig.versionName}.apk" //[quality]_app_v1.0.28_20210104.apk 带中括号 outputFileName = "${variant.productFlavors[0].name}_app_${defaultConfig.versionName}.apk" } }else{ variant.outputs.all { outputFileName = "${variant.productFlavors[0].name}_app_debug_${defaultConfig.versionName}.apk" } } } ``` 在```build.gradle```的```android```节点下创建```applicationVariants```来输出apk ```defaultConfig.versionName```对应我们自己定义的versionName ```variant.productFlavors[0].name``` 对应我们定义的渠道名 尝试过使用```{productFlavors.name```,但是输出的是带中括号的字符比如```[quality]```,显然不太符合我们的要求。 最后我们输出的apk名称就是类似```quality_app_v1.0.28_20210104.apk```了。 最后修改:2021 年 07 月 22 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 0 如果觉得我的文章对你有用,请随意赞赏
1 条评论
酷|´・ω・)ノ