需求:制作一个公共组件,可以实现多个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. 处理ftp服务器 在重启后ftp客户端不能连接访问的问题

    1:环境:centos7 2:当在重启centos7 linux服务器后,再连接ftp客户端不能链接 此时需要检查以下几点: 2-1:核查ftp服务是否启动正常: [root@localhost ~] ...

  2. linux 下创建共享文件夹

    首先需要在win下共享一个盘 然后设置virtulbox 然后修改一串代码 参考原文 https://jingyan.baidu.com/article/2fb0ba40541a5900f2ec5f0 ...

  3. css样式之补充。。。

    css常用的一些属性: 1.去掉下划线 :text-decoration:none ;2.加上下划线: text-decoration: underline; 3.调整文本和图片的位置(也就是设置元素 ...

  4. 【ES】学习11-多桶排序

    聚合结果的排序 默认:桶会根据 doc_count 降序排列. 内置排序: 设置按doc_count升序排序:注意order,_count GET /cars/transactions/_search ...

  5. 《剑指offer》斐波那契数列

    本题来自<剑指offer> 斐波那契数列 矩阵覆盖 题目一: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 思路: ...

  6. fastJson常用方法总结

    1.了解json json就是一串字符串 只不过元素会使用特定的符号标注. {} 双括号表示对象 [] 中括号表示数组 "" 双引号内是属性或值 : 冒号表示后者是前者的值(这个值 ...

  7. python目录和文件的列表清单

    import os # 通过给定的文件夹,列举出这个文件夹当中,所有的文件,以及文件夹,子文件夹当中的所有文件def listFilesToTxt(dir,file): # 1.列举出,当前给定的文件 ...

  8. ubuntu 出错 /etc/sudoers is world writable

    如果改变了这个,目录的权限sodu就不能用了,当你再使用sodu命令就会爆如下问题: sudo: /etc/sudoers is world writablesudo: no valid sudoer ...

  9. react-native 之gradle-2.x-all.zip 下载缓慢或失败

    去官网http://www.gradle.org/downloadshttp://services.gradle.org/distributions下载匹配的 Gradle 版本把zip直接放到C:\ ...

  10. KnockoutJs学习笔记(三)

    之前的文章主要针对的是单一的observable(即便是observableArray也是一种observable),而文档Using computed observables则主要是针对ko.com ...