android gradle 多渠道打包小结
概述
多渠道对于android来说是一个比较常见的概念,举几个常见的用法:
- 根据不同的渠道使用不同的资源
- 根据不同的渠道使用不同的依赖
- 根据不同的渠道作不同的数据统计
- 根据不同的渠道,游戏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 多渠道打包小结相关推荐
- Android Gradle 多渠道打包、动态配置AppName
目录 一.简介 二.Gradle多渠道打包 1.普通做法 2.Gradle多渠道打包 一.简介 因为国内Android应用分发市场的现状,我们在发布APP时,一般需要生成多个渠道包,上传到不同的应用市 ...
- [转]Android Studio系列教程六--Gradle多渠道打包
转自:http://www.stormzhang.com/devtools/2015/01/15/android-studio-tutorial6/ Android Studio系列教程六--Grad ...
- android中多渠道打包的三种方式
转载至:一片枫叶的专栏 国内的Android开发者还是很苦逼的,由于众所周知的原因,google play无法在国内打开(翻墙的就不在考虑之内了),所以Android系的应用市场,群雄争霸.后果就是国 ...
- 【Android】多渠道打包与签名机制
[Android]多渠道打包与签名机制 多渠道打包 我们在发布APP时,往往需要生成多个渠道包,以上传到不同的应用市场. 而每个渠道包中,都可以包含各自的渠道信息,当APP和后台交互或进行数据上报时, ...
- 厦门之旅第一篇Gradle多渠道打包(动态设定App名称,应用图标,背景图片,状态栏颜色)
我不是诗人,写不出厦门的美:我不是歌手,唱不出厦门的情:我不是画家,画不出厦门的景. 我只是一名程序员,我只能用我的眼,我的心去看去感受,那久违的海风吹拂着脸颊,好似内心那一份烦躁与沉重也随着海风飘向 ...
- Android的多渠道打包
前言 本篇包括以下内容: 多渠道打包概述 友盟的多渠道打包 美团的多渠道打包 360的多渠道打包 多渠道打包概述 什么是多渠道包 渠道包就是要在安装包中添加渠道信息,也就是channel,对应不同的渠 ...
- Android Studio多渠道打包和代码混淆教程
什么是Gradle Gradle是一种依赖管理工具,基于Groovy语言,面向Java应用为主,它抛弃了基于XML的各种繁琐配置,取而代之的是一种基于Groovy的领域特定(DSL)语言.Androi ...
- Android开发之Gradle多渠道打包总结
首先老套路看图:分别是小米的渠道和应用宝的渠道 这是渠道的渠道号的截图 先说下Gradle的多渠道打包,个人更喜欢这样写: 第一步:需要在清单文件添加标识: <meta-dataandroid: ...
- android 自定义apk名,Android Studio多渠道打包、自定义打包APK名称
现在为了推广产品,会在多个渠道应用市场发布应用,为了统计不同渠道的数据,需要在应用中表明渠道,如果一个一个去修改打包效率会很低.AS为我们提供了简便的方法,可以多渠道打包,一次打包所有的渠道包. 1. ...
最新文章
- js中的arguments
- Python OpenCV中色彩空间的转换类型
- unet 层_UNet解释及Python实现
- php 上万关键字匹配,JavaScript 上万关键字瞬间匹配实现代码
- go语言中使用递归函数实现文件目录的遍历
- Qt Linguist基于文本ID的翻译
- 新页面,简单的tree视图写法
- vue html引入图片,vue引入图片的几种方式
- dbms数据库管理系统_基本数据库管理系统(DBMS)能力问题和解答
- layui表单验证 内置自定义规则 - 使用说明
- docker-compose搭建ghost博客系统
- 具有多个单元格类型的iOS UITableView
- 监控导致设备cpu使用率高的原因
- 基于战舰V3的NRF24L01模块的原理剖析及应用
- pgadmin4 本地安装部署
- 机器学习(14)——激活函数
- echarts饼图legend标识位置
- MCU之芯唐ARM9(转)
- Springboot集成MybatisPlus、Druid
- Okhttp上传图片