Android Studio 中使用 Gradle 配置多渠道打包 配置不同的渠道名称 配置不同的App名称 配置不同的Logo

废话

三种操作都是可以混合一起用的,本来也不是很难的事情,为了方便分别理解,这里我就分开处理了。

如果需要将打包出来的apk的名称自动命名成指定格式,也可以进行配置,我这里没这个需求,所以这里就不讨论了。

另外,我的配置里面,还通过buildTypes{debug{} release{}}的方式配置了debug版本和release版本,这个配置与下方的配置是不冲突且可并行的,这里就不贴出来了,有需要的可以自行搜一下。

核心是Gradle中的三个方法

defaultConfig - 默认配置

productFlavors 

productFlavors.all

一、多渠道打包

Gradle的android{}内加上配置代码


    //名字随便起
    flavorDimensions "channel"

    //这里的每一个方法都会分别调用下方的productFlavors.all方法
    productFlavors {
        guanwang {}
        yingyongbao {}
        baidu {}
        qihu360 {}
        huawei {}
        oppo {}
        vivo {}
        ali {}
        xiaomi {}
        meizu {}
    }

    productFlavors.all {
        dimension "channel"
        //这里用上面的方法名称作为渠道名,自动替换友盟渠道名称
        manifestPlaceholders = [UMENG_CHANNEL: name]
        //       AndroidManifest.xml中友盟的配置的值需要改成${UMENG_CHANNEL}
        //        <meta-data
        //            android:name="UMENG_CHANNEL"
        //            android:value="${UMENG_CHANNEL}" />
    }

如果还需要执行复杂一点的操作,例如将当前apk的打包时间,赋值到AndroidManifest.xml的某个配置中,可以使用下方配置代码


    flavorDimensions "time"

    productFlavors {
        guanwang {}
    }

    productFlavors.all {
        dimension "time"
        //获取当前时间
        def today = Calendar.getInstance()
        //转成自定义日期格式
        def dateString = today.time.format('yyyy-MM-dd')
        //执行替换逻辑
        manifestPlaceholders = [UMENG_CHANNEL: name, BUILD_DATE: dateString]
        //       AndroidManifest.xml中的配置为:
        //            <meta-data
        //            android:name="BUILD_DATE"
        //            android:value="${BUILD_DATE}" />
    }

二、不同渠道打包成不同的APP名称

App的名称主要是在AndroidManifest.xml中配置对应string.xml文件内的值,所以需要使用不同的渠道使用不同App名称,只需要用resValue将默认名称替换成不同的名称即可。

    //AndroidManifest.xml中的application标签设置的值如下
    //android:label="@string/app_name"


    //配置默认名称,将app_name字符串替换成app_name_default
    defaultConfig {
        resValue "string", "app_name", "@string/app_name_default"
    }

    flavorDimensions "channel"

    productFlavors {
        //默认名称
        guanwang {}
        //新名称1
        name1 {
            resValue "string", "app_name", "@string/app_name_name1"
        }
        //新名称2
        name {
            resValue "string", "app_name", "@string/app_name_name2"
        }
    }

    productFlavors.all {
        dimension "channel"
        manifestPlaceholders = [UMENG_CHANNEL: name]
    }

除了上方配置代码之外,需要将string.xml文件里面的app_name删掉,然后加上app_name_default、app_name_name1、app_name_name2这三个配置,可以配置更多,按需配置即可,如果有多种语言配置方案,如values、values-zh、value-en、value-jp等,同等道理,将这些文件夹里面的string.xml的app_name字段去掉,然后加上后面这三个。例如:

<!--    <string name="app_name">Master Of Music Editing</string>-->
    
    <string name="app_name_default">Default Name</string>
    <string name="app_name_name1">Name1</string>
    <string name="app_name_name2">Name2</string>

三、不同渠道打包成不同的logo

和替换名称的方式一样,通过resValue替换资源。例如原本设置的Logo是:android:icon="@drawable/ic_launcher",那么需要将drawable的各个版本(drawable-xxhdpi、drawable-xxxhdpi等)路径下的ic_launcher删掉,如果是放在mipmap文件夹下,也是同样处理。然后在drawable或者mipmap中导入新的logo的文件,如:ic_launcher_default.png和ic_launcher_new.png,android:icon中的配置不变,使用下方配置代码即可:


    defaultConfig {
        resValue "drawable", "ic_launcher", "@drawable/ic_launcher_default"
    }

    flavorDimensions "channel"

    productFlavors {
        guanwang {}
        newLogo {
            resValue "drawable", "ic_launcher", "@mipmap/ic_launcher_new"
        }
    }

    productFlavors.all {
        dimension "channel"
        manifestPlaceholders = [UMENG_CHANNEL: name]
    }

