Jar is not generated after running build task in android gradle 3.6.1

Viewed 907

My build jar task works fine in grade 3.5.3, but it doesn't work in grade 3.6.1. I checked my build files, however, the /build/intermediates/packaged-classes/ dir is weirdly missing.

The gradle scripts:

task buildJar(dependsOn: ['build'], type: Jar) {
    doFirst {
        manifest {
            attributes 'Jar-VersionName': jarVersionName
            attributes 'Jar-VersionCode': jarVersionCode
        }
    }
    from zipTree(file('build/intermediates/packaged-classes/release/classes.jar'))
    appendix = ""
    baseName = "pp"
    version = jarVersionName + "_" + jarVersionCode
    classifier = "release"
    extension = "jar"
    destinationDir = file('build/libs/')
}

//dx --dex --output=target.jar origin.jar
task buildDex(dependsOn: ['buildJar'], type: Exec) {
    workingDir buildDir.absolutePath + "/libs"
    executable "dx"
    args "--dex"
    args "--output=" + buildJar.archiveName
    args buildJar.archiveName
}

The error log:

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':p2p:buildJar'.
> Cannot expand ZIP '/Users/william/AndroidStudioProjects/Work/lib_plugin/project/build/intermediates/packaged-classes/release/classes.jar' as it does not exist.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s

I've looked around and apparently I've got the choice between these solutions, but they are so old solution for me.

No release bundle folder after upgrading Android Studio

.jar file not generating in android studio

Gradle not generate jar

So, where is the new path of the generated jar?

1 Answers

I found it! When I upgrade gradle version to 4.0, I find the class.jar in build/intermediates/aar_main_jar/release/classes.jar path.

so, the full build task code is below:

def jarPath = buildDir.absolutePath + "/libs"
def jarBaseName = "plugin"

task buildJar(dependsOn: ['build'], type: Jar) {
    doFirst {
        manifest {
            attributes 'Jar-VersionCode': jarVersionCode
        }
    }
    from zipTree(file('build/intermediates/aar_main_jar/release/classes.jar'))
    // [archiveBaseName]-[archiveAppendix]-[archiveVersion]-[archiveClassifier].[archiveExtension]
    archiveBaseName = jarBaseName
    archiveAppendix = null
    archiveVersion = "$jarVersionName-$jarVersionCode"
    archiveClassifier = "release"
    archiveExtension = "jar"
    destinationDirectory = file(jarPath)
}

// dx --dex --output=target.jar origin.jar
task buildDex(dependsOn: ['buildJar'], type: Exec) {
    workingDir jarPath
    executable "dx"
    args "--dex"
    args "--output=" + buildJar.archiveFileName.get()
    args buildJar.archiveFileName.get()
}
Related