Что вызывает эту ошибку загрузки Android APK: "не обновляемый APK"

У меня есть Android APK в магазине Google Play с целевым SDK 23.

Я выпустил новую версию (тот же целевой SDK) и Google показывает мне эту ошибку:

Если я продолжу (я узнал трудный путь), то ни один из текущих пользователей не может обновиться до этой версии. Мне пришлось восстановить код, увеличить номер сборки и перестроить APK для "отката" до полезной версии.

однако я не могу понять, почему google показывает мне эту ошибку. Обратите внимание, на "0 Поддерживаемые устройства Android " - это красная селедка-это известная проблема в Google Play за последние 24 часа - если вы публикуете APK, отображается реальное количество устройств.

пожалуйста, дайте мне некоторые выводы о том, что разница или что вызывает эту ошибку:

не обновляемый APK ПРЕДУПРЕЖДАЮЩИЙ Ни один из пользователей этого APK не сможет обновиться до любого из новых APKs, добавленных в этом выпуске. СОВЕТ Убедитесь, что все ваши новые файлы будут добавлены в этот освобождать. enter image description hereenter image description here enter image description here

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.