Android SDK开发架构设计案例详解(一)

相信做Android开发的小伙伴,肯定使用过很多第三方的 SDK,比如极光 SDK、支付宝 SDK、微博 SDK 等等。所谓 SDK 就是一个开发工具包,全称是 Software Development Kit,翻译过来是软件开发工具包。SDK 通常是为辅助开发某类软件而编写的特定软件包。

App 开发与 SDK 开发的工作有什么区别呢?App开发更偏向于用户层面,从 UI 展示到业务逻辑处理,全程处理用户的行为。而SDK开发更偏向于功能方面,注重功能的开发实现,轻 UI。
SDK设计原则
核心原则:一定要稳定,不能引起客户 App 的崩溃。Android SDK 开发来说,要注意 try…catch 的使用、对象的检查等等。
首先需要明确,一方面,SDK 的价值是给调用者带来价值。所以要努力降低用户的上手难度,易于理解。另一方面要时 SDK 代码易于维护。
1.接口易用性。
2.命名规范要统一。
3.跨端接口尽量保持一致。
4.尽量不依赖第三方库。
5.SDK 包尽量小。
6.兼容性。
接下来,Java 23种设计模式便大派用场了。SDK架构设计最常用的就是单例模式、建造者模式、代理模式、桥接模式、观察者模式等等,SDK设计过程中都遵循Java编程思想和Java设计六大原则。话不多说,我们现在就通过项目看下SDK开发架构设计是如何设计的,如何选型Java 23种设计模式其中的一种。
首先创建Android studio项目,其次创建Android Library就可以了。
如下:


图片1.png

在SDK层测试代码如下:


图片2.png

运行此项目,看app层能不能正常调用SDK层,运行结果如下:


图片3.png

由上图可以看出,app层可以正常调用SDK层,说明SDK已经集成到Android app项目里面了,接下来我们可以在SDK层开发架构设计了。

XLKClientSdk项目结构如下:


图片4.png

源码如下:
IWarpper.java

package com.xlk.client_sdk.warpper;
import android.content.Context;

public abstract interface IWarpper {
     void configuration();
}

Creator.java

public abstract class Creator {
    //创建一个产品对象,其输入参数类型可以自行设置
    public abstract  IWarpper createProduct(Class clazz);
}

CreatorImpl.java

/**
 * 这样设计,可以随意生产产品了。
 */
public class CreatorImpl extends Creator{
    @Override
    public  IWarpper createProduct(Class clazz) {
        IWarpper product = null;
        try {
            product = (IWarpper) Class.forName(clazz.getName()).newInstance();
        } catch (Exception e) { //异常处理
            e.printStackTrace();
        }
        return (T) product;
    }
}

HUAWEIWarpper.java

/**
 * SDK层类,不允许外层调用该类。
 */
public class HUAWEIWarpper implements IWarpper {
    @Override
    public void configuration() {
        SDKLogcatUtil.e("华为手机配置SDK层处理");
    }
}

XIAOMIWarpper.java

/**
 * SDK层类,不允许外层调用该类。
 */
public class XIAOMIWarpper implements IWarpper {
    @Override
    public void configuration() {
        SDKLogcatUtil.e("小米手机配置SDK层处理");
    }
}

HUAWEIProxy.java

/**
 * 代理模式
 */
public class HUAWEIProxy implements IWarpper {

    private HUAWEIWarpper instance= new HUAWEIWarpper();

    /**
     * 每次HUAWEIProxy类加载的时候HUAWEIWarpper都会创建对象
     */
    @Override
    public void configuration() {
        SDKLogcatUtil.e("----HUAWEIWarpper对象创建"+instance);
        instance.configuration();
    }
}

XIAOMIProxy.java

/**
 * 代理模式
 */
public class XIAOMIProxy implements IWarpper {
    private XIAOMIWarpper  instance = new XIAOMIWarpper();
    /**
     * 每次HUAWEIProxy类加载的时候HUAWEIWarpper都会创建对象
     */
    @Override
    public void configuration() {
        SDKLogcatUtil.e("----XIAOMIWarpper对象创建"+instance);
        instance.configuration();
    }
}

XLKClientSdk.java

public class XLKClientSdk {
    private static Context context;
    /**
     * 持有Context引用
     * @param context
     */
    public static void initContext(Context context){
        XLKClientSdk.context = context;
    }
    /**
     * 采用工厂模式
     * @param clazz
     * @param 
     * @return
     */
    public  static  IWarpper getModule(Class clazz){
        return new CreatorImpl().createProduct(clazz);
    }
}

以上就是SDK层代码,上述代码可以看出,此项目开发采用了Java设计模式的两种,分别是代理模式和工厂模式。

接下来,我们通过app层来调用SDK层代码,代码如下:

public class MainActivity extends AppCompatActivity {
    private Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.method);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                XLKClientSdk.getModule(XIAOMIProxy.class).configuration();
                XLKClientSdk.getModule(HUAWEIProxy.class).configuration();
            }
        });
      }
}

运行结果如下:


图片5.png

这就是SDK层项目整个逻辑了。但接下来我们发现了一个问题,我刚点了第一次按钮了,我在点击一次看看,打印log如下:


图片6.png

从上面可以看出,HUAWEIProxy、XIAOMIProxy类每次加载的时候都会去分别创建HUAWEIWarpper、XIAOMIWarpper对象,这就有问题了,频繁创建对象和回收该对象,会引发性能问题,那小伙伴们,该如何解决呢?我相信,小伙伴们第一个想到的就是Java设计模式中的单例模式,那除了单例模式还有其他的吗?还有我突然想到HUAWEIWarpper、XIAOMIWarpper类是不允许外部调用此类,因为我读过Context源码,Context类里面用到了代理模式。
如下图:


图片7.png
图片8.png

如上图可以看出,我们不希望HUAWEIWarpper、XIAOMIWarpper类暴露给外层。
以上两种问题期待下回讲述。
上述整个就是开发架构整个设计过程,开发过程中都遵循Java编程思想和Java设计六大原则以及设计模式,作为开发者,需要必备架构设计的能力。下期会讲述关于SDK层更多的设计模式,享元模式,策略模式,桥接模式,观察者模式等等,搜索并关注公众号“Android技术迷”,可查看更多有关的SDK层源码相关文章。

你可能感兴趣的:(Android SDK开发架构设计案例详解(一))