web-dev-qa-db-fra.com

Quelles sont les causes de cette erreur Android APK Erreur de téléchargement: "APK non-upgradable"

J'ai un APK Android dans le Google Play Store avec un SDK cible de 23.

J'ai publié une nouvelle version (même SDK cible) et Google me montre cette erreur:

Si je continue (j'ai appris à la dure), alors aucun des utilisateurs actuels ne peut passer à cette version. Je devais restaurer le code, incrémenter le numéro de build et reconstruire l'APK pour le "restaurer" en une version utilisable.

Cependant, je ne peux pas comprendre pourquoi Google me montre cette erreur. Notez que le "0 Appareils Android pris en charge" est un problème redoutable. Il s'agit d'un problème connu de Google Play au cours des dernières 24 heures. Si vous publiez l'APK, le nombre réel d'appareils apparaît. 

S'il vous plaît donnez-moi quelques pistes sur la différence ou les causes de cette erreur:

APK non-upgradable AVERTISSEMENT Aucun des utilisateurs de cet APK ne pourra mettre à jour l'un des nouveaux APK ajoutés dans cette version . CONSEIL Assurez-vous Les APK sont ajoutés à cette version .  enter image description here  enter image description here  enter image description here

15
Rodney

J'ai pu résoudre ce problème: -

Le problème concernait le code de version - je suis sûr que vous n'avez défini aucun code de version dans votre application et qu'il est généré par cette formule:

 versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

Mais parfois, la versioncode de la dernière version générée automatiquement devient plus petite que la version précédente (dans votre cas, 10403 <104028) et c’est pourquoi elle affiche un fichier APK non-extensible.

Ce que vous devez faire c'est: - 

Dans votre config.xml, ajoutez le code de version comme ci-dessous: -

Android-versionCode="104280" 

104280 fonctionnera pour vous car il est supérieur à la version précédente. 

Maintenant, faites-le publier sans erreur.

Merci Sanny

39
Sanny Srivastava

J'utilise VS-TACO et j'ai rencontré ce problème.

Pour clarifier légèrement la réponse de Sanny qui corrigeait le problème pour moi. Apparemment, quelque part sur le chemin, Android-versionCode a été calculé en utilisant cette formule:

MAJOR * 100000 + MINOR * 1000 + PATCH * 10

mais maintenant, il est calculé en utilisant la version de Sanny:

MAJOR * 10000 + MINOR * 100 + PATCH

Ainsi, par exemple, si votre version était la 1.3.1, Android-versionCode était calculé comme "103010"

maintenant vous changez la version en 1.3.2 et il est calculé de la nouvelle manière, donc la version est "10302", ce qui est inférieur à "103010".

Donc, pour contourner ce problème (je suppose que si la version Android continue à être calculée de la nouvelle façon), vous pouvez ajouter la balise de version à votre config.xml:

<?xml version="1.0" encoding="utf-8"?>
<widget Android-versionCode="103020" ...

vous pouvez également accéder à Visual Studio et utiliser l'éditeur visuel de config.xml, accéder à la section "Android" et modifier la valeur du "Code de version:".

7
TechSavvySam

J'ai rencontré un problème similaire, mais j'ai pu le résoudre avec le script de noeud suivant utilisé dans le cadre de mon pipeline de déploiement continu. 

Remarque:

Cela lit à partir d'un fichier VERSION.md qui contient la version actuelle de l'application.

Il peut également être exécuté avec l'argument --version pour ne mettre à jour que la version actuelle dans config.xml sans définir les versions de construction.

#!/usr/bin/env node

var fs = require('fs');
var xml2js = require('xml2js');
const cliArgs = require('command-line-args');
const options = cliArgs([
    {name: 'version', type: Boolean}
]); 

// Read config.xml
var xml = fs.readFileSync('config.xml', 'utf8');

// Parse XML to JS Obj
xml2js.parseString(xml, function (err, result) {
    if(err) {
        return console.log(err);
    }

    // Get JS Obj
    var obj = result;
    const version = fs.readFileSync('VERSION.md', 'utf8');

    if (options.version){
        // Write current version
        obj['widget']['$']['version'] = version;
    } else {
        // Increment build numbers (separately for iOS and Android)
        obj['widget']['$']['ios-CFBundleVersion'] = version;
        // remove all periods to create an integer for Android
        const [major, minor, patch] = version.split('.')
        obj['widget']['$']['Android-versionCode'] = major+pad_number(minor)+pad_number(patch);
    }

    // Build XML from JS Obj
    var builder = new xml2js.Builder();
    var xml = builder.buildObject(obj);

    // Write config.xml
    fs.writeFile('config.xml', xml, function(err) {
        if(err) {
            return console.log(err);
        }

        console.log('Build number successfully incremented');
    });

});

/**
 * Pad a number with prepending zeros if less than 10
 * @see [Javascript function to pad a string](https://stackoverflow.com/questions/2686855/is-there-a-javascript-function-that-can-pad-a-string-to-get-to-a-determined-leng)
 */
function pad_number(orig) {
    return ("00"+orig).slice(-2);
}
1

Pour ceux d'entre vous utilisant Android Studio, j'ai eu ce problème après la mise à niveau d'Eclipse vers Android Studio et la configuration incorrecte des fichiers de gradation.

Assurez-vous que le code de version de votre build.gradle dans defaultConfig {} est correct.

...
defaultConfig {
    ...
    versionCode 373
    versionName "3.73"
0
c.fogelklou

J'ai rencontré ce problème car, dans mon fichier cordova config.xml, la version précédente était 0.0.51 et la nouvelle version, 0.0.6. Mais dans la console du magasin de jeux, ces chiffres ont été convertis en 51 et 6 pour le nombre APK. On ne peut pas "passer" de 51 à 6. J'ai donc changé le xml en 0.0.60, ce qui a donné le nombre APK 60, et le tour est joué, je peux mettre à jour de 51 à 60.

0
mediaguru