学习目标:
清晰开发SDK流程什么是SDK:
SDK全称 Software Development Kit,广义上的 SDK 是为特定的软件包、软件框架、硬件平台、操作系统等建立应用程序时所使用的开发工具的集合,狭义上的 SDK 则是基于系统 SDK 进行开发包装的、新的、独立的、能够完成特定功能并返回相关数据的一组工具的集合。
简单来说:将一些业务逻辑独立出来,打包成jar、so、aar,暴露一些APIs给外部调用,也可以称为SDK。如推送SDK,支付SDK,地图SDK…
jar和aar包区别:
JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。
Aar中Android库项目的二进制归档文件,包含所有资源,class以及res资源文件全部包含。
SDK包开发流程:
1)设计sdk 主要从:稳定性,性能,安全三方面考虑。
2)开发编码。
3)编写集成文档。
安卓SDK开发注意点
1)资源id命名
Values中的colors、strings、styles中的id命名应当注意保持一定的唯一性(如:命名统一加项目前缀),避免与主项目中的资源id冲突,造成SDK中的资源被覆盖,如theme、string等等。
2)资避免创建Application对象
若SDK中定义了Application对象,而主项目也定义了Application或者应用了第三方Application,则需将android:name属性替换掉,才能正常 编译,因为一个App只能指定一个Application,若直接替换,则会造成SDK中的Application无法初始化。
解决方案:
1、避免在SDK中创建Application对象,暴露出一个初始化方法,在主项目的Application相关方法如onCreate()中注入相关参数执行;
2、若无法避免,则可指定主项目的Application继承自SDK中的内置Application,问题可以解决。
3)无法将第三方库打包进aar
library打包出来的 AAR ,不会将依赖的第三方库打包进去。
解决方案:
1、将AAR发布到远程仓库,这样gradle依赖下来的时候就会自动依赖第三方库了。
2、在主项目中显式指定SDK中的第三方依赖包,如常见的gson、okhttp等等…
4)混淆问题
默认情况下,proguard-rules.pro中的混淆配置是不会被打包进aar中的所以一般需要在主项目中手动指定混淆规则。
解决方案:
指定consumerProguardFiles属性,自定义引入的混淆规则,即可将*.pro文件打包进入aar中,项目打包时就会自动合并该配置文件。
consumerProguardFiles 'proguard-rules.pro'
如何保证提供的SDK安全
1)添加混淆。
2)尽量少暴露接口/方法。
如何二次打包(封装)AAR
1)先将提供的aar解压到本地。
2)创建一个新的moudle,将classes.jar文件放到新的moudle。
3)将对应的解析文件放到对应的文件夹。
4)将jar包依赖到.gradle下。
生成aar包
2.9aar使用方式
1.将打包出来的arr文件加入到libs中
2.在module的build.gradle中与android{}平级下加入
repositories {
flatDir {
dirs 'libs'
}
}
3.在module的build.gradle中的dependencies里加入
implementation(name: 'sdk', ext: 'aar')//注意这里加入的名字没有后缀名
4.同步后可以在External Libraries中查看新加入的包