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文件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏蓝天

几种修改Linux主机名的方法

在安装一些系统时,需要修改hostname,比如安装Hadoop时需要修改主机名,而且主机名不能包含下划线。

1332
来自专栏IT笔记

Linux下用户组、文件权限详解

用户组 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念 所有者 所在组 其它组 改变用户所在的组 ...

3524
来自专栏北京马哥教育

70条常用Linux基础命令总结

? [root@ping ~]# tree -L 1 / #使用tree 命令查看根目录下的一层的目录结构 ls - list directory co...

3147
来自专栏python3

mysql-创建用户和授权

我们知道我们的最高权限管理者是root用户,它拥有着最高的权限操作。包括select、update、delete、update、grant等操作.

692
来自专栏青枫的专栏

粘贴到vi/vim的代码,怎样避免向右不断缩进,保持原来的格式?解决vi/vim在粘贴中会在行首多很多缩进和空格的问题。

SecureCRT会将你原来的文本原封不动的按照字符串的样式发送给服务器。所以当你的服务器上的vi/vim设置为autoindent的话,在 i 模式下,那么它...

772
来自专栏我的博客

nginx编译参数详解

Nginx 使用 liunx/Unix 下常用的 ‘./configure && make && make install’ 过程来编译安装。 configur...

3406
来自专栏Java帮帮-微信公众号-技术文章全总结

错误集锦1-HttpServlet was not found on the Java Build Path。

我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServle...

3057
来自专栏北京马哥教育

汇总:Linux文件管理的50个命令

文 | 糖豆 图 | 来源网络 糖豆贴心提醒,本文阅读时间6分钟,文末有秘密! Linux cat命令 cat 命令用于连接文件并打印到标准输出设备上...

4336
来自专栏cloudskyme

虚拟化平台cloudstack(2)——安装(上)

vmware workstation安装ubuntu server12.04 这个其实没什么说的了,下软件,安装,一顿下一步,OK。 安装完成后,为ubuntu...

2658
来自专栏mantou大数据

MacOS多版本Python切换方案

2284

扫码关注云+社区