多个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 ...
随机推荐
- STM32L476应用开发之三:串行通讯实验
在我们的项目需求中,有两个串口应用需求,一个是与炭氢传感器的通讯,另一个是与显示屏的通讯.鉴于此,我们需要实验串行通讯. 1.硬件设计 串行通讯一个采用RS232接口,另一个直接采用TTL方式.我们在 ...
- ORACLE的数据类型的长度合集
-- ORACLE的数据类型常用的数据库字段类型如下:字段类型 中文说明 限制条件 其它说明CHAR 固定长度字符串 最大长度2000 bytesVARCHAR2 可变长度的字符串 最大长度4000 ...
- 创建表空间、新增用户、给用户赋予DBA权限 、删除用户下的上有数据表
正文原创 一:查询数据库实例有多少用户: [oracle@localhost ~]$ sqlplus / as sysdba; SQL*Plus: Release 11.2.0.3.0 Product ...
- python并发编程之多线程2------------死锁与递归锁,信号量等
一.死锁现象与递归锁 进程也是有死锁的 所谓死锁: 是指两个或两个以上的进程或线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用, 它们都将无法推进下去.此时称系统处于死锁状态或系统 ...
- Django 之缓存
一.缓存 由于Django是动态网站,所有每次请求均会去数据进行相应的操作,当程序访问量大时,耗时必然会更加明显,最简单解决方式是使用:缓存,缓存将一个某个views的返回值保存至内存或者memcac ...
- 第五周学习总结-HTML5
2018年8月12日 暑假第五周,我把HTML剩余的一些标签和用法看完了并学了一些HTML5的标签及用法. HTML5比HTML多了一些元素,也删去了一些元素. HTML5新增元素 图形元素 < ...
- 关于springboot整合配置pagehelper插件的方法
一,java代码配置法 这种方法个人感觉比较繁琐不是很推荐,而且也不怎么符合springboot的理念,但是胜在也能够用,所以就列起来,万一以后接手的代码是用这种方式的也方便自己维护. 首先引入jar ...
- Left-pad
L1-032 Left-pad (20 分) 根据新浪微博上的消息,有一位开发者不满NPM(Node Package Manager)的做法,收回了自己的开源代码,其中包括一个叫left-pad的 ...
- Aws云服务EMR使用
Aws云服务EMR使用 创建表结构 创建abc库下的abc_user_i表字段s3://abc-server/abc-emr/shell/ABC_USER_HIVE.q: EXTERNAL 指定为外部 ...
- PyOpenCV图像逆时针旋转90度
warpAffine方法效果很搓,留下大片黑色区域. 使用flip和transpose可以实现逆时针旋转90度.先flip或先transpose均可. #coding:utf-8 import cv2 ...