Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android APK artifact name with respective ABI architecture

I am trying to extract and use the architecture of the artifact to compose the output file name:

void defineDefaultVariantsAPK(String appName) {
    defineVariantsAPK({ variant, output ->
        def versionName = variant.versionName
        def versionCode = "-(${variant.versionCode}"
        def buildLetter = variant.buildType.name == "release" ? "-R" : "-D"
        def flavor = variant.productFlavors.size() > 0 ? "-${variant.productFlavors[0].name}" : ""
        def architecture = "-" + output.getFilter(com.android.build.OutputFile.ABI)

        "v${versionName}${versionCode}${buildLetter}${flavor}${architecture}--${appName}.apk"
    })
}

void defineVariantsAPK(Closure nameBuild) {
    android {
        applicationVariants.all { variant ->
            variant.outputs.each { output ->
                output.outputFile = new File((String) output.outputFile.parent, nameBuild(variant, output))
            }
        }
    }
}

for some reason many posts says that that is the solution, but my gradle fails on:

> Could not get unknown property 'com' for project ':app' of type org.gradle.api.Project.

I've tried to use import:

unable to resolve class com.android.build.OutputFile

configuration:

com.android.tools.build:gradle:2.3.3
Gradle version 3.5

So I really wonder, what am I doing different that it doesn't work?

like image 764
TacB0sS Avatar asked Dec 06 '25 09:12

TacB0sS


1 Answers

Beggining with Gradle 3.0.0 you can do it like this:

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def appName = "AppName_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def architecture = output.getFilter(com.android.build.OutputFile.ABI)
        def newName
        if (buildType == 'debug') {
            newName = "${appName}debug_${defaultConfig.versionName}_${architecture}.apk"
        } else {
            newName = "${appName}release_${defaultConfig.versionName}_${architecture}.apk"
        }
        outputFileName = newName
    }
}

*put this in your module(app) build.gradle file.

like image 151
Milan Avatar answered Dec 08 '25 21:12

Milan