Что вызывает эту ошибку загрузки Android APK: "не обновляемый APK"
У меня есть Android APK в магазине Google Play с целевым SDK 23.
Я выпустил новую версию (тот же целевой SDK) и Google показывает мне эту ошибку:
Если я продолжу (я узнал трудный путь), то ни один из текущих пользователей не может обновиться до этой версии. Мне пришлось восстановить код, увеличить номер сборки и перестроить APK для "отката" до полезной версии.
однако я не могу понять, почему google показывает мне эту ошибку. Обратите внимание, на "0 Поддерживаемые устройства Android " - это красная селедка-это известная проблема в Google Play за последние 24 часа - если вы публикуете APK, отображается реальное количество устройств.
пожалуйста, дайте мне некоторые выводы о том, что разница или что вызывает эту ошибку:
не обновляемый APK ПРЕДУПРЕЖДАЮЩИЙ Ни один из пользователей этого APK не сможет обновиться до любого из новых APKs, добавленных в этом выпуске. СОВЕТ Убедитесь, что все ваши новые файлы будут добавлены в этот освобождать.
5 ответов
я смог решить эту проблему: -
проблема была с versioncode-я уверен, что вы не определили какой-либо код версии в вашем приложении, и он генерируется этой формулой:
versionCode = MAJOR * 10000 + MINOR * 100 + PATCH
но иногда автоматически генерируемое значение versioncode последнего выпуска становится меньше, чем предыдущий выпуск (в вашем случае 10403
что вам нужно сделать, это:-
в свой конфиг.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 продолжает вычисляться по-новому), вы можете добавить тег версии в свою конфигурацию.XML-код:
<?xml version="1.0" encoding="utf-8"?>
<widget android-versionCode="103020" ...
или вы можете перейти в Visual Studio и использовать визуальный редактор для config.xml, перейдите в раздел "Android"и измените значение" код версии:".
я столкнулся с аналогичной проблемой, но смог решить ее с помощью следующего скрипта узла, используемого как часть моего конвейера непрерывного развертывания.
Примечание:
это читается из 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);
}
для тех из вас, кто использует Android Studio, у меня была эта проблема после обновления с Eclipse до Android Studio и неправильной настройки файлов gradle.
убедитесь, что код версии в сборке.gradle в defaultConfig{} является правильным.
...
defaultConfig {
...
versionCode 373
versionName "3.73"
Я столкнулся с этой проблемой, потому что в моей конфигурации cordova.xml предыдущая версия была 0.0.51, а новая версия-0.0.6. Но в консоли playstore эти номера были преобразованы в 51 и 6 для номера APK. Нельзя "обновить" с 51 до 6. Поэтому я изменил xml на 0.0.60, что сделало номер APK 60, и вуаля, я могу обновить с 51 до 60.