脚本之家

电脑版
提示:原网页已由神马搜索转码, 内容由www.jb51.net提供.
您的位置:首页软件编程Android→ Android打包配置

Android多渠道打包配置方案

  更新时间:2024年06月06日 08:22:51  作者:Stephen10086 
多渠道打包,顾名思义就是用来区分同一个软件,在不同渠道上的释放版本,目前我们有需求是要一套软件代码库多个项目共同使用,针对不同的项目打包不同的渠道apk,现学记录一下,需要的朋友跟着小编一起来学习吧

背景

多渠道打包,顾名思义就是用来区分同一个软件,在不同渠道上的释放版本。

这个手机上大型app几乎是必配置的一个项,给不同型号的手机所用的apk会做一些细微的区别。像笔者使用酷安社区比较多,在官网下载的酷安apk界面顶部有软件管理功能,在其他手机厂的应用商店里下载的酷安就没有这个功能。

目前我们有需求是要一套软件代码库多个项目共同使用,针对不同的项目打包不同的渠道apk,现学记录一下。

Gradle脚本和Manifest文件配置

不同渠道的apk既然要做细微的功能上的区分,就需要在代码里能拿到一个类似键值对的标志位。并且能够全局调用。首先我们需要在app级的gradle文件里配置不同的channel名称。

其中flavorDimensions和productFlavors中的维度名称需要一一对应。随便写一个"default"即可。

defaultConfig {
xxxx = xxxx
flavorDimensions.add("default")
}

gradle.kts语法与Groovy略有不同,要添加自己配置的东西一般是使用create,register之类的关键字,不熟悉配置的可以先试试。

不同渠道包的域里,我们可以区分很多参数值,像这里我是配置了不同渠道使用不同平台的签名。

 productFlavors {
create("cheetah") {
dimension = "default"
signingConfig = signingConfigs.getByName("cheetah")
manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel"
}
create("redfin") {
dimension = "default"
signingConfig = signingConfigs.getByName("aaos")
manifestPlaceholders["CHANNEL_VALUE"] = "redfin_channel"
}
}

为了可以设置成自己想要的键值对,建议在Manifest清单文件里设置一组元数据,在打包时让Gradle去赋值它。结合上下两段代码,我们在Manifest里的一组元数据,key设为CHANNEL,value为引用型的变量CHANNEL_VALUE,在Gradle渠道配置里,我们使用:

manifestPlaceholders["CHANNEL_VALUE"] = "cheetah_channel"

来为其赋值。

   <meta-data
android:name="CHANNEL"
android:value="${CHANNEL_VALUE}" />

打包时,可以通过判断flavor的名称,来输出不同的apk名字。

    android.applicationVariants.configureEach {
outputs.all {
if (this is com.android.build.gradle.internal.api.ApkVariantOutputImpl) {
if (flavorName == "redfin") {
this.outputFileName = "RedfinChannel_V${versionName}.apk"
} else if (flavorName == "cheetah") {
this.outputFileName = "CheetahChannel_V${versionName}.apk"
}
}
}
}

代码调用

全局性的打包配置完毕后,我们如何在代码里去使用区分不同渠道呢。

这里也有两种方法来获取,一种是直接拿取Gradle脚本里创建时的渠道名,直接通过BuildConfig类的FLAVOR字段来获取;一种是拿取我们在Manifest里设置的元数据的value值,操作稍复杂一些。具体代码如下:

object FlavorConfig {
const val REDFIN = "redfin"
const val CHEETAH = "cheetah"
private var manifestMetaData = ""
private var gradleData = ""
init {
val appInfo = appContext.packageManager.getApplicationInfo(
appContext.packageName,
PackageManager.GET_META_DATA
)
manifestMetaData = appInfo.metaData.getString("CHANNEL") as String
gradleData = BuildConfig.FLAVOR
}
fun getMetaDataOne() = manifestMetaData.apply {
infoLog("metaData value: $this")
}
fun getMeatDataTwo() = gradleData.apply {
infoLog("gradle metaData value: $this")
}
}

到此这篇关于Android多渠道打包配置方案的文章就介绍到这了,更多相关Android打包配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

    • 这篇文章主要介绍了详解Android app自动更新总结(已适配9.0),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2019-04-04
    • 这篇文章主要介绍了Android编程设定activity进入和退出效果的方法,简单分析了Android Activity进入与退出效果的实现原理及相关属性设置技巧,需要的朋友可以参考下
      2017-07-07
    • 这篇文章主要给大家介绍了关于利用Flutter实现可以缩放拖拽的图片的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用Flutter具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
      2019-06-06
    • 这篇文章主要介绍了Android LayoutInflater.inflate()详解及分析的相关资料,需要的朋友可以参考下
      2017-01-01
    • 这篇文章主要为大家详细介绍了Android实现上下菜单双向滑动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2020-10-10
    • 这篇文章主要介绍了教你一文搞懂Kotlin中的Jvm注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
      2020-10-10
    • 这篇文章主要介绍了Android中的广播(BroadCast)详细介绍,本文讲解了什么是广播、广播有什么用、实现广播、动态注册方式、配置文件方式等内容,需要的朋友可以参考下
      2015-03-03
    • 这篇文章介绍了android杂记:C++文件的添加log方法,有需要的朋友可以参考一下
      2013-09-09
    • Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。接下来本文通过实例代码给大家讲解Android中使用Kotlin实现一个简单的登录界面,一起看看吧
      2017-09-09
    • 这篇文章主要为大家详细介绍了Android ViewFlipper的简单使用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
      2017-06-06

    最新评论