it-swarm.com.ru

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

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

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

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

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

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

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

15
Rodney

Я смог решить эту проблему: -

Проблема заключалась в коде версии - я уверен, что вы не определили код версии в своем приложении, и он генерируется по следующей формуле:

 versionCode = MAJOR * 10000 + MINOR * 100 + PATCH

Но иногда автоматически сгенерированное значение кода версии последнего выпуска становится меньше, чем в предыдущем выпуске (в вашем случае 10403 <104028), и поэтому оно показывает не обновляемый APK.

Что вам нужно сделать, это: - 

В вашем config.xml в теге добавьте код версии, как показано ниже: -

Android-versionCode="104280" 

104280 будет работать для вас, так как он больше, чем старая версия. 

Теперь опубликуйте его без ошибок.

Спасибо Санни

39
Sanny Srivastava

Я использую VS-TACO и столкнулся с этой проблемой.

Чтобы немного уточнить ответ Санни, который решил проблему для меня. Видимо, где-то по пути Android-versionCode был рассчитан по следующей формуле:

MAJOR * 100000 + MINOR * 1000 + PATCH * 10

но теперь он рассчитывается по версии, показанной Санни:

MAJOR * 10000 + MINOR * 100 + PATCH

Так, например, если ваша версия 1.3.1 Android-versionCode был рассчитан как «103010»

теперь вы меняете версию на 1.3.2, и она рассчитывается по-новому, поэтому версия «10302», что меньше «103010».

Поэтому, чтобы обойти эту проблему (я думаю, навсегда, если версия Android продолжает вычисляться по-новому), вы можете добавить тег version в ваш config.xml:

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

или вы можете зайти в Visual Studio и использовать визуальный редактор для config.xml, перейти в раздел «Android» и изменить значение «Version Code:».

7
TechSavvySam

Я столкнулся с подобной проблемой, но смог решить ее с помощью следующего сценария 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);
}
1
Jermaine McFarlane

Для тех из вас, кто использует Android Studio, у меня возникла эта проблема после обновления Eclipse до Android Studio и неправильной настройки файлов Gradle.

Убедитесь, что код версии в вашем build.gradle в defaultConfig {} правильный.

...
defaultConfig {
    ...
    versionCode 373
    versionName "3.73"
0
c.fogelklou

Я столкнулся с этой проблемой, потому что в моем файле config.xml cordova предыдущая версия была 0.0.51, а новая версия была 0.0.6. Но в консоли PlayStore эти числа были преобразованы в 51 и 6 для номера APK. Нельзя «обновить» с 51 до 6. Поэтому я изменил xml на 0.0.60, что сделало APK номером 60, и вуаля, я могу обновить с 51 до 60.

0
mediaguru