Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中
前言:
关于.jar文件:
平时我们Android项目开发中经常会用到第三方的.jar文件。
其实.jar文件就是一个类似.zip文件的压缩包,里面包含了一些源代码,注意的是.jar不包含资源文件(res、图片等)
---------------------------------------------------------------------------------------------------------
一、首先学习如何在Android studio中将android项目打成.jar文件
1、在app目录下的 build.gradle文件中 添加如下红色字体代码:
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
testCompile 'junit:junit:4.12'
compile 'com.android.support:appcompat-v7:23.3.0'
}
task makeJar(type: Copy) {
delete 'build/libs/mysdk.jar'
from('build/intermediates/bundles/release/')
into('build/libs/')
include('classes.jar')
rename ('classes.jar', 'myjar.jar')
}
makeJar.dependsOn(build)
2、生成.jar文件
在Android studio 的下面有 Terminal 选项,可以看到这个命令行的形式

我们在此 输入 “gradle makeJar” 然后回车。等待片刻,变会生成 .jar文件
该.jar文件的地址为:
build/intermediates/bundles/release/
至此,我们就可以将生成的.jar放在别的项目中使用了。
二、深入探索
问题:
存在这么一种情况:
我们要打包的android项目中已经引用了一个或多个第三方.jar文件。那么我们按上面的方法打成.jar文件,在引入到别的项目中使用中,
会发现出现错误:
NoClassDefFoundError
定位到错误代码位置,会发现 生成.jar文件的原始android项目中引用的第三方.jar文件中的类找不到。
这里可以猜测,使用上述方法将android项目打成.jar文件的过程中,并没有将android项目原来引用的第三方.jar文件也一起打入到新的.jar文件中。
可以测试一下,将android项目打成的.jar文件解压缩,会发现只有java代码相关文件,而没有原来android项目中引用的第三方.jar文件
解决方案:
1、首先 问题产生的原因就是 生成.jar文件的android项目原先引用的第三方.jar文件没有被打入到 新的.jar文件中
那么我们想:怎么在android项目打成.jar文件的时候 顺带把 android项目引用的第三方.jar文化也一并打入到新的.jar文件?
试了几天,目前没有找到解决办法。。。此路不通
2、既然android项目原来引用的.jar文件打不进 要生成的.jar文件中去,我们是否可以手动的将android项目引用的第三方项目整合到android项目打成的.jar文件中去?
即 将android项目打成的.jar文件和android项目自身引用的.jar文件合并成一个.jar文件
网上查询了一番: 可以使用 ANT 工具实现 将两个或多个.jar文件合并成一个.jar文件
Apache Ant是一个基于Java的生成工具。据最初的创始人James Duncan Davidson的介绍,这个工具的名称是another neat tool(另一个整洁的工具)的首字母的缩写。
实现步骤:
(1)、下载ANT,这个网上百度一堆
(2)、配置环境变量

(3)、检测是否配置成功
点击 开始 -> 运行 -> 输入cmd
打开命令窗口,
输入如下命令:ant
如果出现如下内容,说明安装成功:
Buildfile: build.xml does not exist!
Build failed
注意:因为ant默认运行build.xml文件,这个文件需要我们创建。
如果不想命名为build.xml,运行时可以使用 ant -buildfile test.xml 命令指明要运行的构建文件。
(4)、编辑xml文件,命名随意,这里命名build.xml
打开文件编辑:
<?xml version="1.0" encoding="utf-8"?>
<project
name="hosa" //不用改 ,注意:这里的所有注释在 build.xml文件中 都不要有 是我为了给你们看解释写的
basedir="H:\soft\jar" //生成的jar存放的位置,并且将要合并的所有.jar文件也放在该目录下
default="makeSuperJar" > //不用改 <target
name="makeSuperJar" //不用改
description="description" > //不用改 <jar destfile="standingbanlanceFB.jar" > //合并后的jar文件的名称
<zipfileset src="avoscloud-sdk-v3.14.5.jar" /> // <zipfileset >标签的都是要参与合并的子jar包
<zipfileset src="fastjson.jar" />
<zipfileset src="okhttp-2.6.0-leancloud.jar" />
<zipfileset src="standingbanlance.jar" />
<zipfileset src="okio-1.6.0-leancloud.jar" />
</jar>
</target> </project>
(5)、命令行执行合并操作,输入第一行命令,红色部分是我们编辑的build.xml文件的地址

