热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

记录一次Android多渠道打包

背景我有一个需求,要求是同一份代码要打两个包出来,只不过包名、logo、名称、签名、部分代码不一样,我是这样做的。第一步app的bu


背景

我有一个需求,要求是同一份代码要打两个包出来,只不过包名、logo、名称、签名、部分代码不一样,我是这样做的。


第一步

app的build.gradle中

android {
compileSdkVersion 29
buildToolsVersion "29.0.3"
defaultConfig {
applicationId "xxx"
minSdkVersion 21
targetSdkVersion 30
versionCode 5
versionName "1.0.4"//
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
//注意这个属性,当然设置在这个闭包的外面也是可以的。不设置会报错All flavors must now belong to a named flavor dimension
flavorDimensions "default"
}
signingConfigs {
//默认的渠道,这里签名的数据配置在项目里,见下图
debug {
// debug和release用的统一的jks避免重新新增MD5
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
release {
storeFile file(KEY_PATH)
storePassword KEY_PASS
keyAlias ALIAS_NAME
keyPassword ALIAS_PASS
}
//新增的渠道签名
debugxiamen {
// debug和release用的统一的jks避免重新新增MD5
keyAlias 'xxxx'
keyPassword 'xxx'
storeFile file('../doc/xxx.jks')
storePassword 'xxx'
}
releasexiamen {
keyAlias 'xxxx'
keyPassword 'xxx'
storeFile file('../doc/xxx.jks')
storePassword 'xxx'
}
}
productFlavors {
//输出两个变体,即最终要打包的两个渠道
hengqin {
//可以单独指定某个渠道的包名,会覆盖manifest里面的packgename,也可以用这样配置 applicationIdSuffix ".demo"
applicationId "com.ly.checkticket4hengqin"
}
xiamen {
applicationId "com.ly.traffic.transport"
}
}
buildTypes {
release {
minifyEnabled true
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
//productFlavors的闭包必须放到这个之前,否则肯定报错,没定义先使用嘛
//还有很多文章上说在不同渠道上只能指定debug签名,relase签名只能用同一个,我这边测试了一下,非也!
productFlavors.hengqin.signingConfig signingConfigs.release
//解决 The application could not be installed: INSTALL_PARSE_FAILED_NO_CERTIFICATES
productFlavors.xiamen.signingConfig signingConfigs.releasexiamen
}
}
sourceSets {
main {
jniLibs.srcDirs = ['libs']
}
}
dataBinding {
enabled = true
}
}

签名配置
图1


第二步

配置不同的logo、appname
在这里插入图片描述


第三步

代码里抹平渠道区分:

when(BuildConfig.FLAVOR){
"xiamen"->{}
"hengqin"->{}
}

第四步

打包
在这里插入图片描述
在这里插入图片描述


本文地址:https://blog.csdn.net/u012346890/article/details/112536211



推荐阅读
  • Scala 实现 UTF-8 编码属性文件读取与克隆
    本文介绍如何使用 Scala 以 UTF-8 编码方式读取属性文件,并实现属性文件的克隆功能。通过这种方式,可以确保配置文件在多线程环境下的一致性和高效性。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 使用 Azure Service Principal 和 Microsoft Graph API 获取 AAD 用户列表
    本文介绍了一段通用代码示例,该代码不仅能够操作 Azure Active Directory (AAD),还可以通过 Azure Service Principal 的授权访问和管理 Azure 订阅资源。Azure 的架构可以分为两个层级:AAD 和 Subscription。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 本文介绍了如何通过 Maven 依赖引入 SQLiteJDBC 和 HikariCP 包,从而在 Java 应用中高效地连接和操作 SQLite 数据库。文章提供了详细的代码示例,并解释了每个步骤的实现细节。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 本文介绍了如何在C#中启动一个应用程序,并通过枚举窗口来获取其主窗口句柄。当使用Process类启动程序时,我们通常只能获得进程的句柄,而主窗口句柄可能为0。因此,我们需要使用API函数和回调机制来准确获取主窗口句柄。 ... [详细]
  • 本文详细介绍了如何在 Spring Boot 应用中通过 @PropertySource 注解读取非默认配置文件,包括配置文件的创建、映射类的设计以及确保 Spring 容器能够正确加载这些配置的方法。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文介绍如何使用阿里云的fastjson库解析包含时间戳、IP地址和参数等信息的JSON格式文本,并进行数据处理和保存。 ... [详细]
  • andr ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
author-avatar
比熊--悉尼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有