最后,使用方法

调试

配置完成之后,点击顶部菜单栏:Build->Select Build Variants,在弹出的框框内,可以选择需要调试的渠道和版本,选完之后点击运行执行的局势该渠道的包。

打包

点击顶部菜单栏:Build->Generate Signed Bundle or APK

下一步,配置好你的签名文件

下一步,配置好你的输出路径,然后选择你需要打包的渠道(可多选)

点Finish之后慢慢等即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/1969.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

晶晨S905D3切换到外部phy方法

文章目录 前言一、s905d3的以太网驱动的理解二、修改设备树注意前言 随着芯片的国产化推荐,越来越多的国产芯片被大家重视起来,但是国产的一些稍微高性能的芯片资料太少,这里把调实phy的流程记录一下,不做太多的理论分析 一、s905d3的以太网驱动的理解 如果拿到sdk后,默…

ESP32设备驱动-ADXL335加速计驱动

ADXL335加速计驱动 文章目录 ADXL335加速计驱动1、ADXL335介绍2、硬件准备3、软件准备4、驱动实现1、ADXL335介绍 ADXL335 是一款小型、薄型、低功耗、完整的 3 轴加速度计,具有信号调理电压输出。 该产品以 3 g 的最小满量程测量加速度。它可以测量倾斜传感应用中的静态重力…

JAVASE/封装、继承、多态

博客制作不易&#xff0c;欢迎各位点赞&#x1f44d;收藏⭐关注前言在学习面向对象编程语言时&#xff0c;封装、继承、多态则是我们必须学习和使用的三大特征。本文通过举例&#xff0c;说明了该三大特征的基本权限特点。一、访问限定符范围private默认权限protectedpublic同一…

springcloud3 nacos,sentinel,ribbon,openfegin等整合案例4[fallback+blockhandler完美整合]

一 说明 1.1 结论 SentinelResource(value "fb",fallback "handlerFallback") //fallback只负责业务异常 SentinelResource(value "fb",blockHandler "blockHandler") //blockHandler只负责sentinel控制台配置违规 假设fallbac…

国内版的ChatGPT弯道超车的机会在哪里?

前言 从去年11月最后一天ChatGPT诞生&#xff0c;截至目前&#xff0c;ChatGPT的热度可谓是爆了。众所周知&#xff0c;ChatGPT是美国“开放人工智能研究中心”研发的聊天机器人程序&#xff0c;它是一个人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过学习和理解人…

Android性能优化的底层逻辑

前言 性能优化仿佛成了每个程序员开发的必经之路&#xff0c;要想出人头地&#xff0c;与众不同&#xff0c;你还真需要下点功夫去研究Android的性能优化&#xff0c;比如说&#xff0c;从优化应用启动、UI加载、再到内存、CPU、GPU、IO、还有耗电等等&#xff0c;当你展开一个…

Docker部署springcloud项目(清晰明了)

概述 最近在想做个cloud项目,gitee上找了个模板项目&#xff0c;后端使用到 Nacos、Gateway、Security等技术&#xff0c;需要到 Docker 容器部署&#xff0c;在此总结一下&#xff0c;若有不足之处&#xff0c;望大佬们可以指出。 什么是 Docker Docker 使用 Google 公司推…

【8】核心易中期刊推荐——人工智能与机器人

🚀🚀🚀NEW!!!核心易中期刊推荐栏目来啦 ~ 📚🍀 核心期刊在国内的应用范围非常广,核心期刊发表论文是国内很多作者晋升的硬性要求,并且在国内属于顶尖论文发表,具有很高的学术价值。在中文核心目录体系中,权威代表有CSSCI、CSCD和北大核心。其中,中文期刊的数…

【C++】Google编码风格学习

Google规范线上地址&#xff1a;https://zh-google-styleguide.readthedocs.io/en/latest/ 文章目录1. 头文件2. 作用域3. 类4. 函数5. 其他C特性6. 命名约定7. 注释8. 格式1. 头文件 每个cpp/cc文件都对应一个h头文件&#xff0c;除单元测试代码和只包含main()的文件外。 所…

100天精通Python(可视化篇)——第80天:matplotlib绘制不同种类炫酷柱状图代码实战(簇状、堆积、横向、百分比、3D柱状图)

