web-dev-qa-db-ja.com

これの原因Android APKアップロードエラー:「アップグレード不可のAPK」

23のターゲットSDKを使用して、Google PlayストアにAndroid APKがあります。

新しいバージョン(同じターゲットSDK)をリリースしましたが、Googleは次のエラーを表示します。

続行すると(難しい方法を学んだ)、現在のユーザーは誰もこのバージョンにアップグレードできません。コードを復元し、ビルド番号を増やし、APKを再利用して使用可能なバージョンに「ロールバック」する必要がありました。

ただし、Googleでこのエラーが表示される理由を解決することはできません。 「0 Supported Android Devices」は赤字です-過去24時間のGoogle Playの既知の問題です-APKを公開すると、実際のデバイス数が表示されます。

違いが何であるか、またはこのエラーの原因は何ですか?

アップグレード不可のAPK警告このAPKのユーザーは、このリリースで追加された新しいAPKのいずれにもアップグレードできません。ヒントすべての新しいAPKがこのリリースに追加されていることを確認してください。 enter image description hereenter image description hereenter image description here

18
Rodney

私はこの問題を解決することができました:-

問題はバージョンコードにありました-あなたはあなたのアプリでバージョンコードを定義していないと確信しており、この式によって生成されています:

 versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

ただし、最新のリリースの自動生成されたバージョンコード値が前のリリース(10403 <104028の場合)よりも小さくなる場合があり、アップグレード不可のAPKが表示される場合があります。

あなたがする必要があるのは:

Config.xmlのタグに以下のようなバージョンコードを追加します:

Android-versionCode="104280" 

104280は古いバージョンよりも優れているため、動作します。

エラーなしで公開します。

ありがとう、サニー

43

VS-TACOを使用していますが、この問題に遭遇しました。

この問題を解決したサニーの答えを少し明確にするため。どうやら、次の式を使用してAndroid-versionCodeが計算された途中です。

MAJOR * 100000 + MINOR * 1000 + PATCH * 10

しかし、今ではサニーが示すバージョンを使用して計算されています:

MAJOR * 10000 + MINOR * 100 + PATCH

たとえば、バージョンが1.3.1だった場合、Android-versionCodeは「103010」と計算されました

ここでバージョンを1.3.2に変更すると、新しい方法で計算されるため、バージョンは「103010」よりも小さい「10302」になります。

したがって、この問題を回避するために(Androidバージョンが新しい方法で計算され続ける場合は永遠に推測します)config.xmlにバージョンタグを追加できます。

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

または、Visual Studioに移動してconfig.xmlのビジュアルエディターを使用し、[Android]セクションに移動して[バージョンコード:]値を変更できます。

7
TechSavvySam

同様の問題に遭遇しましたが、次のNodeスクリプトを継続的な展開パイプラインの一部として使用することで解決できました。

注意:

これは、現在のアプリのバージョンを含むVERSION.mdファイルから読み取ります。

--version引数を指定して実行して、ビルドバージョンを設定せずにconfig.xmlの現在のバージョンのみを更新することもできます。

#!/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
J. McFarlane

Android Studioを使用している場合、EclipseからAndroid Studioにアップグレードし、gradleファイルを適切に構成しないと、この問題が発生しました。

DefaultConfig {}のbuild.gradleのバージョンコードが正しいことを確認してください。

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

反応ネイティブを0.60.5にアップグレードしたため、バージョンで同じ問題が発生しました。

バージョン1.9 = VersionCode => 4194313

バージョン1.10 =バージョンコード= 3145739

差:194313-3145739 = 1048574

アーキテクチャごとの各APKは、その式を使用します

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

数式を少し変更しました

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

Cordova config.xmlの以前のバージョンは0.0.51で、新しいバージョンは0.0.6だったため、この問題に遭遇しました。しかし、プレイストアコンソールでは、これらの番号はAPK番号の51と6に変換されました。 51から6に「アップグレード」することはできません。そのため、xmlを0.0.60に変更してAPK番号を60にし、できれば51から60に更新できます。

0
mediaguru