Gradle之通过配置productFlavors实现多版本差异化打包

2023-10-21 07:10

本文主要是介绍Gradle之通过配置productFlavors实现多版本差异化打包,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 基础知识

1.1 productFlavors

gradle中有一个功能叫做变体「productflavors」,这是来为APP设置不同的打包配置,以实现多渠道打包的一种方案。

android {productFlavors {baidu {}_360 {}yingyongbao {}}

1.2 buildTypes

gradle中打包编译类型「buildTypes」,主要区分:debug和release类型。

android {buildTypes {debug {}release {}}

1.3 结果

(1)这样的话最后打包的时候就可以生成9种包:

· baiduDebug
· baiduRelease
· _360Debug
· _360Release
· yingyongbaoDebug
· yingyongbaoRelease

(2)在Android Studio左下角可以找到并在每次build的时候选择不同种类的包:
这里写图片描述

2 实现分渠道配置

2.1 配置java变量

(1)在gradle中有一个功能叫「buildConfigField」,可以在系统的buildconfig中设置一个值。如下:

public final class BuildConfig {public static final boolean DEBUG = Boolean.parseBoolean("true");public static final String APPLICATION_ID = "org.guan.demo";public static final String BUILD_TYPE = "debug";public static final String FLAVOR = "baidu";public static final int VERSION_CODE = 1;public static final String VERSION_NAME = "1.0.0";
}

(3)使用

Logger.DEBUG = BuildConfig.DEBUG;
public static final String flavor = BuildConfig.FLAVOR;

2.2 配置manifest变量

(1)很多第三方sdk喜欢在manifest中配置appkey等,可以在gradle中使用:

 manifestPlaceholders = [UMENG_CHANNEL: "0",UMENG_APPKEY : "123456789"]

(2)然后在manifest中配置:

<meta-dataandroid:name="UMENG_CHANNEL"android:value="${UMENG_CHANNEL}" />
<meta-dataandroid:name="UMENG_APPKEY"android:value="${UMENG_APPKEY}" />

(3)配置包名
  在gradle中包名用applicationId代表。

defaultConfig {applicationId "com.guan.demo"
}yingyongbao {applicationId "com.guan.demo.majia"		
}

(4)配置版本号

yingyongbao {versionCode 1versionName "1.0.0"		
}

3 实战

apply plugin: 'com.android.application'android {compileSdkVersion 25buildToolsVersion '25.0.2'dexOptions { javaMaxHeapSize "4g" }sourceSets {main {jniLibs.srcDirs = ['libs'] //打包so库}}defaultConfig {minSdkVersion 15 applicationId "com.guan.demo"multiDexEnabled truemanifestPlaceholders = [CHANNEL_NAME: "baidu", EXECUTE_FLAG: "true", EXECUTE_ADV_FLAG: "true"]dependencies {debugCompile files('libs/AppOffer_2.4.3_newsensenetworks.jar')debugCompile files('libs/Baidu_MobAds_SDK.jar')}ndk {// 设置支持的 SO 库构架abiFilters 'armeabi', 'armeabi-v7a', 'x86'// , 'arm64-v8a', 'x86_64', 'mips', 'mips64'}}buildTypes {debug {buildConfigField "boolean", "LOG_DEBUG", "true"}release {buildConfigField "boolean", "LOG_DEBUG", "false"}}productFlavors {baidu {buildConfigField "boolean", "yingyongbao", "false"manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"1",UMENG_SECRET:"123456", EXECUTE_FLAG: "true"]dependencies {baiduCompile files('libs/AppOffer_2.4.3_newsensenetworks.jar')baiduCompile files('libs/Baidu_MobAds_SDK.jar')}}_360 {buildConfigField "boolean", "yingyongbao", "false"manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"2",UMENG_SECRET:"123456", EXECUTE_FLAG: "false"]dependencies {provided files('libs/AppOffer_2.4.3_newsensenetworks.jar')provided files('libs/Baidu_MobAds_SDK.jar')}}yingyongbao {buildConfigField "boolean", "yingyongbao", "true"versionCode 100versionName "1.0.0"applicationId "com.guan.demo.majia"manifestPlaceholders = [CHANNEL_NAME: "umeng", UMENG_KEY:"2",UMENG_SECRET:"123456", EXECUTE_FLAG: "false"]dependencies {provided files('libs/AppOffer_2.4.3_newsensenetworks.jar')provided files('libs/Baidu_MobAds_SDK.jar')}}}
}dependencies {compile project(':Downloader')compile files('libs/umeng_social_sdk.jar')
}repositories {mavenCentral()jcenter()flatDir {dirs 'libs'}
}

4 创建统一文件夹

(1)切换到Project模式的目录
在这里插入图片描述
(2)在src目录下新建vest包:
在这里插入图片描述
(3)再新建以下包和文件:
在这里插入图片描述
(4)调试时点击 Build Variant 选择自己需要的版本即可正常引用:
在这里插入图片描述

5 更高级的实战:不同的APP名称/图标/UI等

这里写图片描述

6 其他配置

6.1 清单文件里引用了相同的资源文件解决方法

在马甲渠道包下,在application里的标签里加入tools:replace="android:name"替换了主包渠道的Application。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"><applicationandroid:name="com.reader.ReaderVestApplication"tools:replace="android:name"><activityandroid:name="com.reader.activity.MainReaderVestActivity"android:alwaysRetainTaskState="true"android:configChanges="orientation|keyboardHidden|screenSize"android:hardwareAccelerated="true"android:launchMode="singleTop"android:screenOrientation="portrait"android:windowSoftInputMode="adjustPan" /></application>
</manifest>

参考链接:将依赖库中清单文件,引用的依赖库的清单文件中的,冲突部分删除掉

7 学习链接

Android 通过配置 productFlavors 实现多版本差异化打包

彻底弄明白Android开发Gradle相关配置

这篇关于Gradle之通过配置productFlavors实现多版本差异化打包的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/252756

相关文章

Spring StateMachine实现状态机使用示例详解

《SpringStateMachine实现状态机使用示例详解》本文介绍SpringStateMachine实现状态机的步骤,包括依赖导入、枚举定义、状态转移规则配置、上下文管理及服务调用示例,重点解... 目录什么是状态机使用示例什么是状态机状态机是计算机科学中的​​核心建模工具​​,用于描述对象在其生命

Spring Boot 结合 WxJava 实现文章上传微信公众号草稿箱与群发

《SpringBoot结合WxJava实现文章上传微信公众号草稿箱与群发》本文将详细介绍如何使用SpringBoot框架结合WxJava开发工具包,实现文章上传到微信公众号草稿箱以及群发功能,... 目录一、项目环境准备1.1 开发环境1.2 微信公众号准备二、Spring Boot 项目搭建2.1 创建

IntelliJ IDEA2025创建SpringBoot项目的实现步骤

《IntelliJIDEA2025创建SpringBoot项目的实现步骤》本文主要介绍了IntelliJIDEA2025创建SpringBoot项目的实现步骤,文中通过示例代码介绍的非常详细,对大家... 目录一、创建 Spring Boot 项目1. 新建项目2. 基础配置3. 选择依赖4. 生成项目5.

nginx 负载均衡配置及如何解决重复登录问题

《nginx负载均衡配置及如何解决重复登录问题》文章详解Nginx源码安装与Docker部署,介绍四层/七层代理区别及负载均衡策略,通过ip_hash解决重复登录问题,对nginx负载均衡配置及如何... 目录一:源码安装:1.配置编译参数2.编译3.编译安装 二,四层代理和七层代理区别1.二者混合使用举例

Java JDK1.8 安装和环境配置教程详解

《JavaJDK1.8安装和环境配置教程详解》文章简要介绍了JDK1.8的安装流程,包括官网下载对应系统版本、安装时选择非系统盘路径、配置JAVA_HOME、CLASSPATH和Path环境变量,... 目录1.下载JDK2.安装JDK3.配置环境变量4.检验JDK官网下载地址:Java Downloads

Linux下进程的CPU配置与线程绑定过程

《Linux下进程的CPU配置与线程绑定过程》本文介绍Linux系统中基于进程和线程的CPU配置方法,通过taskset命令和pthread库调整亲和力,将进程/线程绑定到特定CPU核心以优化资源分配... 目录1 基于进程的CPU配置1.1 对CPU亲和力的配置1.2 绑定进程到指定CPU核上运行2 基于

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux下删除乱码文件和目录的实现方式

《Linux下删除乱码文件和目录的实现方式》:本文主要介绍Linux下删除乱码文件和目录的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下删除乱码文件和目录方法1方法2总结Linux下删除乱码文件和目录方法1使用ls -i命令找到文件或目录

Spring Boot spring-boot-maven-plugin 参数配置详解(最新推荐)

《SpringBootspring-boot-maven-plugin参数配置详解(最新推荐)》文章介绍了SpringBootMaven插件的5个核心目标(repackage、run、start... 目录一 spring-boot-maven-plugin 插件的5个Goals二 应用场景1 重新打包应用

SpringBoot+EasyExcel实现自定义复杂样式导入导出

《SpringBoot+EasyExcel实现自定义复杂样式导入导出》这篇文章主要为大家详细介绍了SpringBoot如何结果EasyExcel实现自定义复杂样式导入导出功能,文中的示例代码讲解详细,... 目录安装处理自定义导出复杂场景1、列不固定,动态列2、动态下拉3、自定义锁定行/列,添加密码4、合并