概述

多渠道对于android来说是一个比较常见的概念,举几个常见的用法:

  1. 根据不同的渠道使用不同的资源
  2. 根据不同的渠道使用不同的依赖
  3. 根据不同的渠道作不同的数据统计
  4. 根据不同的渠道,游戏app中对应不同的服务区

github地址

本文项目基于笔者自己写的demo,对其有兴趣的读者可以自行下载:
https://github.com/Double2hao/MultiChannelTest

android studio的多渠道

如果要使用多渠道,仅需要在该项目的build.gradle文件中增加以下代码:

android {flavorDimensions "version"productFlavors {oneTest {}twoTest {}threeTest {}}
}

然后可以在android studio左侧栏中的 Build Variants 中选择module的渠道,如下图:

buildConfig区分不同的渠道

通过buildConfigField可以在BuildConfig中设置不同的参数,然后在代码中可以通过BuildConfig的参数来区分不同的渠道。

  productFlavors {oneTest {buildConfigField("String", "TEST_CHANNEL", "\"one\"")}twoTest {buildConfigField("String", "TEST_CHANNEL", "\"two\"")}threeTest {buildConfigField("String", "TEST_CHANNEL", "\"three\"")}}

Demo中BuildConfig的代码如下:

public final class BuildConfig {public static final boolean DEBUG = Boolean.parseBoolean("true");public static final String APPLICATION_ID = "com.example.multichanneltest";public static final String BUILD_TYPE = "debug";public static final String FLAVOR = "threeTest";public static final int VERSION_CODE = 1;public static final String VERSION_NAME = "1.0";// Field from product flavor: threeTestpublic static final String TEST_CHANNEL = "three";
}

Demo中BuildConfig的使用代码如下:

public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//根据不同的渠道参数来作不同的逻辑if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "one")) {} else if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "two")) {} else if (TextUtils.equals(BuildConfig.TEST_CHANNEL, "three")) {}}
}

manifest区分不同的渠道

通过使用manifestPlaceholders,为不同的渠道设置不同的值。

  productFlavors {oneTest {manifestPlaceholders = [test_app_name: "TestOneApp"]}twoTest {manifestPlaceholders = [test_app_name: "TestTwoApp"]}threeTest {manifestPlaceholders = [test_app_name: "TestThreeApp"]}}

Demo中为不同的渠道设置了不同的appName,代码如下:

  <applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="${test_app_name}"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/Theme.MultiChannelTest"></application>

设置不同渠道的资源

通过设置sourceSets,可以为不同的渠道设置不同的资源。
如下,Demo中的代码,在不同的渠道下,使用不同的java资源。
如果在oneTest的渠道下,"src/main/twoTest"与"src/main/threeTest"目录下的文件不会参与编译。

android {sourceSets {oneTest {java {srcDirs = ["src/main/java", "src/main/oneTest"]}}twoTest {java {srcDirs = ["src/main/java", "src/main/twoTest"]}}threeTest {java {srcDirs = ["src/main/java", "src/main/threeTest"]}}}
}

android gradle 多渠道打包小结相关推荐

  1. Android Gradle 多渠道打包、动态配置AppName

    目录 一.简介 二.Gradle多渠道打包 1.普通做法 2.Gradle多渠道打包 一.简介 因为国内Android应用分发市场的现状,我们在发布APP时,一般需要生成多个渠道包,上传到不同的应用市 ...

  2. [转]Android Studio系列教程六--Gradle多渠道打包

    转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...

  3. android中多渠道打包的三种方式

    转载至:一片枫叶的专栏 国内的Android开发者还是很苦逼的,由于众所周知的原因,google play无法在国内打开(翻墙的就不在考虑之内了),所以Android系的应用市场,群雄争霸.后果就是国 ...

  4. 【Android】多渠道打包与签名机制

    [Android]多渠道打包与签名机制 多渠道打包 我们在发布APP时,往往需要生成多个渠道包,以上传到不同的应用市场. 而每个渠道包中,都可以包含各自的渠道信息,当APP和后台交互或进行数据上报时, ...

  5. 厦门之旅第一篇Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)

    我不是诗人,写不出厦门的美:我不是歌手,唱不出厦门的情:我不是画家,画不出厦门的景. 我只是一名程序员,我只能用我的眼,我的心去看去感受,那久违的海风吹拂着脸颊,好似内心那一份烦躁与沉重也随着海风飘向 ...

  6. Android的多渠道打包

    前言 本篇包括以下内容: 多渠道打包概述 友盟的多渠道打包 美团的多渠道打包 360的多渠道打包 多渠道打包概述 什么是多渠道包 渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠 ...

  7. Android Studio多渠道打包和代码混淆教程

    什么是Gradle Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言.Androi ...

  8. Android开发之Gradle多渠道打包总结

    首先老套路看图:分别是小米的渠道和应用宝的渠道 这是渠道的渠道号的截图 先说下Gradle的多渠道打包,个人更喜欢这样写: 第一步:需要在清单文件添加标识: <meta-dataandroid: ...

  9. android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称

    现在为了推广产品,会在多个渠道应用市场发布应用,为了统计不同渠道的数据,需要在应用中表明渠道,如果一个一个去修改打包效率会很低.AS为我们提供了简便的方法,可以多渠道打包,一次打包所有的渠道包. 1. ...

最新文章

  1. js中的arguments
  2. Python OpenCV中色彩空间的转换类型
  3. unet 层_UNet解释及Python实现
  4. php 上万关键字匹配,JavaScript 上万关键字瞬间匹配实现代码
  5. go语言中使用递归函数实现文件目录的遍历
  6. Qt Linguist基于文本ID的翻译
  7. 新页面,简单的tree视图写法
  8. vue html引入图片,vue引入图片的几种方式
  9. dbms数据库管理系统_基本数据库管理系统(DBMS)能力问题和解答
  10. layui表单验证 内置自定义规则 - 使用说明
  11. docker-compose搭建ghost博客系统
  12. 具有多个单元格类型的iOS UITableView
  13. 监控导致设备cpu使用率高的原因
  14. 基于战舰V3的NRF24L01模块的原理剖析及应用
  15. pgadmin4 本地安装部署
  16. 机器学习(14)——激活函数
  17. echarts饼图legend标识位置
  18. MCU之芯唐ARM9(转)
  19. Springboot集成MybatisPlus、Druid
  20. Okhttp上传图片

热门文章

  1. Java猿社区—Redis一篇系列—第二章、Redis入门和安装
  2. 数据分析师的自我修养
  3. 高老师谈网络工程师之路
  4. Mel spectrum梅尔频谱与MFCCs
  5. mes系统故障_MES系统常见问题解析
  6. (STM32笔记)一、STM32特点
  7. 对付不良商家,恶补攒机知识
  8. java循环输出abcd_java 输 abcd 输出其所有排列情况 permutate
  9. 云、CDN、IDC 三个概念的区别是什么
  10. 随机森林算法及贝叶斯优化调参Python实践