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
工具进行转换。
- 下一步
- 下一步
- 输入要生成程序的名称、保存的路径、icon(可不选)
- 程序的名称
- 绿色+号添加jar包 ,Main class 选择
- jre版本:1.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,