1,*.jar(JAR 文件,Java Archive File,Java 归档文件)

1)概念

是 Java 的一种文档格式。只包含了class文件与清单文件 ,不包含资源文件,是与平台无关的文件格式。

解压:jar文件使用了ZIP压缩格式。找一个jar文件,然后修改后缀名为‘zip’或者‘rar’格式,可解压该文件,点击‘com‘文件夹就会看到里面全部是‘.class’文件。

ZIP压缩
压缩可以分为无损压缩和有损压缩,有损,指的是压缩之后就无法完整还原原始信息,但是压缩率可以很高,主要应用于视频、话音等数据的压缩。无损压缩则用于文件等等必须完整还原信息的场合。ZIP、RAR、GZIP、GIF、PNG等等都是无损压缩格式。

2)优点

JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的:
安全性、减少下载时间、传输平台扩展、包密封、包版本控制、可移植性

3)场景

JAR 文件格式以流行的 ZIP 文件格式为基础。
与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被编译器和 JVM 这样的工具直接使用。

在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。

4)使用

*.jar文件拷贝到libs目录,eclipse直接导入即可,AndroidStudio项目中添加:

dependencies {  
    compile fileTree(include: ['*.jar'], dir: 'libs')  
}

5)Pack200

Java5中带了一个压缩工具:Pack200,这个工具能对普通的jar文件进行高效压缩。其实现原理是根据Java类特有的结构,合并常数池,去掉无用信息等来实现对java类的高效压缩。由于是专门对Java类进行压缩的,所以对普通文件的压缩和普通压缩软件没有什么两样,但是对于Jar文件却能轻易达到10-40%的压缩率,甚至接近90%。这在Java应用部署中很有用,尤其对于移动Java计算,能够大大减小代码下载量。
Java5中还提供了这一技术的API接口,你可以将其嵌入到你的程序中使用。使用的方法很简单:
压缩

Packer packer=Pack200.newPacker();
OutputStream output=new BufferedOutputStream(new FileOutputStream(outfile));
packer.pack(new JarFile(jarFile), output);
output.close();

解压

Unpacker unpacker=Pack200.newUnpacker();
output=new JarOutputStream(new FileOutputStream(jarFile));
unpacker.unpack(pack200File, output);
output.close();

6)组成

JAR包比普通zip文件多了一个META-INF文件夹,该文件夹下包括了一个MANFEST.MF文件(清单文件)。

①清单文件

一般属性

Manifest-Version
用来定义manifest文件的版本号,比如:Manifest-Version: 1.0。最小的清单文件只包含这一条。
Created-By
声明该文件的生成者,一般该属性是由jar命令行工具生成的。比如:Created-By: Apache Ant 1.5.1
Signature-Version
定义jar文件的签名版本号
Class-Path
应用程序或者类装载器使用该值来构建内部的类搜索路径

应用程序相关属性

Main-Class
定义jar文件的入口类。该类必须是一个可运行的类,一旦定义了该属性就可以通过 java -jar x.jar来运行该jar文件。

7)启动

在Windows下安装JRE的时候,安装文件会把.jar文件映射给javaw.exr打开,对于一个可运行的JAR包而言,能够直接双击打开。想要制作可运行JAR包,指定Main-Class是关键。

使用cvmf命令进行打包
jar -cvmf MANIFEST.MF allenwells.jar com

可以利用jar命令中的e选项制定程序入口点。用户可以通过以下命令启动应用程序:

java -jar My.jar

制作可运行Jar包:

8)常用命令

-c 创建新的JAR文件包。

-t 列出JAR文件包的内容列表。
-x 展开JAR文件包的指定文件或全部文件。
-u 更新已存在的JAR包。对于一个已经存在的JAR包。我们任然能够向当中加入新的字节码文件或旧的字节码文件,假设已经存在路径、类名都同样的文件,则更新源文件,假设不存在。则加入该文件。清单文件也能够通过这种方式更改。

