提问者:小点点

什么原因导致这个AndroidAPK上传错误:"不可升级APK"


我在谷歌播放商店有一个AndroidAPK,目标SDK为23。

我已经发布了一个新版本(相同的目标SDK)和谷歌显示我这个错误:

如果我继续(我艰难地学会了),那么当前用户都不能升级到这个版本。我必须恢复代码,增加内部版本号,重建APK以“回滚”到可用版本。

然而,我不知道为什么谷歌向我显示这个错误。请注意,“0支持的Android设备”是一个转移注意力的问题——这是过去24小时谷歌游戏中的一个已知问题——如果你发布APK显示的是设备的真实数量。

请给我一些关于差异或导致此错误的原因的线索:


共3个答案

匿名用户

我能够解决这个问题:-

问题在于版本代码-我相信您没有在应用程序中定义任何版本代码,它是由以下公式生成的:

 versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

但是有时最新版本的自动生成版本代码值会变得比以前的版本小(在您的情况下是10403

你需要做的是:-

在标签中的config. xml中添加版本代码,如下所示:-

android-versionCode="104280" 

104280将为您工作,因为它比旧版本更大。

现在让它发布没有任何错误。

谢了Sanny

匿名用户

我正在使用VS-TACO并遇到了这个问题。

稍微澄清一下Sanny的回答,它为我解决了这个问题。显然,在android-versionCode的某个地方是使用以下公式计算的:

MAJOR * 100000 + MINOR * 1000 + PATCH * 10

但现在它正在使用Sanny显示的版本进行计算:

MAJOR * 10000 + MINOR * 100 + PATCH

因此,例如,如果您的版本是1.3.1,android-versionCode被计算为“103010”

现在您将版本更改为1.3.2,它以新的方式计算,因此版本为“10302”,小于“103010”。

因此,要解决这个问题(我想如果android版本一直以新方式计算,那么永远),您可以将版本标签添加到config. xml:

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

或者,您可以进入Visual Studio并使用config. xml的可视化编辑器,转到“Android”部分并更改“版本代码:”值。

匿名用户

我遇到了类似的问题,但能够使用以下用作持续部署管道一部分的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);
}