Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中

简介: 原文:Android项目实战(二十四):项目包成jar文件,并且将工程中引用的jar一起打入新的jar文件中前言: 关于.jar文件: 平时我们Android项目开发中经常会用到第三方的.jar文件。
原文: 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文件。

 

目录
相关文章
|
26天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
97 1
|
28天前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
82 2
|
29天前
|
XML Java 数据库
安卓项目:app注册/登录界面设计
本文介绍了如何设计一个Android应用的注册/登录界面,包括布局文件的创建、登录和注册逻辑的实现,以及运行效果的展示。
110 0
安卓项目:app注册/登录界面设计
|
19天前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
10天前
|
前端开发 JavaScript 测试技术
Android适合构建中大型项目的架构模式全面对比
Android适合构建中大型项目的架构模式全面对比
24 2
|
23小时前
|
前端开发 JavaScript 测试技术
android做中大型项目完美的架构模式是什么?是MVVM吗?如果不是,是什么?
在 Android 开发中,选择合适的架构模式对于构建中大型项目至关重要。常见的架构模式有 MVVM、MVP、MVI、Clean Architecture 和 Flux/Redux。每种模式都有其优缺点和适用场景,例如 MVVM 适用于复杂 UI 状态和频繁更新,而 Clean Architecture 适合大型项目和多平台开发。选择合适的架构应考虑项目需求、团队熟悉度和可维护性。
16 5
|
28天前
|
编译器 Android开发
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
配置环境变量,使CMakeLists.txt可直接使用Android NDK工具链编译项目
|
28天前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
88 0
|
4月前
|
Java
[JarEditor]可直接修改jar包的IDEA插件
### 修改JAR包变得更简单:JarEditor插件简介 **背景:** 开发中常需修改JAR包中的class文件,传统方法耗时费力。JarEditor插件让你一键编辑JAR包内文件,无需解压。 **插件使用:** 1. **安装:** 在IDEA插件市场搜索JarEditor并安装。 2. **修改class:** 打开JAR文件中的class,直接编辑,保存后一键构建更新JAR。 3. **文件管理:** 右键菜单支持在JAR内新增/删除/重命名文件等操作。 4. **搜索:** 使用内置搜索功能快速定位JAR包内的字符串。
431 2
[JarEditor]可直接修改jar包的IDEA插件
|
4月前
|
弹性计算 Java Serverless
Serverless 应用引擎操作报错合集之上传自定义JAR包,启动时报错,是什么导致的
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。