Android studio 将 Module 打包成 Jar 包
整理记录 AndroidStudio 把一个 module 项目打包成 jar 包。
一、默认自动生成的 jar 包
众所周知 android studio 会在library所依赖的 app运行 或 build 之后自动生成 jar 包,路径为 Module根目录/build/intermediates/bundles/debug or release/classes.jar,这样生成的jar是可以用的,但不是我们可以控制的,所以我们需要通过其他方式来解决这个问题。
注意:
若发现 Android Studio 项目 bundle 文件夹下没有 release 目录,可能是没有将 module 添加到主 module 依赖中。
方式1:主module右键 --> 倒数第二个Open Module Setting--> 上面最后一个选项Dependencies-->右边绿色加号-->Module dependency......然后确定
方式2:主Module的gradle的dependencies(平时添加第三方库的地方)中加上 compile project(':lib-zxing')
二、自定义生成 jar 包
首先,需要将待打包 module 项目中的 build.gradld 文件进行修改,如下图:
其次,在 build.gradle 文件中加入如下代码:
方式一:
def _BASENAME = "TestJar";
def _VERSION = "_V1.0";
def _DestinationPath = "build"; //生成jar包的位置
def zipFile = file('build/intermediates/bundles/default/classes.jar'); //待打包文件位置 task deleteBuild(type:Delete){
delete _DestinationPath + _BASENAME + _VERSION + ".jar"
} task makeJar(type:Jar){
from zipTree(zipFile)
from fileTree(dir:'src/main',includes:['assets/**']) //将assets目录打入jar包
baseName = _BASENAME + _VERSION
destinationDir = file(_DestinationPath)
} makeJar.dependsOn(deleteBuild, build)
方式二:打包的 jar 只有源代码的.class 文件,不包含资源文件
task makeJar(type: Copy) {
delete 'build/TestJar_V1.0.jar' //删除之前的旧jar包
from('build/intermediates/bundles/default/') //从这个目录下取出默认jar包
into('build/') //将jar包输出到指定目录下
include('classes.jar')
rename('classes.jar', 'TestJar_V1.0.jar') //自定义jar包的名字
}
makeJar.dependsOn(build)
方式三:
task clearJar(type: Delete) {
delete 'build/TestJar_V1.0.jar' //jar包的名字,随便命名
}
task makeJar(type:org.gradle.api.tasks.bundling.Jar) {
//指定生成的jar名
baseName 'TestJar_V1.0'
//从哪里打包class文件
from('build/intermediates/bundles/default/')
//打包到jar后的目录结构
into('build/')
//去掉不需要打包的目录和文件
exclude('test/', 'BuildConfig.class', 'R.class')
//去掉R开头的文件
exclude{it.name.startsWith('R');}
}
makeJar.dependsOn(clearJar, build)
注意:
以上配置信息要与 android {…….} 配置的脚本成平级关系。
其中 _BASENAME = "TestJar"; _VERSION = "_V1.0"; 是定义生成 jar 包的名字为TestJar_V1.0.jar。
配置好以后就可以编译jar包了,有两种方式:






对于以上配置 form 默认 jar 包部分,在用目录是 from('build/intermediates/bundles/release/') ,注意粗体部分,最初我也是按照这个目录写的,确实没问题。但后来,也就是Android Studio 更新到2.3以后,发现这个目录没有了,取而代之的是 default 和 debug 目录,debug目录之前也是有的,没有变化,只是原来的release目录被现在的default目录代替了。这导致我后来生成jar包的时候始终没有找到jar包,报上图所示错误。
原因就是没有了 release 目录,找不到默认的 classes.jar 文件,所以也就没有生成自定义名字的jar包,改为 default 或者 debug 目录以后就能正常生成jar包了,要注意这点变化。
问题2
Execution failed for task ':mylibrary:lint'.
> Lint found errors in the project; aborting build.
解决在 build.gradle 文件中,加入下面的代码块(注意代码块所在的位置),重新执行 gradlew makeJar 命令。
android {
lintOptions {
abortOnError false
}
...
}
最后注意:
将被嵌入的应用打包成 jar 包,但是这样的方式有局限性,无法将被嵌入的应用所使用的资源性文件一起打包。下面介绍 aar 打包方式。
三、直接使用 aar 包
如果Project 中 Module 是一个应用,则在 Module 的 build.gradle 文件中定义属性为:apply plugin: 'com.android.application';而如果 Mudule 是一个被引用的依赖 lib 库的话,则在 Module 的 build.gradle 文件中定义属性为: apply plugin: 'com.android.library;所以当我们将应用 Module 打包出 aar 文件的时候,需要修改类型属性。正常情况下,直接重新编译 Module,生成的 aar 包在 Module 根目录的/build/outputs/aar/,如下图:

