软件编程
位置:首页>> 软件编程>> Android编程>> Android多渠道打包神器ProductFlavor详解

Android多渠道打包神器ProductFlavor详解

作者:撩得Android一次心动  发布时间:2021-06-11 19:48:22 

标签:Android,ProductFlavor,多渠道打包

一.什么是多渠道打包

在不同的应用市场可能有不同的统计需求,需要为每个应用市场发布一个安装包,这里就引出了Android的多渠道打包。在安装包中添加不同的标识,以此区分各个渠道,方便统计app在市场的各种下载量、用户数等关键数据。

多渠道打包的原理就是为我们每个平台或者市场发布的apk指定一个唯一的标识符。通过这个标识符就可以知道被下载的apk是在哪个平台市场下载的。

1.多版本

基于buildTypes

(1) debug:调试版本,无混淆

(2) release:发布版本,有混淆、压缩

2.多环境

基于productFlavors

(1)develop:开发环境,开发和自测时使用

(2)check:测试环境,克隆一份生产环境的配置,在这里测试通过后,再发布到生产环境。之所以没命名为test是因为在gradle编译时:ProductFlavornamescannotstartwith'test'

(3)product:生产环境,正式提供服务的。

3.多渠道

基于Android新的应用签名方案APKSignatureSchemev2中的APKSigningBlock区块

我这里使用的是美团封装的Walle库。使用Walle库请确保你的AndroidGradle插件版本在2.2.0以上。

为什么不直接使用productFlavors来打包多渠道?因为productFlavors打多渠道包太慢了,打30个包差不多十几分钟,无法忍受!

为什么不使用美团之前基于META-INF进行渠道标识的方案?因为Android7.0之后的这种黑科技已经失效了!

二.多渠道打包的方式(ProductFlavor&&多渠道打包插件)

1.ProductFlavor

Android基于 Gradle开发的一个插件里面的产品配置构建“变种”制作渠道包。

Gradle开发的插件是哪里来的???

1.首先项目有两层build.gradle文件:

  • build.gradle(本项目名称) 最外层的build.gradle文件

  • build.gradle(:app) app目录下build.gradle文件

在顶层build.gradle文件中添加依赖

Android多渠道打包神器ProductFlavor详解

使用Gradle插件:

Android多渠道打包神器ProductFlavor详解

上面是导入多个插件使用plugins;

plugins {
    id 'com.android.application'
}

导入单个可以使用

apply plugin:'com.android.application'

就这样我们就可以在 app目录下build.gradle文件中的android节点使用ProductFlavor。

1.1 如何是使用ProductFlavor

flavorDimensions "default"
   //方式1:(适用于多数据)
   //读取channel.txt渠道文件 创建flavor
   file('channel.txt').readLines().each {
       channel->
           productFlavors.create(channel,{
               dimension "default"
               //替换AndroidManifest中的值
               manifestPlaceholders=[channel1:channel]
           })
   }
   //方式2:(比较常用:适用于少量)
   productFlavors{
           ywj{
           }
           wyw{
           }
       }

访问的文件如图所示:

Android多渠道打包神器ProductFlavor详解

他会生成多少个“变种”呢???

是根据你的productFlavors中的个数与buildTypes中的类型个数(一般是release+debug)

Android多渠道打包神器ProductFlavor详解

我这里没有写debug但是下面生成了对应的“变种”:注意 buildType 类型的debug是默认的,不写也会默认存在。

这个按字母排序的。

Android多渠道打包神器ProductFlavor详解

1.2 如何是使用ProductFlavor加载apk包

使用Gradle工具栏下的Tasks中的build中的工具加载

Android多渠道打包神器ProductFlavor详解

点击assembleRelesase试试水,看看发生了什么?

Android多渠道打包神器ProductFlavor详解

1.3 该如何获取不同渠道包的信息

</activity>
       <meta-data android:name="CHANNEL_VALUE" android:value="${channel1}"/>
   </application>
</manifest>

再不同的apk包中可以访问不同的信息。关于怎么访问AndroidManifest.xml里的数据会在以后进行学习!!!

1.4 使用ProductFlavor加载apk包的优缺点

优点:官方,可配置性高

缺点:每个渠道包需要执行完整的构建流程,非常的慢!!!

