把依赖库打包进JAR中的方法

引入

在自己为Android APP编写需要的Java library的时候,往往会在library中依赖第三方的库,举个例子:
做了一个账号管理的library,其中由于需要使用http连接,所以library工程中有以下依赖

implementation 'com.squareup.retrofit2:retrofit:2.3.0'
implementation 'com.squareup.okhttp3:okhttp:3.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:3.9.0'
implementation 'com.squareup.retrofit2:converter-gson:2.3.0'
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0'
implementation 'commons-validator:commons-validator:1.6'
implementation 'io.reactivex.rxjava2:rxjava:2.1.10'

在功能开发完成,编译成class文件以后,如果只是使用jar来打包我们自己source file生成的class文件

jar cvf sample.jar -C sample_lib/build/intermediates/classes/release

问题

当把这样生成JAR file放入APP工程后,由于JAR中没有对应的依赖,会有以下问题:

  1. 在APP中使用时需要把JAR工程中的依赖在APP中再写一次;
  2. 实测哪怕添加上了依赖,compile可以过以后,在运行时会出现找不到类的runtime error;

那么在生成JAR包时,把对应library的依赖也一同打包进JAR是比较好的解法。

解决方案 - 使用IDEA

使用Android Studio没有找到现成的方法,目前对gradle也不够熟悉,没法自己动手通过编写gradle task来解决问题。
那么使用IDEABuild Artifacts就成为一个很好的方法。

步骤

初始的时候,Build -> Build Artifacts是灰色的。

disabled-build-artifacts.jpg

此时需要在File -> Project Structure中进行设置:
setting.jpg

create_JAR_from_module.jpg

不太清楚extract to the target JARcopy to the output diretory and link via manifest的区别,就直接采用默认的第一项,后续再来study差异。
继续设置要要生成的JAR的名字后,选择好要把哪一个module来打包JAR。
jar_name_and_module_select.jpg

设置完成后,Build -> Build Artifacts就已经可用了
build_artifacts_enabled.jpg

直接通过这个菜单进行JAR生成,然后在之前设置好的目录下(设置JAR包名的步骤中)去找对应的JAR就可以用了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 47,165评论 6 342
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,519评论 25 709
  • 用两张图告诉你,为什么你的 App 会卡顿? - Android - 掘金 Cover 有什么料? 从这篇文章中你...
    hw1212阅读 14,519评论 2 59
  • 说明 本文主要介绍和Gradle关系密切、相对不容易理解的配置,偏重概念介绍。部分内容是Android特有的(例如...
    jzj1993阅读 16,065评论 1 62
  • 隧道视野,之前说的不多,但坐井观天你一定很熟悉!信息匮乏或者思考不全面是引发“隧道视野”的根本原因。置身...
    蜻蜓喵阅读 1,603评论 1 2

友情链接更多精彩内容