是什么导致了这个Android APK上传错误:“不可升级的APK”

我在Google Play商店中有一个Android APK,目标SDK为23。

我已经发布了一个新版本(相同的目标SDK),Google向我展示了这个错误:

如果我继续(我学会了艰难的道路),那么当前没有一个用户可以升级到这个版本。 我必须恢复代码,增加内部版本号并重buildAPK以“回滚”到可用的版本。

然而,我不能工作为什么谷歌向我显示这个错误。 请注意,“0支持的Android设备”是一个红鲱鱼 – 这是Google Play在过去24小时内的一个已知问题 – 如果您发布APK,则会显示实际的设备数量。

请给我一些线索是什么区别是什么或导致这个错误:

不可升级的APK警告本APK的用户无法升级到此版本中添加的任何新APK。 提示确保所有新APK都添加到此版本中。 在这里输入图像说明 在这里输入图像说明 在这里输入图像说明

Solutions Collecting From Web of "是什么导致了这个Android APK上传错误:“不可升级的APK”"

我能够解决这个问题:

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

versionCode = MAJOR * 10000 + MINOR * 100 + PATCH 

但有时自动生成的最新版本的版本代码值比以前的版本(在你的情况下10403 <104028)小,这就是为什么它显示不可升级的APK。

你需要做的是:

在你的config.xml文件中添加如下的版本代码:

 android-versionCode="104280" 

104280会为你工作,因为它比旧版本更大。

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

谢谢Sanny

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

稍微澄清桑尼的答案,为我解决了这个问题。 显然,在这个过程中,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”部分,并更改“版本代码:”值。

对于那些使用Android Studio的用户,从Eclipse升级到Android Studio并且没有正确configurationgradle文件后,我遇到了这个问题。

确保defaultConfig {}中的build.gradle中的版本代码是正确的。

 ... defaultConfig { ... versionCode 373 versionName "3.73" 

我碰到这个问题,因为在我的cordova config.xml中,以前的版本是0.0.51,新版本是0.0.6。 但在游戏存储控制台中,这些数字被转换为APK和51的数字。 一个不能从51升级到6.所以我改变了xml为0.0.60,这使得APK的编号为60,而且我可以从51更新到60。

我遇到了类似的问题,但能够解决它与以下节点脚本作为我的持续部署pipe道的一部分。

注意:

这从包含当前应用程序版本的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); }