使用android studio打jar包并且集成第三方开源库(修改补充篇)
关于使用android studio打jar包的文章我写了好几篇了,看看之前的也知道了,一共没写多少文章,但关于这个问题的文章占了不小的比例,并不是恶意刷文章数量,没有意义。一是因为近来接触这块比较多,二是最开始没遇到的问题(主要是评论中提出来的一些疑问)随着时间的推移慢慢浮现,如果每次都在同一篇文章后补充添加或修改原文,会使文章太长太乱,有的人一看就怕了,问题还没解决就不想往下看了。而且这些文章并不是都类同的,有必要单独成文。OK,进入正题。
首先这篇文章是承接之前的一篇的(https://blog.csdn.net/builder_taoge/article/details/81180487),我写完那篇文章后没多久就看到了下面这篇文章(https://blog.csdn.net/u012246458/article/details/70171776),这类文章是我找了好久的,但是到最后没找到合适的,只能自己摸索着来,感觉自己的办法还是有些笨的,现在好了,找到了省事一些的,赶紧拿出来分享一下,我在此基础上根据自己的实际情况写了一遍,下面举个简单的例子说明,没啥复杂逻辑。
需求:我要将自己的代码打成一个jar包,并且这个jar包里依赖第三方开源库,如图1.
图1.
我自己就写了两个类,一个是网络请求HttpHelper,一个是图片加载ImageLoader,分别使用到了retrofit2和glide开源库,其中因为retrofit2.0是基于okhttp的,所以你能看到图中libs目录下还有okhttp和okio两个开源库的jar.
写完自己的逻辑代码之后就可以在这个类库项目的build.gradle文件中配置打包的命令了,这是最关键的地方。
图2.
配置就是图2中这些,将图中用到的开源库名字换成你自己用到的就行了,下面给出非图片的格式,你可以直接复制粘贴,然后自己改一下:
task makeJar(type:Jar){ archivesBaseName = "mylib" from(project.zipTree('build/intermediates/packaged-classes/release/classes.jar')) from(project.zipTree('build/intermediates/packaged-classes/release/libs/okhttp-3.11.0.jar')) from(project.zipTree('build/intermediates/packaged-classes/release/libs/glide-3.6.0.jar')) from(project.zipTree('build/intermediates/packaged-classes/release/libs/retrofit-2.4.0.jar')) from(project.zipTree('build/intermediates/packaged-classes/release/libs/okio-1.15.0.jar')) destinationDir = file('build/libs') } makeJar.dependsOn(build)
最后就是执行打包的任务(task)了,在android studio带的命令行里直接执行gradle makeJar就OK了,前面的文章都说过了。
图3.
图4.
图5.
可能存在的疑问:
①如果你在GitHub上找开源库,一般都是告诉我们怎么引入这个开源库,比如gradle中使用compile 'com.xxx.xxx:xxx:1.0'的方式,以及maven中使用类似下边这样的方式(图6用okhttp为例):
<dependency>
<groupId>com.xxx.xxx</groupId>
<artifactId>xxx</artifactId>
<version>1.0</version>
</dependency>
图6.
但是,如果找不到jar包,怎么办?
第一种情况,通过上图6你也看到了,不少开源库都是提供了jar包下载的链接的(图中那个the latest JAR),或是在当前页给一个直接下载的链接,或是给一个开源库的官网链接(图7),进去以后一般也有jar包下载地方,一定要好好找找。
图7.
第二种情况,GitHub上确实没有下载链接,那么你可以去各种仓库中找(图8),比如*仓库(http://search.maven.org/),Maven 仓库(http://mvnrepository.com/)等等,它们是什么关系我不知道,哈。
图8
第三种情况,就是上一篇文章中说的自己使用开源库的源码编译构建。
第四种情况,这是终极方法,再解决不了问题,我暂时也无能为力了。
图9.
看到上图了吗?你android studio中每个项目目录下都有这个外部类库,如果你在gradle中通过compile '...'的方式引入了其他的库,那么都会在这个地方出现相应的jar包,这是gradle缓存的文件,你选中你想要的那个jar包,右键->选择"Copy Path"->记事本中粘贴出这个路径,然后你就根据这个路径找到这个jar包在你电脑的哪里了。
图10.
一般默认的这个路径是\Users\用户名\.gradle\caches\modules-2\files-2.1\...然后这里面是你所有通过gradle引入的开源库,每个开源库目录下可能有多个版本,选择你想要的版本打开,里面一般是三个子目录,都是数字组成,分别是源代码的包,你要找的jar包以及pom文件。
11.
OK,说到这里第一个可能存在的疑问已经都说完了。
第二个疑问:一定要通过jar的方式集成才行,不能直接在gradle或maven中配置好路径直接打包?
答:很遗憾,目前这种方式我还没尝试成功,这也是我一直想解决的问题,如果你已经解决,真心希望你能告知一下。最早使用eclipse的时候打包可能会很省事,现在已经几年不用了,也不想再为此安装一个去使用了,有兴趣的可以尝试。