Android多渠道打包时获取当前渠道的方法
作者:书柜里的松鼠 发布时间:2021-06-18 18:10:25
标签:Android,当前渠道,多渠道打包
作为Android app,发布多个分发平台是常规操作。然后,有时由于个渠道面对的用户不同,或平台审核标准不同,需要在各渠道使用不同的业务逻辑,这就需要根据渠道使用选择差异化代码。
这里把简单的代码记一下。
首先,分渠道打包很简单。
在项目的build.gradle里设置
android {
...
productFlavors {
home_site {
dimension "money"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "home_site"]
}
main_store {
dimension "money"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "main_store"]
}
other_store {
dimension "money"
manifestPlaceholders = [UMENG_CHANNEL_VALUE: "other_store"]
}
}
}
其中的 dimension 是维度,通过 flavorDimensions 设置。
defaultConfig {
...
flavorDimensions "money"
}
设置维度主要是为了管理方便。
这个项目里总共设置了三个渠道
其中 UMENG_CHANNEL_VALUE 可以随便命名,不过项目里的友盟统计会需要用到渠道名,所以这里就用UMENG的命名方法了。
接下来就是获取当前的渠道名,这样就可以根据不同的渠道包设置不同的逻辑,比如设置某一模块在某些平台发布的版本隐藏,而再另一些平台的版本上显示。
首先,需要在 AndroidManifest.xml 文件定义信息变量。
<application
android:icon="@mipmap/logo"
android:label="@string/app_name"
android:name=".App"
android:roundIcon="@mipmap/logo"
android:theme="@style/AppTheme.NoActionBar">
...
<meta-data
android:name="CHANNEL_NAME"
android:value="${UMENG_CHANNEL_VALUE}" />
</application>
然后就可以在Application或Activity中获取了。
ApplicationInfo applicationInfo = null;
try {
applicationInfo = getPackageManager().getApplicationInfo(getPackageName(), PackageManager.GET_META_DATA);
if (applicationInfo == null) {
return;
}
String value = applicationInfo.metaData.getString("CHANNEL_NAME");
CommonConfig.CHANNEL_NAME=value;
//按渠道设置差异化代码
System.out.println("CHANNEL_NAME:"+value);
switch (value){
case "home_site":
//逻辑1
break;
case "main_store":
//逻辑2
break;
case "other_store":
//逻辑3
break;
}
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
来源:https://www.jianshu.com/p/05077bbf9bfb


猜你喜欢
- 在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术:1.加锁顺序2.加锁时限3.死锁检测加锁顺序当多个线程需要相同的一些锁,但是
- ScrollView可实现控件在超出屏幕范围的情况下滚动显示。用法:在XML文件中将需滚动的控件包含在ScrollView中,当控件超出屏幕
- 当采用HttpClient httpClient = HttpClients.createDefault() 实例化的时候。会导致Addre
- java常量池是一个经久不衰的话题,也是面试官的最爱,题目花样百出,这次好好总结一下。理论先拙劣的表达一下jvm虚拟内存分布:程序计数器是j
- 一、熔断器简介微服务架构特点就是多服务,多数据源,支撑系统应用。这样导致微服务之间存在依赖关系。如果其中一个服务故障,可能导致系统宕机,这就
- 最近设计要求要一个圆形进度条渐变的需求:1.画圆形进度条2.解决渐变最终实现效果代码package com.view;import andr
- Tomcat启动报异常java.lang.ClassNotFoundExceptionTomcat启动报异常:java.lang.Class
- C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式。本文总结了通用的算法并结合了自己的一点小经验,分享给大家
- 目录前言1、什么是Filter2、过滤器实现拦截过程3、过滤器与 * 的不同之处1.过滤器:2. * :3.两者的区别:4、使用Filter
- Android 实现记住用户名和密码的功能是通过SharedPreference 存储来实现的。创建一个复选按钮,通过按钮的否选取来进行事件
- 一、项目创建创建一个控制台应用程序,项目右键->管理 NuGet 程序包->Topshelft及Topshelf.Log4Net
- 使用 replace 函数动态填充字符串String str="Hello {0},我是 {1},今年{2}岁"
- EntityWrapper使用解析1、项目中引入jar包,我这里使用Maven构建<dependency> &nbs
- (1)实际应用BeanUtils.copyProperties(赋值目标对象,模板源对象);我们都知道当有两个对象AB,属性名称一样的情况下
- java中如何表示圆周率设计一个Shape接口和它的两个实现类Square和Circle。 要求如下(1) Shape接口中有一个抽象方法a
- Android ListView的优化,在做Android项目的时候,在用到ListView 界面及数据显示,这个时候如果资源过大,对项目来
- 一、基本介绍(Nexus(maven * ))1,如果没有搭建 * 会有什么问题?如果没有 * ,我们所需的所有构件都需要通过 Mave
- Model与Session区别什么是Session:Session:在计算机中,尤其是在网络应用中,称为“会话”。它具体是指一个终端用户与交
- 使用注解来配置Action可以实现零配置,零配置将从基于纯XML的配置转化为基于注解的配置。使用注解,可以在大多数情况下避免使用
- 在使用Unity中的Debug.Log()进行日志输出时很不方便,在打包出来的可执行文件中没有办法看到输出,所有就想自己实现一个简易的日志输