2.多渠道打包插件

这个方法很好的弥补了上一个打包方式的缺点。此时要多加一个依赖。底下目前展示的第二个依赖不可用,不过不要紧。你可以使用美团(walle)、腾讯(VasDolly)...等的多渠道打包插件

Android多渠道打包神器ProductFlavor详解

//引入插件
apply plugin: 'com.enjoy.channel'
channel{
    //基准包
    baseApk "${buildDir}/outputs/apk/release/app-release.apk"
    //输出目录
    outDir "${buildDir}/outputs/channel"
    //渠道信息
    channelFile "${projectDir}/channel.txt"
}

Android多渠道打包神器ProductFlavor详解

Android多渠道打包神器ProductFlavor详解

如图所示:根据上面设置的路径输出。并且生成一个基准包后,输出不同渠道包的速度变快了许多。当你再在channel.txt文件中再多加些数据,一样也会很快的输出。

来源:https://blog.csdn.net/indeedes/article/details/124061446

0
投稿

猜你喜欢

  • TransactionScope是.Net Framework 2.0滞后,新增了一个名称空间。它的用途是为数据库访问提供了一个“轻量级”[
  • 排序算法介绍排序也称排序算法(Sort Algorithm),排序是将一组数据,依指定的顺序进行排列的过程。排序的分类:1) 内部排序:指将
  • RabbitMQ作为AMQP的代表性产品,在项目中大量使用。结合现在主流的spring boot,极大简化了开发过程中所涉及到的消息通信问题
  • 简介今天给大家带来的是使用ShareSDK实现应用分享的功能。下面我们先看下效果图。效果图步骤 1. 获取AppKey访问mob官网http
  • 大家都知道为了防止我们的网站被有些人和黑客恶意攻击,比如我们网站的注册页面,如果我们在用户注册的时候不加上一个验证码框的话,别人就可以写一个
  • 对于大规模乱序的数组,插入排序很慢,因为它只会交换相邻的元素,因此元素只能一点一点地从数组地一段移动到另一端。希尔排序改进了插入排序,交换不
  • Java 编程语言中时间的处理类有 Date类与 Calendar类。目前官方不推荐使用 Date类,因为其不利于国际化;而是推荐使用 Ca
  • ClasspathResource路径问题前言在项目中工程以springboot jar形式发布,跟之前容器比少了一个解压目录,这个过程中出
  • 准备工作工具:idea+jdk8技术要求:java基础语法编码环节首先,我们得先确定下来,用什么数据来模拟栈的操作。由于是一个一个的元素放入
  • android线程消息机制主要由Handler,Looper,Message和MessageQuene四个部分组成。平常在开发中,我们常用来
  • Result 类型是许多编程语言中处理错误的常用方式,包括 C# 的 dotNext 库。在本文中,我们将通过例子回顾 C# 中 using
  • 添加注解效果事务演示注解我们经常会用到,或者在jdk源码中也会看到,例如: @Deprecated以及我们在spring或者spr
  • 一、什么是锁擦除锁擦除是指虚拟机即时编译器(JIT)在运行时,对一些代码上要求同步,但是被检测到不可能存在共享数据竞争的锁进行擦除。锁擦除的
  • 一.MyBatis简介1)MyBatis 是一款优秀的持久层框架2)MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结
  • Android中的Service是用于后台服务的,当应用程序被挂到后台的时候,问了保证应用某些组件仍然可以工作而引入了Service这个概念
  • JavaScript 中需要创建函数的话,有两种方法:函数声明、函数表达式,各自写法如下:// 方法一:函数声明function foo()
  • Android M(6.0)API 23后加入了权限请求设置,APP需要使用某些权限需要主动申请。权限分为3类,一组是Normal权限,无需
  • 前言最常用的对字符串操作的类有三个,分别是String,StringBuilder,StringBuffer,下面将会详细的说说这三个类..
  • Java中的static关键字可以用于修饰变量、方法、代码块和类,还可以与import关键字联合使用,使用的方式不同赋予了static关键字
  • 本文介绍了springboot前后台数据交互的示例代码,分享给大家,具体如下:1.在路径中传递数据,比如对某个数据的id:123前台发送:格
手机版 软件编程 asp之家 www.aspxhome.com