我在Google Play商店中安装了Android APK,目标SDK为23。
我发布了一个新版本(相同的目标SDK),谷歌向我显示了这个错误:
如果我继续(我学到了很多困难),那么当前用户都无法升级到此版本。我不得不恢复代码,增加内部版本号并重建APK到" rollback"一个可用的版本。
然而,我无法解决为什么谷歌向我显示此错误。注意," 0支持的Android设备"是一个红鲱鱼 - 这是过去24小时内Google Play中的一个已知问题 - 如果您发布APK,则会显示实际数量的设备。
请告诉我一些关于差异是什么或导致此错误的原因:
不可升级的APK 警告 此APK的任何用户都无法升级到此版本中添加的任何新APK。 小费 确保将所有新APK添加到此版本中。
答案 0 :(得分:41)
我能够解决这个问题: -
问题出在版本代码上 - 我确信你没有在你的应用程序中定义任何版本代码,它是由这个公式生成的:
versionCode = MAJOR * 10000 + MINOR * 100 + PATCH
但有时自动生成的最新版本的版本代码值会比之前的版本(在您的情况下为10403< 104028)小,这就是为什么它显示不可升级的APK。
您需要做的是: -
在标签中的config.xml中添加如下所示的版本代码: -
android-versionCode="104280"
104280适用于您,因为它比旧版本更强。
现在发布它没有任何错误。
谢谢Sanny
答案 1 :(得分:7)
我正在使用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并使用visual.xml的可视化编辑器,转到“Android”部分并更改“版本代码:”值。
答案 2 :(得分:1)
我遇到了类似的问题但是能够使用以下节点脚本来解决它,该脚本用作我的持续部署管道的一部分。
这是从包含当前应用版本的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);
}
答案 3 :(得分:0)
对于那些使用Android Studio的人来说,从Eclipse升级到Android Studio并且没有正确配置gradle文件之后我遇到了这个问题。
确保defaultConfig {}中build.gradle中的版本代码正确无误。
...
defaultConfig {
...
versionCode 373
versionName "3.73"
答案 4 :(得分:0)
我遇到了这个问题,因为在我的cordova config.xml中,以前的版本是0.0.51,新版本是0.0.6。但是在Playstore控制台中,这些数字被转换为51和6作为APK编号。人们无法升级&#34;从51到6.所以我将xml改为0.0.60,这使得APK数字为60,瞧,我可以从51更新到60.
答案 5 :(得分:0)
当我将react-native升级到0.60.5时,版本也有相同的问题 所以我计算了缺少的versionCode版本之间的差异
版本1.9 =版本代码=> 4194313
版本1.10 = VersionCode = 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;
}
}