多个SDK控制管理
需求:制作一个公共组件,可以实现多个SDK想用哪个用哪个,集中管理
组织方式:
架构形式
注意点:
1.sdk必须通过maven库来compile,因为jar会打到aar中;所以library和主module都要compile
2.控制文件SdkConfig.properties(放在src/main/assets下)
O7Sdk=false
UserCenterSdk=true
#UserCenterSdk为false时需要注释掉UserCenterForeign
UserCenterForeign=true
UMengSdk=false
3.主工程module的build.gradle
try {
Properties props = new Properties();
props.load(new FileInputStream(rootProject.file("src/main/assets/SdkConfig.properties")));
props.each({
println("Adding property to rootProject.ext: " + it.key + " = " + it.value);
rootProject.ext[it.key] = it.value
if ("O7Sdk".equals(it.key) && "true".equals(it.value)) {
compile 'com.outfit7.android.aars:o7sdk:1.1.0'
println("compile o7sdk ")
} else if ("UserCenterForeign".equals(it.key)) {
if ("true".equals(it.value)) {
compile 'user-center:tracksdk_foreignlogin:1.0.0'
println("compile UserCenterForeign ")
} else if ("false".equals(it.value)) {
compile 'user-center:tracksdkDex:1.0.0'
println("compile UserCenterChina ")
}
} else if ("UMengSdk".equals(it.key) && "true".equals(it.value)) {
compile 'com.umeng.sdk:common:1.5.0'
compile 'com.umeng.sdk:analytics:7.5.0'
println("compile UMeng ")
}
})
} catch (Exception e) {
}
4.生命周期
@Override
public void onResume() {
Log.d(TAG, "CentralizationImpl--onResume");
gameCenter.onResume();
o7Impl.onResume();
新sdk.onResume();
}
5.新增sdk实现类要增加如下
public static final String 变量名 = "键的值";
private boolean canSdkUsed;
6.其中键的值和主工程配置文件SdkConfig.properties里要一致,用于管理sdk是否可用
O7Sdk=false
gameCenterSdk=false
键的值=true
并在构造函数里取配置文件的值
String key = SdkConfig.getInstance().getKey(变量名);
canSdkUsed = TextUtils.isEmpty(key) ? false : (key.equals("false") ? false : true);
Log.d(TAG, "GameCenterImpl--canSdkUsed:" + canSdkUsed);
然后每个方法前面都要添加
if (!canSdkUsed) {
return;
}
7.取键值类
public class SdkConfig {
private static Map configMap;
private static SdkConfig instance; public static final String O7SDK_KEY = "O7Sdk";
public static final String UMENGSDK_KEY = "UMengSdk";
public static final String USER_CENTER_SDK = "UserCenterSdk";
public static final String USER_CENTER_FOREIGN = "UserCenterForeign"; public SdkConfig() {
} public static SdkConfig getInstance() {
if (instance == null) {
instance = new SdkConfig();
}
return instance;
} public static void init(Context context) {
if (configMap != null) {
return;
}
configMap = new HashMap();
String fileName = "SdkConfig.properties";
InputStream in = null;
try {
in = context.getAssets().open(fileName);
Properties properties = new Properties();
properties.load(in);
Iterator<Map.Entry<Object, Object>> iterator = properties.entrySet().iterator();
while (iterator.hasNext()) {
Map.Entry<Object, Object> entry = iterator.next();
configMap.put(entry.getKey(), entry.getValue());
}
} catch (IOException e) {
e.printStackTrace();
}
} public String getKey(String key) {
if (configMap != null) {
return (String) configMap.get(key);
} else {
return null;
}
}
}
如果有更好的方案,欢迎留言
多个SDK控制管理的更多相关文章
- 自定义Spring Security权限控制管理(实战篇)
上篇<话说Spring Security权限管理(源码)>介绍了Spring Security权限控制管理的源码及实现,然而某些情况下,它默认的实现并不能满足我们项目的实际需求,有时候需要 ...
- 用Windows PowerShell 控制管理 Microsoft Office 365
如果想要通过PowerShell控制管理Office365,首先要安装Microsoft Online Services Sign-In Assistant 7.0,链接如下 Microsoft On ...
- [译]C#控制管理VisualSVN Server
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- C#控制管理VisualSVN Server 分类: C# 2014-05-29 15:51 796人阅读 评论(0) 收藏
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- C#控制管理VisualSVN Server
VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...
- .NET零基础入门之02:源码控制管理器的使用
一:概述 源码控制管理器,也叫"版本控制"软件,用于存储.追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是专业软件公司的基础工具.它主要是协助在多人团队中控制代码,防 ...
- JDBC事务控制管理(转载)
JDBC事务控制管理 转载于 2018年01月26日 15:46:11 1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐, ...
- ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理
在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...
- Docker的资源控制管理
Docker的资源控制管理 1.CPU控制 2.对内存使用进行限制 3.对磁盘I/O配额控制的限制 1.CPU控制: cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespa ...
随机推荐
- Confluence 6 从一个备份中获得文件附件
页面中的文件附件可以从备份中获得而不需要将备份文件导入到 Confluence 中.这个在用户删掉了附件,但是你还是想恢复这个附件的时候就变得非常有用了. 自动备份和手动备份都允许你进行这个操作,但是 ...
- Confluence 6 MySQL 数据库设置准备
请查看 Supported Platforms 页面来获得 Confluence 系统支持的 MySQL 数据库版本.你需要在安装 Confluence 之前升级你的 MySQL 数据库. 如果你从其 ...
- NIO(一)
1.NIO是什么? 是JDK1.4之后推出的一个新的IO操作(netty.mina通讯框架的底层都是NIO实现的连接) 2.NIO和IO的区别(阻塞只会出现在网络通讯中,都是同步) NIO:非阻塞类型 ...
- LeetCode(116):填充同一层的兄弟节点
Medium! 题目描述: 给定一个二叉树 struct TreeLinkNode { TreeLinkNode *left; TreeLinkNode *right; TreeLinkNode *n ...
- java Web工程师面试题集绵
一.Java 基础 1.JDK .JRE 和JVM关系是什么? 答:A. JDK(Java Development Kit)即Java开发工具包,包含编写Java程序所必须的编译.运行等开发工具以及J ...
- sass基础—属性嵌套以及跳出嵌套 @at-root
/*注意:定义的变量若是没有使用则不会编译到css文件中.*//*1)sass的局部变量*/$font:14px;//定义$font:12px !default; //没有default时是重新赋值, ...
- Selenium CSS定位语法
大部分人在使用selenium定位元素时,用的是xpath定位,因为xpath基本能解决定位的需求.css定位往往被忽略掉了,其实css定位也有它的价值,css定位更快,语法更简洁.这一篇css的定位 ...
- 论文阅读笔记三:R2CNN:Rotational Region CNN for Orientation Robust Scene Text Detection(CVPR2017)
进行文本的检测的学习,开始使用的是ctpn网络,由于ctpn只能检测水平的文字,而对场景图片中倾斜的文本无法进行很好的检测,故将网络换为RRCNN(全称如题).小白一枚,这里就将RRCNN的论文拿来拜 ...
- 步步为营-104-Lambda语句
1:Lambda的拼接 首先借助一个Lambda的帮助类 using System; using System.Collections.Generic; using System.Linq; usin ...
- 【TensorFlow】基于ssd_mobilenet模型实现目标检测
最近工作的项目使用了TensorFlow中的目标检测技术,通过训练自己的样本集得到模型来识别游戏中的物体,在这里总结下. 本文介绍在Windows系统下,使用TensorFlow的object det ...