(6)、打开build.xml文件中 basedir="H:\soft\jar" 该目录,即可看到合并后的jar文件。
Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中的更多相关文章
- 【慕课网实战】Spark Streaming实时流处理项目实战笔记十四之铭文升级版
铭文一级: 第11章 Spark Streaming整合Flume&Kafka打造通用流处理基础 streaming.conf agent1.sources=avro-sourceagent1 ...
- Android项目实战(十四):TextView显示html样式的文字
项目需求: TextView显示一段文字,格式为:(消息个数,不确定)条消息 这段文字中名字和数字的长度是不确定的,还要求名字和数字各自有各自的颜色. 一开始我想的是用(转) SpannableStr ...
- Android开发(二十四)——数据存储SharePreference、SQLite、File、ContentProvider
Android提供以下四种存储方式: SharePreference SQLite File ContentProvider Android系统中数据基本都是私有的,一般存放在“data/data/程 ...
- android 学习随笔二十四(动画:帧动画)
帧动画,一张张图片不断的切换,形成动画效果 * 在drawable目录下定义xml文件,子节点为animation-list,在这里定义要显示的图片和每张图片的显示时长 * FrameAnimatio ...
- Java并发编程原理与实战二十四:简易数据库连接池
public class MyDataSource { private static LinkedList<Connection> pool = new LinkedList<> ...
- <Android 基础(二十四)> EditText
介绍 A text field allows the user to type text into your app. It can be either single line or multi-li ...
- Android笔记(二十四) Android中的SeekBar(拖动条)
拖动条和进度条非常相似,只是进度条采用颜色填充来表明进度完成的程度,而拖动条则通过滑块的位置来标识数值——而且拖动条允许用户拖动滑块来改变值,因此拖动条通常用于对系统的某种数值进行调节,比如调节音量等 ...
- 【NFS项目实战二】NFS共享数据的时时同步推送备份
[NFS项目实战二]NFS共享数据的时时同步推送备份 标签(空格分隔): Linux服务搭建-陈思齐 ---本教学笔记是本人学习和工作生涯中的摘记整理而成,此为初稿(尚有诸多不完善之处),为原创作品, ...
- miniFTP项目实战二
项目简介: 在Linux环境下用C语言开发的Vsftpd的简化版本,拥有部分Vsftpd功能和相同的FTP协议,系统的主要架构采用多进程模型,每当有一个新的客户连接到达,主进程就会派生出一个ftp服务 ...
- GJM :用JIRA管理你的项目(二)JIRA语言包支持及插件支持 [转载]
感谢您的阅读.喜欢的.有用的就请大哥大嫂们高抬贵手"推荐一下"吧!你的精神支持是博主强大的写作动力以及转载收藏动力.欢迎转载! 版权声明:本文原创发表于 [请点击连接前往] ,未经 ...
随机推荐
- .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程
在文章:这些.NET开源项目你知道吗?让.NET开源来得更加猛烈些吧!(第二辑) 与 .NET平台开源项目速览(3)小巧轻量级NoSQL文件数据库LiteDB中,介绍了LiteDB的基本使用情况以及部 ...
- 使用Ubuntu 12.04作为日常电脑环境
搜狗输入法出来之后,我觉得有必要写一篇博客说明一下,如何使用Ubuntu作为日常的电脑系统.我使用的Ubuntu版本是12.04,没有使用Ubuntukylin,因为的电脑比较老,使用那个版本,电脑有 ...
- 为SharePoint 站点添加通知
作为思想.内容的共享型产品,SharePoint 不出意外的成为其中最好用的产品之一,想想平时在公司中接到通知并了解通知内容是件很平常的事情,那让这种平常的事情进入到SharePoint中可以通过如下 ...
- C#缓存操作
1.缓存辅助方法类的接口代码: public interface IThrottleStore { /// <summary> /// 试图获取值 /// </summary> ...
- Fragment基础----信息传递
如何通过activity来访问fragment的信息呢,我们可以通过一个实例来了解. 使用两个Fragment和一个activity管理 效果图: 第一个fragment来表示输入框 第二个fragm ...
- ASP.NET MVC5中View-Controller间数据的传递
使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢? 本文对于View向Controller中传值共列举了以下几种 ...
- Moon.Orm 5.0(MQL版)的高性能,将发言权交给你!
Moon.Orm 5.0性能问题,我将它交给关心它性能的您,让你自己测试,决不让你失望的. Moon.Orm 5.0 (MQL版) 版本维护及下载 (跟踪发布) Moon.Orm 5.0系列文章 火晋 ...
- 自定义iOS 中推送消息 提示框
看到标题你可能会觉得奇怪 推送消息提示框不是系统自己弹出来的吗? 为什么还要自己自定义呢? 因为项目需求是这样的:最近需要做 远程推送通知 和一个客服系统 包括店铺客服和官方客服两个模块 如果有新的消 ...
- mysql null值处理详细说明
在讲null之前,我们先看一个例子 表数据如下: 3306>select * from t1; +------+-------+ | id | name | +------+-------+ | ...
- Ionic2学习笔记(10):扫描二维码
作者:Grey 原文地址: http://www.cnblogs.com/greyzeng/p/5575843.html 时间:6/11/2016 说明: 在本文发表的时候(2016-06-1 ...