AS打可运行jar包

1、环境

win10,Android Studio 3.5.2,java环境(确保可以使用java命令)

2、AS中编写jar包代码

新建no activity的空工程,在工程中新建android library模块,在模块中编写jar包代码。

新建了空工程StrappingTool,模块zipcode

3、可运行jar包两种方式

编写jar包的入口类,如下:

AS打可运行jar包_第1张图片

  • 不包含Main-Class

    运行下main方法,在build\intermediates\compile_library_classes\debug下会产生classes.jar,通过命令 java -cp classes.jar com.example.zipcode.Test即可运行jar包中的main方法

  • 包含Main-Class

    创建一个gradle打jar包任务,就是将将.class文件打包,并且写入Main-Class

    task makeJar(dependsOn: ['build'], type: Jar){
        manifest{
            attributes('Main-Class': 'com.example.zipcode.Test')
        }
        from('build/intermediates/javac/release/classes/')
        include('com/')
    }
    

AS打可运行jar包_第2张图片

运行后,在build\libs下会产生一个jar包,通过java -jar zipcode.jar即可运行jar包中的main方法。解压jar包后可看到多了jar包的清单文件

AS打可运行jar包_第3张图片

4、打有第三方依赖jar包

使用的都是含有Main-Class方式

  • 第三方依赖jar包不放入打出的jar包内

    task makeJar(dependsOn: ['build'], type: Jar){
        manifest{
            attributes('Main-Class': 'com.example.zipcode.main.Main')
            attributes('Class-Path': 'libs/commons-beanutils-1.7.0.jar libs/commons-collections-3.2.1.jar libs/commons-httpclient-3.1.jar libs/commons-lang-2.3.jar libs/commons-logging-1.1.1.jar libs/ezmorph-1.0.3.jar libs/json-lib-2.2.3-jdk15.jar libs/mysql-connector-java-5.1.9.jar')
        }
        from('build/intermediates/javac/release/classes/')
        include('com/')
    }
    

    需要写入jar依赖的其他jar包路径,在清单文件中为Class-Path字段,libs/commons-beanutils-1.7.0.jar表明打出的jar包引用在当前路径libs下的commons-beanutils-1.7.0.jar

    AS打可运行jar包_第4张图片

  • 第三方依赖jar包放入打出的jar包内

    使用插件shadowJar

    工程StrappingToolbuild.gradle增加依赖

    AS打可运行jar包_第5张图片

    模块zipcode中的build.gradle修改为:

    //apply plugin: 'com.android.library'
    //
    //android {
    //    compileSdkVersion 28
    //
    //
    //
    //    defaultConfig {
    //        minSdkVersion 15
    //        targetSdkVersion 28
    //        versionCode 1
    //        versionName "1.0"
    //
    //        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    //
    //    }
    //
    //    buildTypes {
    //        release {
    //            minifyEnabled false
    //            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
    //        }
    //    }
    //
    //    lintOptions {
    //        abortOnError false
    //    }
    //}
    //
    //dependencies {
    //    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //    implementation 'com.android.support:appcompat-v7:28.0.0'
    //    testImplementation 'junit:junit:4.12'
    //    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    //    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    //}
    
    apply plugin: 'java-library'
    apply plugin: 'com.github.johnrengelman.shadow'
    apply plugin: 'java'
    
    tasks.withType(JavaCompile){
        options.encoding = "UTF-8"
    }
    
    shadowJar {
        manifest{
            attributes 'Main-Class': 'com.example.zipcode.main.Main'
        }
    }
    
    dependencies {
        implementation fileTree(include: ['*.jar'], dir: 'libs')
    }
    
    

    将原本内容全部屏蔽,工程gradle面板zipcode模块下,可以看到shadowJar任务,点击执行,或是在Terminal中输入gradlew shadowJar即可打出jar包

    解压jar包可看出,所有依赖的jar包都解压后打入产生的jar包内

    AS打可运行jar包_第6张图片

你可能感兴趣的:(android,studio,工具)