文章目录0. 专栏导读1. 普通柱状图2. 簇状柱形图3. 堆积柱形图4. 横向柱状图5. 横向双向柱状图6. 百分比堆积柱形图7. 3D柱形图8. 3D堆积柱形图9. 3D百分比堆积柱形图0. 专栏导读 &#x1f3c6;&#x1f3c6;作者介绍&#xff1a;Python领域优质创作者、CSDN/华为云/阿里云/掘金…

Python读写EXCEL文件常用方法大全

python读写excel的方式有很多&#xff0c;不同的模块在读写的讲法上稍有区别&#xff0c;这里我主要介绍几个常用的方式。 用xlrd和xlwt进行excel读写&#xff1b;用openpyxl进行excel读写&#xff1b;用pandas进行excel读写&#xff1b; 一、数据准备 为了方便演示&#xff…

基于深度学习的动物识别系统(YOLOv5清新界面版,Python代码)

摘要&#xff1a;动物识别系统用于识别和统计常见动物数量&#xff0c;通过深度学习技术检测日常几种动物图像识别&#xff0c;支持图片、视频和摄像头画面等形式。在介绍算法原理的同时&#xff0c;给出Python的实现代码、训练数据集以及PyQt的UI界面。动物识别系统主要用于常…

C++ , STL常用容器

STLSTL初识STL的诞生STL基本概念STL六大组件STL中的容器、算法、迭代器容器算法迭代器初识STL — 常用容器string容器vector容器deque容器stack容器queue容器list容器set/ multiset 容器map/ multimap 容器C 模板. STL初识 STL的诞生 长久以来&#xff0c;软件界一直希望建立…

最好用的Markdown编辑器:MWeb Pro mac

MWeb pro Mac中文版是一款非常好用的Markdown编辑器和博客生成工具&#xff0c;支持语法高亮&#xff0c;预览&#xff0c;Fenced code blocks和代码高亮&#xff0c;Math ML支持&#xff0c;具有导出HTML/PDF&#xff0c;自定编辑器主题&#xff0c;字数统计&#xff0c;大纲视…

DRAM功能介绍与基础概念

目录 ROM与RAM DRAM定义与形态 DRAM存储单元 DRAM架构和工作流程 存储器是计算机系统中的记忆设备&#xff0c;用来存储程序和各种数据信息&#xff0c;存储器的存储介质主要采用半导体器件和磁性材料。接下来简单介绍存储器的主要分类。 按存储介质可以分类为半导体存储器…

2023年Android现代开发

2023年现代Android开发 下面与大家分享如何构建具有2023年最新趋势的Android应用程序。 Android是什么&#xff1f; Android 是一种基于 Linux 内核并由 Google 开发的开源操作系统。它用于各种设备&#xff0c;包括智能手机、平板电脑、电视和智能手表。 目前&#xff0c…

JVM-栈详解二

前言 虚拟机栈概述 虚拟机栈出现的背景 由于跨平台性的设计&#xff0c;Java的指令都是根据栈来设计的。不同平台CPU架构不同&#xff0c;所以不能设计为基于寄存器的。 优点是跨平台&#xff0c;指令集小&#xff0c;编译器容易实现&#xff0c;缺点是性能下降&#xff0c;实…

【Java项目】完善基于Java+MySQL+Tomcat+maven+Servlet的博客系统

目录一、准备工作二、引入依赖三、创建必要的目录四、编写代码五/六、打包部署(直接基于 smart tomcat)七、验证代码正式编写服务器代码编写数据库相关的操作代码创建数据库/表结构(数据库设计)数据库代码封装数据库操作封装针对数据的增删改查&#xff01;博客列表页约定前后端…

【论文阅读总结】用于目标检测的特征金字塔网络(FPN)

Feature Pyramid Networks for Object Detection1.摘要2.引言2.1 低级特征对于检测小物体很重要2.2 算法目标3. 文献综述3.1 Hand-engineered features and early neural networks3.2 Deep ConvNet object detectors3.3 Methods using multiple layers4.Feature Pyramid Networ…

嵌入式:BSP的理解

BSP概念总结BSP定义BSP的特点BSP的主要工作BSP在嵌入式系统和Windowsx系统中的不同BSP和PC机主板上的BIOS区别BSP与 HAL关系嵌入式计算机系统主要由 硬件层&#xff0c;中间层&#xff0c;系统软件层和应用软件层四层组成。硬件层&#xff1a;包含CPU&#xff0c;存储器(SDRAM&…