[android] Comment définir le nom de version dans le fichier APK en utilisant gradle?



Answers

Cela a résolu mon problème: en utilisant applicationVariants.all au lieu de applicationVariants.each

buildTypes {
      release {
        signingConfig signingConfigs.release
        applicationVariants.all { variant ->
            def file = variant.outputFile
            variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" + defaultConfig.versionName + ".apk")) 
        }
    }       
}

Mettre à jour:

Il semble donc que cela ne fonctionne pas avec les versions 0.14+ du plugin android studio gradle.

Cela fait l'affaire (Référence de cette question ):

android {
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            output.outputFile = new File(
                    output.outputFile.parent,
                    output.outputFile.name.replace(".apk", "-${variant.versionName}.apk"))
        }
    }
}
Question

J'essaie de définir un numéro de version spécifique dans le nom de fichier APK généré automatiquement.

Maintenant gradle génère myapp-release.apk mais je veux que ça ressemble à myapp-release-1.0.apk .

J'ai essayé de renommer les options qui semblent désordonnées. Y a-t-il un moyen simple de le faire?

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    defaultConfig.versionName + ".apk"))
    }
}

J'ai essayé le code ci-dessus sans aucune chance. Aucune suggestion? (en utilisant le gradage 1.6)




Pour les dernières versions, vous pouvez utiliser l'extrait suivant:

Définissez d'abord l'emplacement de votre manifeste d'application

 sourceSets {
        main {
            manifest.srcFile 'src/main/AndroidManifest.xml'
        {
    }

Et plus tard dans build.gradle

import com.android.builder.core.DefaultManifestParser

def getVersionName(manifestFile) {
    def manifestParser = new DefaultManifestParser();
    return manifestParser.getVersionName(manifestFile);
}

def manifestFile = file(android.sourceSets.main.manifest.srcFile);
def version = getVersionName(manifestFile)

buildTypes {
    release {
       signingConfig signingConfigs.release
       applicationVariants.each { variant ->
       def file = variant.outputFile
       variant.outputFile = new File(file.parent, file.name.replace(".apk", "-" +    versionName + ".apk"))
    }
}

Ajustez si vous avez différents manifestes par type de construction. mais puisque j'ai le seul - fonctionne parfaitement pour moi.




Dans mon cas, je résous cette erreur de cette façon

ajout d'un SUFFIX à la version Debug, dans ce cas j'ai ajouté le texte "-DEBUG" à mon déploiement Debug

 buildTypes {
        release {

            signingConfig signingConfigs.release
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'


        }
        debug {

            defaultConfig {
                debuggable true

                versionNameSuffix "-DEBUG"
            }
        }
    }



Si vous ne spécifiez pas versionName dans le bloc defaultConfig.versionName , defaultConfig.versionName résultera null

Pour obtenir le nom de version du manifeste, vous pouvez écrire le code suivant dans build.gradle:

import com.android.builder.DefaultManifestParser

def manifestParser = new DefaultManifestParser()
println manifestParser.getVersionName(android.sourceSets.main.manifest.srcFile)



Dans mon cas, je voulais juste trouver un moyen d'automatiser la génération de différents noms d' apk pour les variantes de release et de debug . J'ai réussi à le faire facilement en mettant cet extrait comme un enfant d' android :

applicationVariants.all { variant ->
    variant.outputs.each { output ->
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        output.outputFile = new File(output.outputFile.parent, newName)
    }
}

Pour le nouveau plugin Android gradle 3.0.0, vous pouvez faire quelque chose comme ça:

 applicationVariants.all { variant ->
    variant.outputs.all {
        def appName = "My_nice_name_"
        def buildType = variant.variantData.variantConfiguration.buildType.name
        def newName
        if (buildType == 'debug'){
            newName = "${appName}${defaultConfig.versionName}_dbg.apk"
        } else {
            newName = "${appName}${defaultConfig.versionName}_prd.apk"
        }
        outputFileName = newName
    }
}

Cela produit quelque chose comme: My_nice_name_3.2.31_dbg.apk




Une autre alternative est d'utiliser ce qui suit:

String APK_NAME = "appname"
int VERSION_CODE = 1
String VERSION_NAME = "1.0.0"

project.archivesBaseName = APK_NAME + "-" + VERSION_NAME;

    android {
      compileSdkVersion 21
      buildToolsVersion "21.1.1"

      defaultConfig {
        applicationId "com.myapp"
        minSdkVersion 15
        targetSdkVersion 21
        versionCode VERSION_CODE
        versionName VERSION_NAME
      }

       .... // Rest of your config
}

Cela va mettre "appname-1.0.0" à toutes vos sorties apk.




Related