10
votes

Renommer Apk avec le plugin Gradle v4.10.1

J'ai mis à jour mon Android Studio aujourd'hui vers la version 3.3 fournie avec le plugin Gradle version 4.10.1.

Auparavant, mon build.gradle renommait mes apk avec ce code à la structure suivante:

app-{buildType[release|debug]}-{flavor[prod|stage]}-{versionName[1.2.4]-{versionCode[43]}.apk

app-release-prod-1.1.4-45.apk .

android.applicationVariants.all { variant ->
    def flavor = variant.flavorName
    variant.outputs.all { output ->
        def builtType = variant.buildType.name
        def versionName = variant.versionName
        def versionCode = variant.versionCode
        outputFileName = "app-${flavor}-${builtType}-${versionName}-${versionCode}.apk"
    }
}

outputs: app--release-1.0.4-88.apk

Mais j'ai eu cette erreur après la mise à jour.

AVERTISSEMENT: l'API 'variantOutput.getPackageApplication ()' est obsolète et a été remplacée par 'variant.getPackageApplicationProvider ()'. Il sera supprimé à la fin de 2019. Pour plus d'informations, voir https://d.android.com/r/tools/task-configuration-avoidance . Pour déterminer ce qui appelle variantOutput.getPackageApplication (), utilisez -Pandroid.debug.obsoleteApi = true sur la ligne de commande pour afficher une trace de pile. Modules concernés: application

Le problème se situe au niveau de output.outputFile.name car vous ne pouvez pas accéder aux données de sortie sur cette version du plugin.

Jusqu'à présent, j'ai essayé cette approche sans succès.

applicationVariants.all { variant ->
    variant.flavors*.name.all { flavor ->
        outputFileName = "${flavor}-${variant.buildType.name}-${variant.versionName}-${variant.versionCode}.apk".replace("-unsigned", "")
    }
}

Une idée?

=================================================== =====

MISE À JOUR

J'ai repris cette question, j'ai essayé l'extrait suivant, mais je rencontre des problèmes pour récupérer la saveur de cette variante.

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = output.outputFile.name.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "")
    }
}

Merci


7 commentaires

éventuellement lié: stackoverflow.com/questions/54206898/...


Avez-vous essayé ${variant.getFlavorName()}.apk variant.baseName ou variant.baseName ?


variant.baseName c'est la même chose que variant.buildType.name, il imprime "release". Mais variant.getFlavorName () a fait le travail. De plus, variant.flavorName fonctionne aussi mais a eu un petit problème avec l'autre partie du fichier gradle et n'a pas fonctionné, maintenant c'est le cas. Merci.


@GensaGames si vous postez la réponse, je vous donnerai volontiers la prime


Salut @axierjhtjz voir ce commentaire stackoverflow.com/a/58373100/2448013


@GensaGames pourriez-vous s'il vous plaît poster votre commentaire comme réponse? C'est la première réponse correcte à la question que j'ai posée.


@axierjhtjz Désolé pour le changement de lieu de travail occupé) heureux que vous ayez résolu votre problème)


8 Réponses :


2
votes

Vous pouvez le faire comme ceci:

defaultConfig {
    ...

    project.ext.set("archivesBaseName", applicationId + "_V" + versionName + "("+versionCode+")_" + new Date().format('dd-MM mm'));

}


1 commentaires

Merci, cela pourrait être une option, mais j'aime aussi avoir la saveur sur mon nom apk. Voudrait conserver la structure de nom apk précédente.



0
votes

pour renommer la version, vous pouvez le faire comme ceci

  defaultConfig { 
    project.ext.set("archivesBaseName", 'yourappname' + "_V" + defaultConfig.versionCode  );

}


1 commentaires

L'avertissement output.outputFile lorsque vous utilisez output.outputFile afin que votre réponse aboutisse au même avertissement.



0
votes

Pouvez-vous essayer ci-dessous.

applicationVariants.all { variant ->
    variant.outputs.all { output ->
        outputFileName = outputFileName.replace(".apk", "-${variant.versionName}-${variant.versionCode}.apk").replace("-unsigned", "")
    }
}


0 commentaires

3
votes

En utilisant la méthode setProperty , vous pouvez renommer votre nom .apk.

Tu peux le faire.

android {
    compileSdkVersion 28
    defaultConfig {
        applicationId "com.expertBrains.abc"
        minSdkVersion 17
        targetSdkVersion 28
        versionCode 75
        versionName "2.6.15"
        multiDexEnabled true
        setProperty("archivesBaseName", "(" + versionName + ") "+ new Date().format( 'yyyy-MM-dd HH:mm' ))

    }
}


0 commentaires

0
votes

J'espère que cela pourrait aider. Je ne peux pas dire que c'est la meilleure façon, mais cela fonctionne.

productFlavour{
    uat {
        versionName "2.8.74"
        buildConfigField("String", "ENVIRONMENT", '"uat"')
        setProperty("archivesBaseName", "iotg-uat-v" + versionName)
    }

    staging {
        versionName "2.9.4"
        buildConfigField("String", "ENVIRONMENT", '"staging"')
        setProperty("archivesBaseName", "iotg-staging-v" + versionName)
    }
  }


0 commentaires

0
votes
applicationVariants.all { variant ->
        variant.outputs.all {
            def appName = "AppName"
            def buildType = variant.variantData.variantConfiguration.buildType.name
            def newName = "${appName}${defaultConfig.versionName}_${buildType}.apk"
            outputFileName = newName
        }
    }
Below code will generate apk file name as 
  AppName1.2.0_buildType.apk

0 commentaires

5
votes

Essaye ça:

android.applicationVariants.all { variant ->
    variant.outputs.all { output ->
        def builtType = variant.buildType.name
        def versionName = variant.versionName
        def versionCode = variant.versionCode
        def flavor = variant.flavorName
        outputFileName = "app-${flavor}-${builtType}-${versionName}-${versionCode}.apk"
    }
}

Cela génère le nom apk suivant: app-release-myFlavor-0.0.1-1.apk.


1 commentaires

Fonctionne comme un charme



1
votes

Comme mentionné dans les commentaires, la bonne façon était d'utiliser ${variant.getFlavorName()}.apk variant.baseName ou variant.baseName .


0 commentaires