前言
最近公司项目需要开发一个音乐类的sdk,让第三方开发者来进行执行操作!作为第一次开发sdk,其实很多东西都不是很明白,只能遇到问题就Google吧,弄到现在总算一切都成功了,现在记录一下其中开发的步骤与问题!
方案选择
前期开发sdk一定要想好自己是出什么包,这里提供两种参考:
- jar包
- arr包
他们两者是有区别的,区别在于:
- 打包出来的位置不同
AS低版本
jar: /build/intermediates/bundles/debug(release)/classes.jar
AS高版本
jar: /build/intermediates/packaged-classes/release/classes.jar
aar: /build/outputs/aar/libraryname.aar
- jar 中只包含了class文件与清单文件,
aar中除了包含jar中的class文件还包含工程中使用的所有资源,class及res资源文件全部包含
- 使用方式不同
jar使用:
1.将打包出来的jar文件加入到libs中
2.在module的build.gradle中加入代码,例如:
implementation files(‘src/lib/demo.jar’)
arr使用 (这里只讲解单层arr依赖):
1.将打包出来的arr文件加入到libs中
2.在module的build.gradle中与android{}平级下加入
repositories { flatDir { dirs ‘libs’ } }
3.在module的build.gradle中的dependencies里加入
implementation(name: ‘demo’, ext: ‘aar’)//注意这里加入的名字没有后缀名
4.同步后可以在External Libraries中查看新加入的包
开发SDK中三方库咋处理?
首先建议开发sdk尽量少使用第三方库,使用时问题很多!但是特定情况下需要必须使用咋办?例如用到网络请求等等第三方库,例如现在的okhttp已经非常成熟,我们一般选择他来作为网络请求!首先我们抛出问题
- 假如我们在sdk中的build.gradle中加入依赖,开发完毕后直接打包,这里会出现一个问题就是打出来的包里面并不包含第三方库,会出现类找不到的情况,这个时候需要第三方开发者自己来导入我们sdk中所需要的依赖,假如我们不提供文档,开发者们都不知道要导入哪些?
- 我们使用arr打包方式,将我们用到的第三方库下载下来放进libs里面然后打包,这样可以打出来的包可以把第三方库打包进去使用!但是这样又会出现一个问题就是第三方开发者经常会遇到包冲突现象!
针对上面的问题提供以下几种思路:
- 提供开发文档在文档注明需要哪些第三方,把android常用的第三方库让开发者自己导入,例如okhttp,因为这些常用,所以开发者觉得这些都不是事,不用这个sdk我都会导入这些三方库
- 把不常用的库自己封装到sdk中,因为不常用很少有开发者会用产生版本冲突现象,例如dagger2等等!
- 使用maven仓库,用bintray进行版本管理
怎样将注解类的三方库封装进SDK?
这里其实我想到的是一个很笨的方法,但是确实是能解决问题的方法,如果读者有更好的方法,欢迎交流!
以dagger2为例,怎样将他封装进sdk?
步骤1
大家都知道使用dagger会用到如下东西:
apply plugin: ‘kotlin-kapt’ dependencies{ implementation ‘com.google.dagger🗡version’ kapt ‘com.google.dagger:dagger-compiler:versio’ }