目录
1.1 新建一个demo项目,并添加 依赖 一个java Module 模块
1.2 Module makejardemolib 的 build.gradle 文件中添加 makejar任务
1.3 Build -> Rebuild Project 项目,在 Module makejardemolib build/lib 目录下生成对应 makejardemolib.jar 文件
1.4 执行makeJar 生成 在上面定义的目录下生成 对应的jar包文件
2.1 Module中依赖一个Okhttp,找到 Okhttp的jar包添加到 模块的lib目录下
2.2 在 makeJar 方法中添加 from(project.zipTree("libs/okhttp-4.1.0.jar"))
Demo Github地址:
正文
1:如何使用AndroidStudio 打jar包
1.1 新建一个demo项目,并添加 依赖 一个java Module 模块
File -> new -> New Module -> 选择 java or Kotlin Library -> next
主模块App 中 build.gradle 中添加依赖
implementation project(path: ':makejardemolib')
1.2 Module makejardemolib 的 build.gradle 文件中添加 makejar任务
/* jar 包名称 */
def jarName = "makejarTest_1.0";
/* 生成jar包的位置 */
def outputLocal = "build";
/* 待打包文件位置 */
def zipFile = file("build/libs/makejardemolib.jar")
task makeJar(type: Jar) {
/* 定义jar包中的主类 */
/* 定义的主类,在cmd中 调用 java -jar xxx xxx xxx 时,定义的这个主类的 main方法会接受 后面的参数 */
manifest.attributes "Main-Class": "com.bianbian.makejardemolib.UseJarTest"
from zipTree(zipFile)
/* 将 assets 目录下文件打进去 */
/* 语法猜测可能是: */
/* 来自于 文件(目录:"xx/xx/path", 包含:['xx/所有文件']) */
from fileTree(dir: "src/main", includes: ['assets/**'])
/* lib 下的jar中的类,打到jar包中 */
/* 来自于 project(下的).压缩包("目录path/xxx.jar")) */
// from(project.zipTree("libs/xxx.jar"))
baseName = jarName
destinationDir = file(outputLocal)
}
makeJar.dependsOn(build)
下面一个图来表示下对应注释
1.3 Build -> Rebuild Project 项目,在 Module makejardemolib build/lib 目录下生成对应 makejardemolib.jar 文件
1.4 执行makeJar 生成 在上面定义的目录下生成 对应的jar包文件
点击makejar 上的绿色小箭头,然后点击第一项
2:如何将 lib 下的jar中的类 打到jar中
2.1 Module中依赖一个Okhttp,找到 Okhttp的jar包添加到 模块的lib目录下
implementation 'com.squareup.okhttp3:okhttp:4.1.0'
2.2 在 makeJar 方法中添加 from(project.zipTree("libs/okhttp-4.1.0.jar"))
重新Rebuild 项目,运行makejar,发现打出来而jar包,已经包含了对应的 okhttp.jar 中的文件
将一些三方的jar中类 打进jar中的目的:
当我们需要这些三方类实现某些功能的时候,单纯生成的jar只有我们 自己编写的一些代码类;
会导致打出来的jar功能无法使用;
3:adb调用jar如何传参
3.1 编写接收外部传参测试代码
新建类 UseJarTest,并添加main方法,详见代码中注释
public class UseJarTest {
private static final String TAG = "UseJarTest";
/* 在cmd调用适用jar包时命令如下 */
/* java -jar xxx.jar 参数1 参数2 参数3 */
public static void main(String[] args) {
/* jar中配置的main class 中的 main方法参数 数组 args,会接受上述 参数1 参数2 参数3 */
LogUtil.info(TAG, "args length: " + args.length);
for (String str : args) {
LogUtil.info(TAG, "args: " + str);
}
}
}
3.2 adb 窗口执行测试 外部调用传参
执行命令:
java -jar makejarTest_1.0.jar 参数1 参数2 参数3 参数4
窗口中会打印 代码中 使用 System.out.println(TAG + tag + ": " + logContent); 输出的日志
public class LogUtil {
private static final String TAG = "MakeJarDemo: ";
public static void info(String tag, String logContent) {
/* 这里 println 为换行输入; print 为整行输入 */
System.out.println(TAG + tag + ": " + logContent);
}
}
注:依赖 并运行在 java 环境下
1:电脑中配置java jdk 环境变量
2:业务中如果涉及android 相关依赖调用会无法使用
3.2 我们可以用来做什么
可以用来做你想做的啥都可以,例如 操作电脑中的本地文件,输出 excel 表格,过滤 error 日志,使用 okhttp 进行文件上传 等等;
只要能想到可以使用 java 代码实现的功能都可以;
上限非常之高