今天周末,也是刚起床,昨天晚上睡觉比较晚一点钟才睡,为了就是实现一个SDK打包问题,虽然不是上班时间,但由于负责2项项目的研发,用工作的时间明显不够用,而且这也是我第一次接触到SDK开发,内心是有点抵触的,但为了使自己能够更加优秀,就开始学习了SDK开发的基本的思路和知识点。
其实SDK开发和app的开发都差不多,主要的区别在于SDK开发需要集成。集成也有两种方式一种是打包成jar包,另外一种是打包成aar文件,区别在于jar包的文件只有class类不包含资源文件,aar包含资源文件。
对于我们聊天的SDK里面是有聊天页面的,所以我这里的打包方式是基于aar打包的方式
step one
1.打开gradle application改为library applicationId删除。
2.打开清单文件。把红框中的内容去掉
3.选择release 方法步骤如下图
4.点击androidstudio右上角的gradle 步骤如下 点击 assembleRelease
5.编译成功后 找到aar
到这里aar的打包流程差不多已经结束了,但如果你认为这样会就能成功,那还不如去百度搜打包aar一大把的资料,我还有必要写这篇文章吗?
答案显然不是,当你打包成功使用一个测试的项目进行测试的时候你会发现很有问题。主要问题就是涉及到第三方依赖的问题,你会发现,当你引用SDK接口运行的时候找不到aar中引用的三方库,为什么呢?原因在于打包aar只是单纯的引用library项目中的class和资源,对于需要的第三方依赖是没有引入到aar中的,一种简单的方法就是在你的项目gradle中重新引入依赖,这样是可以运行的,但这本身就是一个问题,所以不推荐使用这种简单粗暴的方法
具体的方法我现在只知道两种如果有小伙伴知道其他方法的可以交流一起学习成长,主要如下
一种是直接把三方库作为jar包导入到你的SDK中,如果有很多的引入呢都用jar包 貌似也可以。但我这里不是这样处理的,如果你有兴趣的话可以尝试一下,也可以跟我交流你是怎样引入以及打包成SDK并能够正常运行的
还有一种就是使用maven,这种方式在很多地方都用到过,对于aar中有第三方依赖这种方法很实用,也很简单,虽然在实践的过程中花费了我大量的时间毕竟是第一次接触SDK,通过这篇文章能够让更多的朋友少走弯路,节省大量时间,如果对你有帮助的话。记得给个小赞哟,闲话不多讲,就是干
打开你的SDK。gradle文件配置如下
第一步
第二步 implementation'com.novoda:bintray-release:0.2.7'
点击Android studio右上方的同步一下。 下面的重点来了 groupId 中的xxx是你公司的名称这个对于程序员的你来说应该都知道
下面这段放在依赖三方的下面。然后再点击同步
publishing { publications { maven(MavenPublication) { groupId 'com.xxx.im' //You can either define these here or get them from project conf elsewhere artifactId 'IMLib' version '0.0.2-SNAPSHOT' artifact "$buildDir/outputs/aar/app-release.aar" //aar artifact you want to publish //generate pom nodes for dependencies pom.withXml { def dependenciesNode = asNode().appendNode('dependencies') configurations.implementation.allDependencies.each { dependency -> if(!"unspecified".equals(dependenciesNode.name)){ def dependencyNode = dependenciesNode.appendNode('dependency') dependencyNode.appendNode('groupId', dependency.group) dependencyNode.appendNode('artifactId', dependency.name) dependencyNode.appendNode('version', dependency.version) } } } } } //publish to filesystem repo repositories{ maven { url "$buildDir/repo" } }}
同步完成后,点击Android studio的右上角的grandle你会找到如下图所示
点击publish 编译完成后,你会发现我们想要的aar文件和pom文件,简单介绍一下pom文件,这个文件就是我们的第三方引用文件。我们引用三方文件有两种一种是compile 现在多用implementation或者api 区别可以在网上找这种很多的,当你用这种方式的时候其实就是引用的jar包可以在External Libraries中找到,还有一种方式就是使用pom的方式引用这种主要是在进行SDK开发的时候用的比较多,这个也是我第一次遇到
打开pom文件进行查看你会发现你引用的三方的文件名称版本号等
这样打包SDK就算完成了,如果你有私服的话也可以把生成的文件放入到私服中,别人使用你的SDK的时候他也可以通过implements的方式来引用你的SDK了
打包完成。如何使用呢。很简单。在你的项目的根gradle中加入本地路径
项目gradle中加入
implementation ('com.zhoafan.im:IMLib:0.0.2-SNAPSHOT@aar'){transitive=true}就可以了。 transitive=true的作用就是引用三方依赖pom文件
接入接口运行 还是会出现一些问题 如你引用第三方资源失败 主要是你没有在根gradle中引入三方的相关库如。 maven{url'https://jitpack.io'}等等
还有就是pom中需要把implementation'com.novoda:bintray-release:0.2.7依赖去掉 还有就是不相关的引用删掉 我出现的引用出现的问题也就是这两种问题,如果对你有帮助 记得点个赞👍 如有更好的关于SDK开发的文档和资料也希望留言。如还是不行记得留言。还有就是这篇文章主要是SDK打包到本地使用 如有时间再来一篇关于上传私服引用的SDK开发
祝大家周末愉快,也快到元旦了。提前祝大家元旦快乐!!!
最近有读者问我如何将sdk生成的文件上传到私服,为此做了一篇文章来讲解介绍了下,如果有读者对上传到服务器有疑问的。可以查看我的另外一篇关于如何上传到服务器的文章https://www.jianshu.com/p/68d2d4e217b5