-v 生成具体的报告并打印到标准输出。
-f 指定JAR包的文件名称。通常该选项是必选的。

-m 指定须要包括的MANIFEST.MF清单文件。

-O 仅仅存储。不压缩。

生成的JAR包体积大,但运行速度快。

-M 不产生全部项的清单文件,此參数会忽略-m选项。
[-C 文件夹] 表示转到指定文件夹下去运行jar命令的操作,它相当于优先使用cd命令转到指定文件夹下运行不带-C參数的jar命令。它仅仅能在创建和更新JAR包的时候使用

以下举一些具体使用的样例:

jar tvf allenwells.jar   
显示allenwells.jar内包括文件的具体信息。

jar -xvf allenwells.jar
解压allenwells.jar到当前文件夹,并显示具体的解压过程信息。

jar cvf allenwells.jar com
将com文件夹下的class文件生成allenwells.jar文件,并显示打包过程,假设已经存在该文件,那么该文件会被覆盖。

jar cvfm allenwells.jar mymanifest.mf -C com/ . 
使用自己定义的清单文件mymanifest.mf并将com/文件夹下的全部文件归档到allenwells.jar中。allenwells.jar被保存到当前文件夹。

jar uvf allenwells.jar manifest.mf
向allenwells.jar中加入manifest.mf文件,这里仅仅是作为普通文件加入进去。
假设指定了-m选项,那么manifest.mf会作为清单文件来使用,其内容会被加入到MANIFEST.MF中。

9)IDEA打jar包

现有Idea中可运行的java项目,需要导出为jar包
1.点击File->Project Structure
2.点击Artifacts,点击添加(Add)->Jar->From modules with dependicies
3.Create Jar From Modules ,选择Main Class,该类需要有main方法,作为jar的运行入口
4.上一步选择好主类后,Idea自动设置了配置清单的路径。但这是一个坑,直接确定会导致Jar不能运行。报错:找不到配置清单。将Directory for META-INF/MANIFEST.MF改为在src路径下
5.OK->Apply,关闭设置
6.Build->Build Artifacts… ->选择添加的Jar->Build
待生成完成后,在编译输出目录下找到生成的jar包

附:在windows用bat文件运行jar
新建文本文件,后缀bat
文件内容:

cd C:\Users\MiBook\Desktop #jar包所在路径
java -Dfile.encoding=utf-8 -jar autoReport.jar
pause

10)jar2exe

使用exe4j_windows-x64_8_0.exe工具进行转换。

  1. 下一步
  2. 下一步
  3. 输入要生成程序的名称、保存的路径、icon(可不选)
  4. 程序的名称
  5. 绿色+号添加jar包 ,Main class 选择
  6. Java减压文件 java压缩包_Java减压文件

  7. jre版本:1.8
  8. 一直下一步 完成

2,*.aar,AAR(Android Archive)

1)概念

是一个Android库项目的二进制归档文件,包含所有资源,class以及res资源文件。

解压:找一个aar文件,然后修改后缀名为‘zip’或者‘rar’格式,然后解压该文件,打开解压后的文件夹,每个aar解压后的内容可能不完全一样,但是都会包含AndroidManifest.xml,classes.jar,res,R.txt。

2)场景

对于一些不常变动的 Android Library,我们可以直接引用 aar,加快编译速度。

3)使用

*.aar文件使用有两种方式:

①在线使用(网上的)

网络加载,只要你知道*.aar文件在maven中的路径即可。然后引入gradle依赖。

②添加本地的*.aar文件

在Android Studio中加载本地的*.aar文件:
(1).把aar文件放在一个文件目录内,比如就放在libs目录内;
(2).在app的build.gradle文件添加如下内容;

repositories {
        flatDir {
            dirs 'libs' 
        }
    }

(3).之后只需要添加一句gradle依赖便方便的引用了该aar文件;

dependencies {
       ...
        compile(name:'test', ext:'aar')
       ...
    }

3,