Android studio编译可执行jar包

gradle配置

在module的build.gradle文件末尾加入以下代码:

task deleteOldJar(type: org.gradle.api.tasks.Delete){
    //删除存在的
    delete'build/libs/getChannel.jar'
}

task makeJar(type: Jar){
    //指定生成的jar名
    baseName'getChannel'

    //设置拷贝的文件
    from('build/classes/java/main')
    from (project.zipTree("libs/java-json.jar"))//java-json.jar作为源码添加到jar中

    //去掉不需要打包的目录和文件
    exclude('BuildConfig.class','R.class')
    //去掉R$开头的文件
    exclude{it.name.startsWith('R$')}
}

makeJar.dependsOn(deleteOldJar,build)

jar包中引入第三方jar包

之前使用常规打包方式,遇到运行问题:

Exception in thread "main" java.lang.NoClassDefFoundError

可通过from方法解决。

具体方法:

1、将jar包至于libs目录下

2、build.gradle文件中加入from (project.zipTree("libs/java-json.jar"))

此时,编译出来的jar文件中就存在第三方的代码了

编译

在gradle侧边栏中找到makeJar并双击运行

Android studio编译可执行jar包_第1张图片

正常运行,并无错误情况下,会在module/build/libs文件目录下生产jar包,getChannel.jar就是我们需要的jar文件。

Android studio编译可执行jar包_第2张图片

此时,jar包还不是我们最终需要的可执行jar包,还需经过一下操作。

jar包转为可执行jar包

1、解压jar包

2、修改META-INF\MANIFEST.MF文件

        打开MANIFEST.MF文件,原始内容为:

Manifest-Version: 1.0

        设置代码入口:

Manifest-Version: 1.0
Main-Class: com.haowan.lib.MyClass

3、在jar解压后的文件夹下 按shift+鼠标右键 选择:在此处打开命令窗口 ,或在文件路径中输入cmd回车,在cmd中执行如下命:

jar -cvmf META-INF\MANIFEST.MF test.jar ./

        命令执行完毕后,会在当前目录中生成一个test.jar文件,这就是我们最终得到的可执行jar包

运行可执行jar包

java -jar F:\JOY\project\HgFenXiao\lib\build\libs\getChannel\test.jar p1 p2

通过java -jar方式运行指定的jar包,p1、p2为传入的参数。

java中接收方式也很简单:

public static void main(String[] args) {
    String p1 = args[0]
    String p2 = args[1]
    ...
}

你可能感兴趣的:(java,jar,可执行jar,android,studio)