前言:公司开发离不开模块化和团队合作,我们经常会用到其他小伙伴开发好的Sdk,如果我们也想开发Sdk供别人使用,这就涉及到sdk的打包等过程。今天就抽空跟大家分享一下我在sdk打包过程中遇到的坑!
开发打包工具:AndroidStudio
仓库:Github
言归正传,我就直接进入Sdk的打包过程讲解(前提是在lib module的基础上,创建方式就不赘述了)
一.在Lib的gradle文件中加入apply plugin: 'maven'
二.建议在android节点下加入lintOptions { abortOnError false },可以忽略在打包过程的警告
三.在跟节点下加入生成本地Maven仓库的代码
uploadArchives{
repositories.mavenDeployer{
//生成本地仓库的地址
repository(url:"file://D://myaar/repository/")
// 唯一标识 如com.tencent.imLib(仅供参考)
pom.groupId = "com.公司名.lib名"
// 项目名称(socketLib)
pom.artifactId = "socketLib"
// 版本号
pom.version = "1.0.0"
}
}
四.在Terminal中执行命令gradlew uploadArchives
五.在第三步定义的文件夹下找到生成的aar文件和pom文件,上面地址为
D://myaar/repository/com.XXXX下面寻找aar包和pom文件
六.如果你的Sdk仅在本机供自己方便使用,就到此为止了。使用方式如下:
//主gradle文件下加入本地maven仓库地址(和上面的配置对应)
maven{
url 'file://D://myaar/repository/'
}
//app的gradle下加入依赖(和上面配置对应,如:com.tencent.imLib.socketLib)
implementation 'com.公司名.lib名:项目名称:1.0.0'
七.接下来点击sync按钮,进行代码同步,一般就可以顺利集成我们的sdk了。我在集成的时候,出现了如下的异常,原因是我sdk中封装了socket可okhttp代码:
异常:
java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.runtime/javalib/core-oj.jar)
原因:lamda表达式的问题
解决方案:在gradle文件下加入如下代码
compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 }
至此为止,sdk包中的功能已经可以正常使用了。如果你还想深入了解jar包和远程maven仓库的生成,请继续往下看。
八.生成Jar包的方式(与Arr包的唯一区别是:Jar保重不包含资源文件,Arr可以将资源文件一起打包到sdk)
-
在lib的gradle文件下加入如下代码
task makeJar(type: Copy) { //删除旧的jar包 delete 'build/libs/jar包名称.jar' //原地址 from('build/intermediates/packaged-classes/release/') //导出jar包的地址 into('build/libs/') //包含的jar包 include('classes.jar') //重命名jar包为mysdk rename ('classes.jar', 'jar包名称.jar') } makeJar.dependsOn(build) -
点击AndroidStudio右侧的gradle选项,点击libmodule->tasks->other->MakeJar
-
接下来就会在lib下的build->libs文件夹下生成我们的sdk Jar包。
九.生成远程maven仓库
-
在github上新建仓库,并且克隆到本地
-
将第五步生成的本地仓库的文件拷贝到克隆的仓库文件下(从第五步中com文件夹开始拷贝)
-
提交代码,更新到远程github仓库。
-
将如下模板拷贝到要集成sdk项目的根目录gradle文件下
//如我的github仓库地址是 https://github.com/XXX/mavenLib/tree/master/com/XX/XX/XX 把github.com替换为raw.githubusercontent.com 去掉master后面的内容 去掉tree字段 最终要添加的代码为: maven { url "https://raw.githubusercontent.com/XXX/mavenLib/master" } -
同第六步一样,在app的gradle文件夹下加入依赖
implementation 'com.公司名.lib名:项目名称:1.0.0' -
sync同步
附:terminal中查看依赖树代码:gradlew :module名称:Dependencies
结语:Sdk的打包过程其实并不难,只是在这个过程中会遇到各种各样的坑,有时一个小错误都可能让你崩溃。因此,细节决定成败!!
本文详细介绍了如何在Android Studio中开发SDK,包括生成AAR包、JAR包,并将它们发布到本地及远程Maven仓库。通过配置gradle文件、解决集成异常和lambda问题,确保SDK的正确打包和使用。同时,还提供了生成Jar包和部署到GitHub仓库的步骤。

362

被折叠的 条评论
为什么被折叠?



