前言

公司经常和客户提供SDK,提供一个jar包sdk是一件很平常的事。Eclipse 有图形界面和向导供开发者将一个项目导出为jar包,相对来讲是比较简单的,切换到Android Studio后,则需要结合gradle来配置生成jar 包。下面介绍两种生成jar的方法
1.新建New Project ,然后 New Module(名字以ylwlibrary为例)

2.主工程app:build.gradle 中添加依赖

dependencies {...compile project(':ylwlibrary')}

一,傻瓜式搬运工

1.在library的app:build.gradle 中添加如下代码:

//Copy类型
task makeJar(type: Copy) { //删除存在的delete 'build/libs/SkSDK.jar' //设置拷贝的文件from('build/intermediates/bundles/release/') //打进jar包后的文件目录into('build/libs/') //将classes.jar放入build/libs/目录下 //include ,exclude参数来设置过滤 //(我们只关心classes.jar这个文件)include('classes.jar') //指定打包的classinclude "com/test/**/*.class" //重命名rename ('classes.jar', 'SkSDK.jar')
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar

2.Terminal 中输入命令gradlew makeJar

然后在终端执行 gradlew makeJar 命令,就可以在bulid/libs 目录下生成对应的jar包。

(我使用的是AS2.3.3 ,郁闷的是找不到build/intermediates/bundles/release,解决方案详见另一篇博客)

但这种打包方式经常会把一些冗余的文件一块打进jar ,不仅影响jar包的体积,还会经常导致com.android.dex.DexException: Multiple dex files define 此类的错误 。

原因是sdk 的jar包中打入了BuildConfig.class,解决方法很简单:解包,删除里面的 BuildConfig.class,然后重新打包 jar。
具体如下:
1. 解压jar包: jar xf xxx.jar
2. 删除解压后目录里面的//BuildConfig.class
3. 重新打包: jar cvf xxx.jar *

当然我们不希望自己提供的jar 也给其他开发者带来同样的困扰,所以我们期待可以有选择性的选择需要打包的class,排除不需要的class ,如BuildConfig.class、R.class 等

task makeJar(type: Jar) {delete 'build/libs/SkSDK.jar'from file('build/intermediates/classes/release')archiveName = 'SkSDK.jar'destinationDir = file('build/libs') //过滤不需要的classexclude "**/**/BuildConfig.class"exclude "**/**/BuildConfig\$*.class"exclude "**/R.class"exclude "**/R\$*.class" //指定打包的classinclude "com/test/**/*.class"
}
makeJar.dependsOn(build)
//在终端执行生成JAR包
// gradlew makeJar

二,纯手工打造

在library的app:build.gradle 中添加如下代码:

task clearJar(type: Delete) {delete 'build/libs/TestSDK.jar'delete 'libs/TestSDK.jar'
}
//打包任务
task makeJar(type: Jar) { //指定生成的jar名baseName 'TestSDK' //从哪里打包class文件from('build/intermediates/classes/release/com/interjoy/ylwlibrary') //打包到jar后的目录结构into('com/interjoy/ylwlibrary/') //去掉不需要打包的目录和文件exclude('BuildConfig.class', 'R.class') //去掉R$开头的文件exclude { it.name.startsWith('R$'); }
}
makeJar.dependsOn(clearJar, build)

Android Studio如何打jar包相关推荐

  1. Android Studio 怎样打JAR包

    Android Studio 怎样打JAR包 在eclipse中我们知道怎样将一个项目导出为jar包,供其他项目使用. 在AS中能够通过改动gradle才处理. 我们新建一个项目MakeJar,在项目 ...

  2. Android Studio 如何打JAR包

    Android Studio 如何打JAR包 在eclipse中我们知道如何将一个项目导出为jar包,供其它项目使用.  在AS中可以通过修改gradle才处理.  我们新建一个项目MakeJar,在 ...

  3. Android Studio下导出jar包和aar包

    Android Studio下导出jar包和aar包 jar包和aar包的区别 步骤 1. 创建Android工程 创建工程比较简单,不错复述 2. 创建一个Library(Module) 创建了一个 ...

  4. Android Studio 引用系统 jar 包的正确姿势

    博客: 安卓之家 微博: 追风917 CSDN: 蒋朋的家 简书: 追风917 Android Studio 如何引用 jar 包,相信大家都会操作的,现在问题来了,对于系统里的 jar,比如 fra ...

  5. Android Studio如何添加jar包

    在开发中遇到ContextCompat类中找不到CheckSelfPermission()方法的问题,百度了很久,虽然知道是 v4 jar 包版本低的原因,但是一直没有较好的解决办法方法,现在总结如下 ...

  6. Android Studio中解决jar包重复依赖导致的代码编译错误

    在原本的代码中已经使用了OKHTTP和rxjava,然后今天依赖retrofit的时候一直报错 Program type already present: okhttp3.internal.ws.Re ...

  7. android studio gradle 打jar 包 (混淆+第三方库包)

    将依赖的第三方库打包进自己的jar包 1.先将第三方的库包拿到,然后添加jar包到项目的libs. 2.项目的build.gradle脚本添加下面的task: 1 task buildJar(depe ...

  8. Android studio混淆第三方jar包时报错

    今天在做项目的混淆打包的时候.报错: Warning:Exception while processing task java.io.IOException: The same input jar [ ...

  9. Android Studio使用外部jar包

    项目中使用了 org.apache.commons.lang包 没有找到如何通过gradle自动编译此包,如有知道的同仁,请不吝赐教,谢谢. 这里是通过外部添加jar包的方式实现的. 首先 commo ...

  10. Android studio 中引用jar的其实是Maven?(一)

    由于Studio比eclipse多了一步对工程构建的步骤,即为build.gradle这个文件运行,因此其引入第三方开发jar包与lib工程对比Eclipse已完成不同,引入第三方jar与lib工程显 ...

最新文章

  1. 【Android OpenGL ES】阅读hello-gl2代码(二)Java代码
  2. LSTM为何如此有效?
  3. 封装,多态,类的约束,super()深入了解
  4. NSOperation的使用细节 [1]
  5. 从源码剖析SpringBoot中Tomcat的默认最大连接数
  6. 解决Java版CKFinder无法显示缩略图问题
  7. 建筑公司木地板WordPress企业网站模板
  8. C# 调用其他的动态库开发应注意的问题
  9. (转) RabbitMQ学习之spring整合发送同步消息(注解实现)
  10. php tp3.2 去重方法,thinkPHP框架整合tcpdf插件操作示例
  11. 添加 centos 右键 terminal
  12. vba随机抽取人名不重复_用vb编写个随机滚动抽取人名的抽奖系统,怎么样做到不重复并添加一个记录显示已抽到的人名...
  13. C4D学习笔记1-动画-动画关键帧
  14. 机器学习——概率论基础
  15. Arduino Uno + HMC5883L电子罗盘 实验
  16. 罗马数字转换器|罗马数字生成器
  17. H5 AUI 使用总结
  18. Centos7下新硬盘的挂载操作
  19. CRM系统主要包含什么内容
  20. 汇编语言复习~作业一(下)

热门文章

  1. 电商网站交易记录设计
  2. list, tuple, dict, set的用法总结
  3. Android快速开发框架ZBLibrary源码分享
  4. C# 基于MySQL的数据层基类(MySQLHelper)
  5. Splash 简介与安装
  6. 采用Kettle分页处理大数据量抽取任务
  7. Android-界面-布局
  8. 提高开发效率的 Eclipse 实用操作
  9. MySQL中数据中设计中的范式与反范式
  10. failed to initialize monitor thread