设计一个SDK,有两个明确的原则贯穿始终:
一是:最小可用性原则,即用最少的代码,如无必要勿增实体;
二是:最少依赖性原则,即用最低限度的外部依赖,如无必要勿增依赖。
在本系列开篇文章中提到了SDK开发的两个原则:
一是:最小可用性原则,即用最少的代码,如无必要勿增实体;
二是:最少依赖性原则,即用最低限度的外部依赖,如无必要勿增依赖。
SDK开发中,需要尽量避免依赖第三方库,使用通用的Android SDK自带的官方库能满足需求即可,以免引起不必要的冲突或者三方库不要放到lib包下,默认打包进去封装过程中的aar二次打包问题;
比如,不要为了一个简单的JSON数据转换就引入Fastjson 、Gson之类的第三方json解析转换库。
如果确实因为项目需要,要引入一些开源库,可以通过源码集成的形式引入,再更改一下包名,避免集成冲突。
8.jar文件路径,为你Project中,Module目录下,build-intermediates-bundles-debug目录中,jar文件可更改名称。
如本编此项目最后导出的jar文件路径为 E:\Install\AndroidStudioProjects\SdkDemo\sdk\build\intermediates\bundles\debug
9.aar文件路径,为你Project中,Module目录下,build-outputs-aar目录中, 如本编此项目最后导出的aar文件路径为
E:\Install\AndroidStudioProjects\SdkDemo\sdk\build\outputs\aar
最后,补充一些概念。
1.SDK中的所有内容,除了之前创建声明过的那个Activity以外,都是没有生命周期的。
2.jar包不包含资源文件,一般为纯代码。aar包中含有诸如图片之类的资源文件。
三、SDK包大小与集成增量
首先我们要区分一下这两个概念:
SDK包大小:是指SDK包如AAR文件的大小,所占体积;
SDK集成增量:是指APK集成AAR后的增量,也就是集成前后的APK体积差值。
这里可以明确的是:集成AAR后的APK体积<集成AAR前的APK体积+AAR体积。举个例子:假如AAR有30M,APP集成该AAR后的增量一般都不会超过30M。而增量具体多少,跟主工程的实际资源或者依赖配置有关。而另一种可能,某些AAR只能支持一种ABI,集成时为了适配而修改了配置,最终反而使得整个APK的体积变小。
因此,为了科普这一概念,不妨在SDK文档或产品说明中备注SDK包大小以及预估的集成增量。对于APK大小敏感的用户就可以有一些心理准备。
APK 包含如下目录:
META-INF/:包含 CERT.SF 和 CERT.RSA 签名文件,以及 MANIFEST.MF 清单文件。
assets/:包含应用的资源;应用可以使用 AssetManager 对象检索这些资源。
res/:包含未编译到 resources.arsc 中的资源。
lib/:包含特定于处理器软件层的已编译代码。此目录包含每种平台类型的子目录,如 armeabi、armeabi-v7a、arm64-v8a、x86、x86_64 和 mips。
三、Application多继承
作为一个SDK提供方,假如你的SDK需要用户继承你的Application,我觉得应当提供一个Application多继承的解决方案,毕竟用户可能不仅仅只用你一个SDK,当有多个SDK有这个需求时就尴尬了。
java 多继承,这里的需求是继承两个类,并不是通过实现接口的方式“继承”多个接口上的方法声明。语言原生不支持,这样就比较麻烦了。解决办法如下:
通过接口实现 + 反射 的方式来创建代理Application对象,曲线实现Application的多继承,由于代码较多,这里就不贴源码了,解决方案:ApplicationProxyDemo 源码配合注释食用,风味更佳!
网友评论