前言

公司经常和客户提供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')
//指定打包的class
include "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')
//过滤不需要的class
exclude "**/**/BuildConfig.class"
exclude "**/**/BuildConfig\$*.class"
exclude "**/R.class"
exclude "**/R\$*.class"
//指定打包的class
include "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包和aar包

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

  3. Android Studio导入第三方jar包或依赖工程的方法

    Android Studio导入第三方jar包或依赖工程的方法   一 导入jar包的方法 1.打开自己的工程,将需要导入的jar包copy到libs文件夹下 2.在导入的jar包处单击菜单 Add ...

  4. Android Studio 怎样打JAR包

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

  5. Android Studio 导入系统 jar包

    1.当前需要导入系统jar包的module所对应build.gradle中添加如下依赖: provided files('libs/classes-full-debug.jar') 也可以图形化设置: ...

  6. (转载) android studio library生成jar包和aar的方法总结

    android studio library生成jar包和aar的方法总结 标签: android学习文档jar和aar的使用与生成gradle 2016-11-25 10:39 1782人阅读 评论 ...

  7. Android Studio下打jar包

    在我们使用Eclipse时,我们常常使用的第三方类库文件大多都是jar包形式,用起来很方便.但是jar包只能打包class文件,对于Android UI类库而言,我们常常需要打包资源文件,对于界面不多 ...

  8. Eclipse / android studio 添加第三方jar包 步骤

    eclipse 将第三方包放到libs文件夹后并没有引用. 基本步骤分为3步,具体介绍如下: 打开自己的Eclipse,在自己的Android工程上名上右键->Build Path ->C ...

  9. 关于Android Studio中第三方jar包的Javadoc绑定

    原文地址:http://blog.csdn.net/a739697044/article/details/28116189   现在刚开始从Eclipse转用Android Studio,现在在尝试使 ...

随机推荐

  1. JS数据类型的转换规则

    数据类型转换的规则 1 如果只有一个值,判断这个值是真还是假,遵循只有0,NaN,'',null,undefined这五个是假的,其余的都是真 2 如果是两个值比较是否相等,遵循以下规则: ![]-& ...

  2. MySQL參数binlog-do-db对binlogs写入的影响

    1. 环境描写叙述 目的:当数据库中设置了binlog-do-db时.在不同的binlog_format=statement | row | mixed 下对binlog的写入影响,这个在主从复制中会 ...

  3. asp.net获取客户真实ip非代理ip:

    public string GetUserIP()   {       string _userIP;       if(Request.ServerVariables["HTTP_VIA& ...

  4. java学习笔记之基础语法(二)

    1.数组: 概念:同一种类型数据的集合,其实,数组就是一个容器 优点:可以方便的对其进行操作,编号从0开始,方便操作这些元素. 2,数组的格式 元素类型[]数组名=new 元素类型[数组元素个数]: ...

  5. jQuery获取多种input值的方法(转)

    获取input的checked值是否为true: 第一种: if($("input[name=item][value='val']").attr('checked')==true) ...

  6. DOS命令具体解释

    net use $">\\ip\ipc$Content$nbsp;" " /user:" " 建立IPC空链接   net use $" ...

  7. hadoop集群中的日志文件 分类: A1_HADOOP 2015-02-28 20:37 680人阅读 评论(0) 收藏

    hadoop存在多种日志文件,其中master上的日志文件记录全面信息,包括slave上的jobtracker与datanode也会将错误信息写到master中.而slave中的日志主要记录完成的ta ...

  8. 多校 hdu

    欢迎參加--每周六晚的BestCoder(有米!) Solve this interesting problem Time Limit: 2000/1000 MS (Java/Others)    M ...

  9. [TypeScript] Understand lookup types in TypeScript

    Lookup types, introduced in TypeScript 2.1, allow us to dynamically create types based on the proper ...

  10. position:relative和position:absolute的差别及使用方法

    这几天在做项目时遇到做选项卡的功能时,标题和内容区域的背景颜色不同.且须要选到当前标题时,此标题以下会出现下边框及小三角边框,这样就会超出标题背景颜色需覆盖以下内容区域.这时就须要用到potition ...