需求:制作一个公共组件,可以实现多个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控制管理的更多相关文章

  1. 自定义Spring Security权限控制管理(实战篇)

    上篇<话说Spring Security权限管理(源码)>介绍了Spring Security权限控制管理的源码及实现,然而某些情况下,它默认的实现并不能满足我们项目的实际需求,有时候需要 ...

  2. 用Windows PowerShell 控制管理 Microsoft Office 365

    如果想要通过PowerShell控制管理Office365,首先要安装Microsoft Online Services Sign-In Assistant 7.0,链接如下 Microsoft On ...

  3. [译]C#控制管理VisualSVN Server

    VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...

  4. C#控制管理VisualSVN Server 分类: C# 2014-05-29 15:51 796人阅读 评论(0) 收藏

    VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...

  5. C#控制管理VisualSVN Server

    VisualSVN Server可以用WMI接口管理(Windows Management Instrumentation). VisualSVN Server安装的计算机中,位于%VISUALSVN ...

  6. .NET零基础入门之02:源码控制管理器的使用

    一:概述 源码控制管理器,也叫"版本控制"软件,用于存储.追踪目录(文件夹)和文件的修改历史,是软件开发者的必备工具,是专业软件公司的基础工具.它主要是协助在多人团队中控制代码,防 ...

  7. JDBC事务控制管理(转载)

    JDBC事务控制管理 转载于 2018年01月26日 15:46:11 1.事务 (1)事务的概念 事务指逻辑上的一组操作,组成这组操作的各个单元,要不全部成功,要不全部不成功. 例如:A——B转帐, ...

  8. ABP开发框架前后端开发系列---(9)ABP框架的权限控制管理

    在前面两篇随笔<ABP开发框架前后端开发系列---(7)系统审计日志和登录日志的管理>和<ABP开发框架前后端开发系列---(8)ABP框架之Winform界面的开发过程>开始 ...

  9. Docker的资源控制管理

    Docker的资源控制管理 1.CPU控制 2.对内存使用进行限制 3.对磁盘I/O配额控制的限制 1.CPU控制: cgroups,是一个非常强大的linux内核工具,他不仅可以限制被namespa ...

随机推荐

  1. 随机生成n位随机数(包含大写字母、小写字母、数字)

    package com.java.weiju; import java.security.SecureRandom; import java.util.Date; import java.util.R ...

  2. Android 组件化方案探索与思考

    Android 组件化方案探索与思考 组件化项目,通过gradle脚本,实现module在编译期隔离,运行期按需加载,实现组件间解耦,高效单独调试. 本项目github地址 https://githu ...

  3. Modbus库开发笔记之十:利用协议栈开发Mosbus RTU Slave应用

    上一节我们使用协议占开发了一个Modbus TCP Server应用.接下来我们使用协议栈在开发一个基于串行链路的Mosbus RTU Slave应用. 根据前面对协议栈的封装,我们需要引用Modbu ...

  4. Swift DispatchQueue

    延迟2s执行 DispatchQueue.main.asyncAfter(deadline: DispatchTime.now()+2)

  5. Remove Duplicates from Sorted ListII

    给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字. 示例 1: 输入: 1->2->3->3->4->4->5 输出: 1-&g ...

  6. 第一次Java测试及感触

    周四进行了java测试,感触很深,测试的题目是用Java实现一个ATM机的管理系统.最后3个小时后,我没有完成这次测试,但是我找到了自己的很多不足,明确了自己的问题究竟在哪里. 关于这次测试我不会的最 ...

  7. laravel 表单方法伪造

    有时候,我们可能需要手动定义发送表单数据所使用的 HTTP 请求方式,而 HTML 表单仅支持 GET 和 POST 两种方式,如果要使用其他的方式,则需要自己来定义实现. HTTP 请求方式概述 最 ...

  8. php 统计某个目录中所有文件的大小

    /** * @Purpose : 利用递归的方式统计目录的大小 * @Author : chrdai * @Method Name : dirSize() * @parameter : string ...

  9. OrCAD Capture CIS 16.6 导出BOM

    OrCAD Capture CIS 16.6 一.选择设计文件:菜单:Tools > Bill of Materials... 二.Bill of Materials > Open in ...

  10. shell设置连接服务器永不超时

    1.打开/etc/ssh/sshd_config vim /etc/ssh/sshd_config   2.设置如下内容: MaxAuthTries 60 MaxSessions 3 ClientAl ...