it-swarm.com.de

Was verursacht diesen Android APK-Upload-Fehler: "Nicht aktualisierbarer APK"

Ich habe ein Android-APK im Google Play Store mit einem Ziel-SDK von 23.

Ich habe eine neue Version (dasselbe Ziel-SDK) veröffentlicht und Google zeigt diesen Fehler an:

Wenn ich fortfahre (ich habe es auf die harte Tour gelernt), kann keiner der aktuellen Benutzer ein Upgrade auf diese Version durchführen. Ich musste den Code wiederherstellen, die Build-Nummer inkrementieren und die APK neu erstellen, um sie auf eine verwendbare Version zurückzusetzen.

Ich kann jedoch nicht herausfinden, warum Google diesen Fehler anzeigt. Beachten Sie, dass "0 unterstützte Android-Geräte" ein Hering ist - dies ist in Google Play in den letzten 24 Stunden ein bekanntes Problem. Wenn Sie das APK veröffentlichen, wird die tatsächliche Anzahl der Geräte angezeigt. 

Bitte geben Sie mir einige Hinweise, was der Unterschied ist oder was diesen Fehler verursacht:

Nicht aktualisierbarer APK WARNUNG Kein Benutzer dieses APK kann ein Upgrade auf eines der neuen APKs durchführen, die in dieser Version hinzugefügt wurden TIP .__ APKs werden dieser Version hinzugefügt .  enter image description here  enter image description here  enter image description here

15
Rodney

Ich konnte dieses Problem beheben: -

Das Problem war mit dem Versionscode. Ich bin sicher, dass Sie in Ihrer App keinen Versionscode definiert haben, der von dieser Formel generiert wird:

 versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

Manchmal wird der automatisch generierte Versionscodewert der neuesten Version jedoch kleiner als die vorherige Version (in Ihrem Fall 10403 <104028). Daher wird der APK nicht aktualisiert.

Was Sie tun müssen, ist: - 

Fügen Sie in Ihrer config.xml im Tag den Versionscode wie folgt hinzu: -

Android-versionCode="104280" 

104280 funktioniert für Sie, da es größer ist als die ältere Version. 

Jetzt veröffentlicht es ohne Fehler.

Danke Sanny

39

Ich verwende VS-TACO und bin auf dieses Problem gestoßen.

Um die Antwort von Sanny etwas zu klären, wurde das Problem für mich behoben. Anscheinend wurde irgendwann der Android-Versionscode nach dieser Formel berechnet:

MAJOR * 100000 + MINOR * 1000 + PATCH * 10

aber jetzt wird es mit der Version berechnet, die Sanny zeigt:

MAJOR * 10000 + MINOR * 100 + PATCH

Wenn Ihre Version beispielsweise 1.3.1 war, wurde der Android-Versionscode als "103010" berechnet.

jetzt ändern Sie die Version auf 1.3.2 und es wird der neue Weg berechnet, so dass die Version "10302" ist, was weniger als "103010" ist.

Um dieses Problem zu umgehen (ich denke immer, wenn die Android-Version immer neu berechnet wird), können Sie das Versions-Tag zu Ihrer config.xml hinzufügen:

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

oder Sie können in Visual Studio gehen und den visuellen Editor für config.xml verwenden. Gehen Sie zum Abschnitt "Android" und ändern Sie den Wert "Versionscode:".

7
TechSavvySam

Ich hatte ein ähnliches Problem, konnte es jedoch mit dem folgenden Node-Skript lösen, das als Teil meiner Continuous Deployment-Pipeline verwendet wurde. 

Hinweis:

Dies liest aus einer VERSION.md-Datei, die die aktuelle App-Version enthält.

Es kann auch mit dem Argument --version ausgeführt werden, um nur die aktuelle Version in config.xml zu aktualisieren, ohne die Build-Versionen festzulegen.

#!/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

Für diejenigen, die Android Studio verwenden, hatte ich dieses Problem, nachdem ich ein Upgrade von Eclipse auf Android Studio durchgeführt hatte und die Gradle-Dateien nicht richtig konfiguriert hatten.

Stellen Sie sicher, dass der Versionscode in Ihrem build.gradle in defaultConfig {} korrekt ist.

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

Ich hatte gerade das gleiche Problem mit den Versionen, als ich reaktionsnativ auf 0.60.5 aufgerüstet habe. Also habe ich die Unterschiede zwischen fehlenden versionCode-Versionen berechnet

Version 1.9 = VersionCode => 4194313

Version 1.10 = VersionCode = 3145739

Unterschied: 194313 - 3145739 = 1048574

Jede APK pro Architektur verwendet diese Formel

versionCodes.get (abi) * 1048576 + defaultConfig.versionCode

Ich habe meine Formel ein wenig geändert

versionCodes.get (abi) * 1048576 + defaultConfig.versionCode + 1048574

// applicationVariants are e.g. debug, release
applicationVariants.all { variant ->
    variant.outputs.each { output ->
        // For each separate APK per architecture, set a unique version code as described here:
        // https://developer.Android.com/studio/build/configure-apk-splits.html
        def versionCodes = ["armeabi-v7a": 1, "x86": 2, "arm64-v8a": 3, "x86_64": 4]
        def abi = output.getFilter(OutputFile.ABI)
        if (abi != null) {  // null for the universal-debug, universal-release variants
            output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + 1048575;
        }

    }
0
Oyeme

Ich bin auf dieses Problem gestoßen, weil in meiner cordova config.xml die vorherige Version 0.0.51 und die neue Version 0.0.6 war. In der Playstore-Konsole wurden diese Zahlen für die APK-Nummer in 51 und 6 umgewandelt. Man kann nicht von 51 auf 6 "upgraden". Also habe ich die XML zu 0.0.60 geändert, was die APK-Nummer 60 und voila, ich kann von 51 auf 60 aktualisieren.

0
mediaguru