多个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 ...
随机推荐
- css 样式 记录
/* Track */::-webkit-scrollbar-track { -webkit-box-shadow: inset 0 0 6px rgba(0,0,0,0.3); -webkit-bo ...
- SQL Server2008从入门到精通pdf
下载地址:网盘下载 内容介绍 编辑 <SQL Server 从入门到精通>从初学者的角度出发,通过通俗易懂的语言.丰富多彩的实例,详细地介绍了SQLServer2008开发应该掌握的各方面 ...
- LeetCode(79): 单词搜索
Medium! 题目描述: 给定一个二维网格和一个单词,找出该单词是否存在于网格中. 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格.同一个单元 ...
- 简单(基本)的风光摄影照片后期处理-新手教程-ps照片后期基本处理
前言 Photoshop虽然不是万能的,但缺少Photoshop却是万万不能的!风光摄影不是一个记录过程,做到的不能仅仅是“拍到了”,我觉得应该是一个创作的过程,特别是在后期处理的过程中,创作意味更浓 ...
- jenkins权限管理,实现不同用户组显示对应视图views中不同的jobs
如何分组管理权限,如何实现不同用户组显示对应视图views中不同的jobs,建议使用Role Strategy Plugin插件. 1.安装Role Strategy Plugin插件. 2.“系统管 ...
- Docker 快速删除所有容器
查看运行容器 docker ps 查看所有容器 docker ps -a 进入容器 其中字符串为容器ID: docker exec -it d27bd3008ad9 /bin/bash 1.停用全部运 ...
- 20165206 2017-2018-2 《Java程序设计》第三周学习总结
20165206 2017-2018-2 <Java程序设计>第三周学习总结 教材学习内容总结 类:class是关键字,用来定义类. 类声明:例如class People. 对象的声明:类 ...
- ElasticSearch搜索解析
这篇介绍稍多,篇幅可能有点多,下面会针对一些重要的点做一些小测试 搜索返回文档解析 hits搜索返回的结果中最重要的一部分其中包含了 索引信息(_index,_type,_index,_source, ...
- 使用shell脚本定时采集日志数据到hdfs分布式文件系统
1.首先对linux操作系统的crontab命令进行熟悉和了解: .crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系 ...
- [转] ES6展开运算符
语法 用于函数调用 myFunction(...iterableObj); 用于数组字面量 [...iterableObj, 4, 5, 6] 函数传参 目前为止,我们都是使用Function.pro ...