当前位置: 首页 > news >正文

【Android】使用productFlavors构建多个变体

项目需求

在一个设备上安装两个一样的程序app

需求解决

我们知道每一个app都有一个包名的,如果一个app在Android设备上安装之后,再安装这个app的话会进行覆盖安装,因为他们两个的包名是一样的,默认是一个app。

但是我们现在需要将这一个app多次安装在一个Android设备上,那需要怎么实现这个需求呢?

实现这个需求的话,需要修改包名,我们可以使用productFlavors进行变体的构建和打包,这样的话,我们就可以将同一个app打包成不同包名的apk文件,这样就可以在一个Android设备上进行多次安装了。


Product Flavors允许开发者创建不同的应用版本,每个版本可以有不同的应用ID、版本名称、资源等。常见的用法包括:

  • 免费版与付费版
  • 不同功能集
  • 地区版本

每个变体都可以有不同的配置,包括代码、资源和依赖项。

例如在这个项目里面
我们可以构建两个资源文件目录
在这里插入图片描述
在和【res】同级别的目录下创建【res-flavors】文件夹,在这个文件下面创建两个文件夹【compass】和【wireless】两个资源文件夹,在里面放我们需要区别的文字、图片等资源,但是要注意,资源对应的名字是要相同的,资源可以不同。

接下来我们去【build.gradle】文件里面去构建我们的变体。

android {compileSdkVersion 24buildToolsVersion "24.0.1"defaultConfig {applicationId "com.example" //原包名minSdkVersion 19targetSdkVersion 24versionCode 1versionName "v" + releaseTime()}compileOptions {encoding 'GBK'}lintOptions {abortOnError false}buildTypes {release {minifyEnabled falseproguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'}}applicationVariants.all { variant ->variant.outputs.all { output ->def flavorName = variant.flavorNameif (flavorName == "compass") {outputFileName = "xx校正仪.apk" // 为 compass flavor 设置文件名} else if (flavorName == "wireless") {outputFileName = "xxxxxxxx校验仪.apk" // 为 wireless flavor 设置文件名} else {outputFileName = "xx校正.apk"}}}flavorDimensions "default"productFlavors {compass {applicationId "com.ble.compass"versionName "version compass 1.0"}wireless {applicationId "com.ble.wireless"versionName "version wireless 1.0"}}sourceSets {compass.res.srcDirs = ['src/main/res-flavors/compass']wireless.res.srcDirs = ['src/main/res-flavors/wireless']}}static def releaseTime() {return new Date().format("yyyMMdd_HHmm", TimeZone.getTimeZone("GMT+08:00"));
}

在这里面

   sourceSets {compass.res.srcDirs = ['src/main/res-flavors/compass']wireless.res.srcDirs = ['src/main/res-flavors/wireless']}

是资源文件目录,指向的位置就是我们之前创建的文件地址。

    productFlavors {compass {applicationId "com.ble.compass"versionName "version compass 1.0"}wireless {applicationId "com.ble.wireless"versionName "version wireless 1.0"}}

这两个就是我们创建的两个变体,里面设置了相应的变体的包名和版本名字。

    applicationVariants.all { variant ->variant.outputs.all { output ->def flavorName = variant.flavorNameif (flavorName == "compass") {outputFileName = "xx校正仪.apk" // 为 compass flavor 设置文件名} else if (flavorName == "wireless") {outputFileName = "xxxxxxxx校验仪.apk" // 为 wireless flavor 设置文件名} else {outputFileName = "xx校正.apk"}}}

这一部分就是在输出我们构建好的apk文件的名字,这样我们在进行构建apk文件之后,就会根据相应的变体显示相应的名字。

在这里插入图片描述

通过这样设置之后,【build】构建一下,然后我们在进行apk文件打包的时候就可以选择相应的版本了。
在这里插入图片描述

http://www.lryc.cn/news/478716.html

相关文章:

  • ubuntu 22.04 防火墙 ufw
  • MySQL压缩版安装详细图解
  • elementui中的新增弹窗在新增数据成功后再新增 发现数据无法清除解决方法
  • 软件开发项目管理:实现目标的实用指南
  • Jenkins面试整理-如何在 Jenkins 中进行并行构建?
  • DPDK(F-Stack) 实现UDP通信
  • 基于ExtendSim的库存与订购实验
  • 操作系统个人八股文总结
  • scala set训练
  • 【d63】【Java】【力扣】141.训练计划III
  • 【Linux】- 权限(2)
  • 如何设置内网IP的端口映射到公网
  • Matplotlib | 条形图中的每个条形(patch)设置标签数据的方法
  • 机器学习3_支持向量机_线性不可分——MOOC
  • bash: git: command not found
  • 大模型LLama3!!!Ollama下载、部署和应用(保姆级详细教程)
  • ReactPress系列—NestJS 服务端开发流程简介
  • Maven 下载配置 详解 我的学习笔记
  • 【学术精选】SCI期刊《Electronics》特刊“New Challenges in Remote Sensing Image Processing“
  • 卷积神经网络——pytorch与paddle实现卷积神经网络
  • 云平台虚拟机运维笔记整理,使用libvirt创建和管理虚拟机,以及开启虚拟机嵌套,虚拟磁盘扩容,物理磁盘扩容等等
  • 最佳实践:如何实现函数参数之间的TS类型相依赖和自动推断
  • Linux基础指令1
  • 软件设计师:排序算法总结
  • 「Mac畅玩鸿蒙与硬件25」UI互动应用篇2 - 计时器应用实现
  • 计算机专业开题报告写法,该怎么写好?
  • Vue(JavaScript)读取csv表格并求某一列之和(大浮点数处理: decimal.js)
  • Pyraformer复现心得
  • 成绩排序c++
  • 人脸检测之MTCNN算法网络结构