设为首页收藏本站
网站公告 | 这是第一条公告
     

 找回密码
 立即注册
缓存时间17 现在时间17 缓存数据 这个世界上很多东西会变,很多人会走。 但你在我心里,从开始的那一天,到现在从来没有变过。 我一直在等,等你的消息。

这个世界上很多东西会变,很多人会走。 但你在我心里,从开始的那一天,到现在从来没有变过。 我一直在等,等你的消息。 -- 盛夏的果实

查看: 363|回复: 1

Android多渠道打包配置方案

[复制链接]

  离线 

TA的专栏

  • 打卡等级:热心大叔
  • 打卡总天数:228
  • 打卡月天数:0
  • 打卡总奖励:3327
  • 最近打卡:2025-03-22 00:11:05
等级头衔

等級:晓枫资讯-上等兵

在线时间
0 小时

积分成就
威望
0
贡献
384
主题
363
精华
0
金钱
4497
积分
806
注册时间
2023-1-8
最后登录
2025-5-31

发表于 2025-2-13 17:12:16 | 显示全部楼层 |阅读模式
目录


  • 背景
  • Gradle脚本和Manifest文件配置
  • 代码调用

背景

多渠道打包,顾名思义就是用来区分同一个软件,在不同渠道上的释放版本。
这个手机上大型app几乎是必配置的一个项,给不同型号的手机所用的apk会做一些细微的区别。像笔者使用酷安社区比较多,在官网下载的酷安apk界面顶部有软件管理功能,在其他手机厂的应用商店里下载的酷安就没有这个功能。
目前我们有需求是要一套软件代码库多个项目共同使用,针对不同的项目打包不同的渠道apk,现学记录一下。

Gradle脚本和Manifest文件配置

不同渠道的apk既然要做细微的功能上的区分,就需要在代码里能拿到一个类似键值对的标志位。并且能够全局调用。首先我们需要在app级的gradle文件里配置不同的channel名称。
其中flavorDimensions和productFlavors中的维度名称需要一一对应。随便写一个"default"即可。
  1. defaultConfig {

  2.     xxxx = xxxx

  3.     flavorDimensions.add("default")  
  4. }
复制代码
gradle.kts语法与Groovy略有不同,要添加自己配置的东西一般是使用create,register之类的关键字,不熟悉配置的可以先试试。
不同渠道包的域里,我们可以区分很多参数值,像这里我是配置了不同渠道使用不同平台的签名。
  1. productFlavors {
  2.         create("cheetah") {
  3.             dimension = "default"
  4.             signingConfig = signingConfigs.getByName("cheetah")
  5.             manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel"
  6.         }
  7.         create("redfin") {
  8.             dimension = "default"
  9.             signingConfig = signingConfigs.getByName("aaos")
  10.             manifestPlaceholders["CHANNEL_VALUE"] = "redfin_channel"
  11.         }
  12. }
复制代码
为了可以设置成自己想要的键值对,建议在Manifest清单文件里设置一组元数据,在打包时让Gradle去赋值它。结合上下两段代码,我们在Manifest里的一组元数据,key设为CHANNEL,value为引用型的变量CHANNEL_VALUE,在Gradle渠道配置里,我们使用:
  1. manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel"
复制代码
来为其赋值。
  1.    <meta-data
  2.             android:name="CHANNEL"
  3.             android:value="${CHANNEL_VALUE}" />
复制代码
打包时,可以通过判断flavor的名称,来输出不同的apk名字。
  1.     android.applicationVariants.configureEach {
  2.         outputs.all {
  3.             if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {
  4.                 if (flavorName == "redfin") {
  5.                     this.outputFileName = "RedfinChannel_V${versionName}.apk"
  6.                 } else if (flavorName == "cheetah") {
  7.                     this.outputFileName = "CheetahChannel_V${versionName}.apk"
  8.                 }
  9.             }
  10.         }
  11.     }
复制代码
代码调用

全局性的打包配置完毕后,我们如何在代码里去使用区分不同渠道呢。
这里也有两种方法来获取,一种是直接拿取Gradle脚本里创建时的渠道名,直接通过BuildConfig类的FLAVOR字段来获取;一种是拿取我们在Manifest里设置的元数据的value值,操作稍复杂一些。具体代码如下:
  1. object FlavorConfig {

  2.     const val REDFIN = "redfin"
  3.     const val CHEETAH = "cheetah"

  4.     private var manifestMetaData = ""
  5.     private var gradleData = ""

  6.     init {
  7.         val appInfo = appContext.packageManager.getApplicationInfo(
  8.             appContext.packageName,
  9.             PackageManager.GET_META_DATA
  10.         )
  11.         manifestMetaData = appInfo.metaData.getString("CHANNEL") as String
  12.         gradleData = BuildConfig.FLAVOR
  13.     }

  14.     fun getMetaDataOne() = manifestMetaData.apply {
  15.         infoLog("metaData value: $this")
  16.     }

  17.     fun getMeatDataTwo() = gradleData.apply {
  18.         infoLog("gradle metaData value: $this")
  19.     }
  20. }
复制代码
到此这篇关于Android多渠道打包配置方案的文章就介绍到这了,更多相关Android打包配置内容请搜索晓枫资讯以前的文章或继续浏览下面的相关文章希望大家以后多多支持晓枫资讯!

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
晓枫资讯-科技资讯社区-免责声明
免责声明:以上内容为本网站转自其它媒体,相关信息仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同其观点或证实其内容的真实性。
      1、注册用户在本社区发表、转载的任何作品仅代表其个人观点,不代表本社区认同其观点。
      2、管理员及版主有权在不事先通知或不经作者准许的情况下删除其在本社区所发表的文章。
      3、本社区的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,举报反馈:点击这里给我发消息进行删除处理。
      4、本社区一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
      5、以上声明内容的最终解释权归《晓枫资讯-科技资讯社区》所有。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~

  离线 

TA的专栏

  • 打卡等级:无名新人
  • 打卡总天数:1
  • 打卡月天数:0
  • 打卡总奖励:18
  • 最近打卡:2025-04-16 14:55:04
等级头衔

等級:晓枫资讯-列兵

在线时间
0 小时

积分成就
威望
0
贡献
0
主题
0
精华
0
金钱
31
积分
6
注册时间
2024-1-24
最后登录
2025-4-16

发表于 2025-4-15 20:09:34 | 显示全部楼层
感谢楼主,顶。
http://bbs.yzwlo.com 晓枫资讯--游戏IT新闻资讯~~~
严禁发布广告,淫秽、色情、赌博、暴力、凶杀、恐怖、间谍及其他违反国家法律法规的内容。!晓枫资讯-社区
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

1楼
2楼

手机版|晓枫资讯--科技资讯社区 本站已运行

CopyRight © 2022-2025 晓枫资讯--科技资讯社区 ( BBS.yzwlo.com ) . All Rights Reserved .

晓枫资讯--科技资讯社区

本站内容由用户自主分享和转载自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。

如有侵权、违反国家法律政策行为,请联系我们,我们会第一时间及时清除和处理! 举报反馈邮箱:点击这里给我发消息

Powered by Discuz! X3.5

快速回复 返回顶部 返回列表