A 在 android 中加入,如下:
repositories {
flatDir {
dirs 'libs'
}
}
B 在 dependencies 中加入 compile(name:lib-zxing-release', ext:'aar')
完整 build.gradle 文件如下:
apply plugin: 'com.android.application'
android {
...
repositories {
flatDir {
dirs 'libs'
}
}
}
dependencies {
...
compile(name:'lib-zxing-release', ext:'aar')
}
最后,重新编译 Rebuild 的以下工程。
Android studio 将 Module 打包成 Jar 包的更多相关文章
- 【Android端】代码打包成jar包/aar形式
Android端代码打包成jar包和aar形式: 首先,jar包的形式和aar形式有什么区别? 1.打包之后生成的文件地址: *.jar:库/build/intermediates/bundles/d ...
- [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
(1)项目导入JAR包:1.在项目目录里建立一个libs目录,将外部jar包拷贝在里面.2.右键点击项目,Bulid Path->Configure Build Path3.在设置Libraie ...
- 使用ANT将Android打包成Jar包
本文主要实现使用ANT,将Android项目打包成jar,为方便其他项目使用. ANT可以去官网下载(http://ant.apache.org/) 先介绍打包的步骤,打包脚本下方贴出 步骤: 1,将 ...
- [Java] Java 打包成jar包 和 解压jar包
解压jar包 jar xf xxx.jar 打包成jar包 方法一:通过jar命令 jar命令的用法: 下面是jar命令的帮助说明: 用法:jar {ctxui}[vfm0Me] [jar-file] ...
- 【spring boot】idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到(转)
转自:https://www.cnblogs.com/sxdcgaq8080/p/7727249.html 接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p ...
- Android Studio将项目打包成apk
Android Studio将项目打包成apk 第一种方法:适合自己调试用. (1)直接在项目中生成: (2)位置是在你的项目中 第二种方法:适合发布应用. (1)找到Generate Signed ...
- springboot打包成jar包后找不到xml,找不到主类的解决方法
springboot打包成jar包后找不到xml,找不到主类的解决方法 请首先保证你的项目能正常运行(即不打包的时候运行无误),我们在打包时经常遇到如下问题: springboot打包成jar包后找不 ...
- maven把项目打包成jar包后找不到velocity模板的bug
使用springmvc 开发时候要实现发送velcotiy模板邮件,在配置正常后,在本地测试正常后,使用maven打包成jar包后,报以下错误, Caused by: org.apache.veloc ...
- 【spring boot】6.idea下springboot打包成jar包和war包,并且可以在外部tomcat下运行访问到
接着上一章走呗:http://www.cnblogs.com/sxdcgaq8080/p/7712874.html 然后声明一点,下面打包的过程中,scope一直都是使用默认的范围 <!--用于 ...
随机推荐
- C#编程(二十八)----------泛型类的功能
泛型类的功能 在创建泛型类时,还需要一些其他的C#关键字.例如,不能把null赋予泛型类型.此时,可以使用default关键字.如果泛型类型不需要object类的功能,但需要调用泛型类上的某些特定方法 ...
- [Android实例] Handler+ExecutorService(线程池)+MessageQueue模式+缓存模式
android线程池的理解,晚上在家无事 预习了一下android异步加载的例子,也学习到了一个很重要的东东 那就是线程池+缓存 下面看他们的理解. [size=1.8em]Handler+Runn ...
- 异步图片下载引擎(升级版——ExecutorService+handler)
[Android分享] 异步图片下载引擎(升级版——ExecutorService+handler) [复制链接] 皮诺 13 主题 5 好友 844 积分 No.4 中级开发者 升级 2 ...
- Linux下Tomcat的启动、关闭
在Linux系统下,启动和关闭Tomcat使用命令操作. 进入Tomcat下的bin目录 1 cd /java/tomcat/bin 启动Tomcat命令 1 ./startup.sh 停止Tomca ...
- 血族第四季/全集The Strain迅雷下载
当第四季开始时,故事时间已经过去九个月.世界陷入黑暗,斯特里高伊吸血鬼控制了一切.第三季结尾的爆炸引发了一场全球核灾难,核冬天的到来令地表变得暗无天日,斯特里高伊获得解放.它们大白天也能出来活动,帮助 ...
- 暴君第一季/全集Tyrant迅雷下载
本季第一季 Tyrant Season 1 (2014)看点:虽然李安退出了FX系列剧<暴君>(Tyrant),称不想耽误了剧集的制作,但显然FX对这部剧的重视程度非比寻常,因为他们找来的 ...
- [rrdtool]监控和自己主动绘图,简单的监控.md
如今想要监控服务的流量和并发数,但是又没那么多时间来写系统.其它的运维系统又不熟悉,于是就用现有的rrdtool shell做了个简单的监控界面,暂时用下,也算是个小实验把. rrdtool也是刚接触 ...
- Android Studio 下载地址
下载地址:https://developer.android.com/sdk/index.html#download 这个网址可以下载需要的东西,FQ的话可以给 xifulinmen@gma ...
- 离线环境下使用二进制方式安装配置Kubernetes集群
本文环境 Redhat Linux 7.3,操作系统采用的最小安装方式. Kubernetes的版本为 V1.10. Docker版本为18.03.1-ce. etcd 版本为 V3.3.8. 1. ...
- Asp.Net 拦截请求自定义处理
需求: 在Aps.Net 应用中,对于浏览器请求的部分url的地址自定义处理,不交给路由系统或页面. 解决方案: 在全局文件Global.asax中 ,提供Application_BeginReque ...