当你在UNITY3D开发的时候需要一个Android Plugin的时候回来看看这个文章吧,本篇介绍如何使用Android Studio生成jar包(MacOS)。

前情提要

  1. 请确保本地有 Android SDK,如无 请参见 Gradle环境配置一文
  2. 确保gradle环境配置完毕 请参见 Gradle环境配置一文

什么是jar包 ?

JAR(Java ARchive,Java 归档)是一种与平台无关的文件格式,可将多个文件合成一个文件。可以简单的看作类似zip的压缩包,里面存放的是代码与项目资源。
更详细的介绍在这里 JAR 文件揭密 -来自IBM公司官网 下面做一些jar的特性摘要:

JAR 文件格式提供了许多优势和功能,其中很多是传统的压缩格式如 ZIP 或者 TAR 所没有提供的。它们包括:

  • 安全性。可以对 JAR 文件内容加上数字化签名。这样,能够识别签名的工具就可以有选择地为您授予软件安全特权,这是其他文件做不到的,它还可以检测代码是否被篡改过。
  • 减少下载时间。如果一个 applet 捆绑到一个 JAR 文件中,那么浏览器就可以在一个 HTTP 事务中下载这个 applet 的类文件和相关的资源,而不是对每一个文件打开一个新连接。
  • 压缩。JAR 格式允许您压缩文件以提高存储效率。
  • 传输平台扩展。Java 扩展框架 (Java Extensions Framework) 提供了向 Java 核心平台添加功能的方法,这些扩展是用 JAR 文件打包的 (Java 3D 和 JavaMail 就是由 Sun 开发的扩展例子 )。
  • 包密封。存储在 JAR 文件中的包可以选择进行 密封,以增强版本一致性和安全性。密封一个包意味着包中的所有类都必须在同一 JAR 文件中找到。
  • 包版本控制。一个 JAR 文件可以包含有关它所包含的文件的数据,如厂商和版本信息。
  • 可移植性。处理 JAR 文件的机制是 Java 平台核心 API 的标准部分。

Eclipse平台打包 jar 的方式

  1. 自动化打jar包方法
    Build project into a JAR automatically in Eclipse -来自stackoverflow

  2. 手动导出

    1
    2
    1. Choose Export > Java > JAR file 
    2. 选中需要导出的文件即可

使用Android Studio导出jar包

Android Studio只能间接导出jar包,对此我深表遗憾,它需要新建一个android studio的空项目,然后 添加一个名为 Android Library 的库。最后将这个库导出为jar文件。这里着重说明几个我遇到的问题,

  • 需要删除test project也就是测试工程,并且在Gradle中删除测试项目的编译命令
  • 导出的代码是整个 Library 的代码

操作步骤:

  1. 下一步下一步默认即可,注意此处 你的Application Name需要大写开头
    创建工程

  2. 此处我使用的 MyPlugunJar 作为 Andorid Library(类库)名
    创建Android Library

添加一个测试用的 MainActivity.java

  1. 删除测试工程
    打开Moudle 设置

依次删除 app/MyPlugunJar的依赖项

依次删除 测试项目

这一步需要注意一下 如果是 Build UNITY3D 使用的jar包 是不需要引用 com.android.support:appcompat-v7:22.2.0 这个项目的,可以适当的予以删除。

  1. 添加自动构建代码
    选中app的Gradle,添加如下代码
1
2
3
4
5
6
7
8
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
compile 'com.android.support:appcompat-v7:22.2.0'

//添加编译的类库
compile project(':myplugunjar')
}

选中myplugunjar的Gradle,添加如下代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
task makeJar(type: Copy) {
//删除存在的
delete 'build/libs/mysdk.jar'
//打包这个里面的文件
from('build/intermediates/bundles/release/')
//放到这个目录
into('build/libs/')
//将classes.jar放入build/libs/目录下
//include ,exclude参数来设置过滤
//这里只需要包含classes.jar这个文件
include('classes.jar')
//重命名
rename ('classes.jar', 'mysdk.jar')
}

makeJar.dependsOn(build)

添加自动构建代码

  1. 编译,并且获取jar包

切换到app项目目录

编译指令如下

1
gradle makeJar

最终生成的文件

解压这个文件,查看是否正确

参考链接

该文章还介绍了打包资源文件到jar