Пролог.

Многие разработчики получили электронное письмо от Google об изменениях в Google Play Marker.

С 1 августа 2019 года в Google Play будет приниматься только 64-битная версия приложения, поэтому, если вам повезло и у вас есть приложение для Android, написанное на Java или Kotlin - вы можете пропустить эту статью, в противном случае - читать дальше ...

Вы можете прочитать больше здесь, в Блоге Google.

НЕ ПАНИКА! Я объясню, что вам нужно сделать.

Эпизод 1. Небольшая редакция последних новостей.

  • Изменения в 2019 году:

Google пытается перевести все мобильные приложения (кроме игр, написанных на Unity) на 64-битную поддержку.

Если вы не выполните никаких действий:
- ваше приложение по-прежнему будет доступно в Google Play Market
- все обновления, не поддерживающие 64-битную версию, будут проигнорированы

Это означает, что вы не сможете обновить приложение, если не добавите 64-разрядную версию поддержки.

  • Изменения в 2021 году:

Все приложения, не поддерживающие 64-битную версию, будут недоступны в Google Play Market (включая игры, написанные на движке Unity).

  • Исключения:
  1. Приложения, работающие на Android 8 Oreo или более ранней версии, не нуждаются в поддержке 64-разрядных версий.
  2. Android TV и Wear OS не нуждаются в поддержке 64-битных версий (но это не совсем ReactNative, да)

Эпизод 2. Что делать?

Спасибо Facebook и ReactCommunity! По состоянию на 12 марта 2019 года ReactNative выпускает новую версию 0.59.

Вы можете прочитать примечания к выпуску ReactNative 0.59 здесь.

Да, они добавили ловушки, но здесь важна поддержка 64-битной версии на Android.

Итак, первый и единственный шаг, который вам нужно сделать, - это обновить версию ReactNative до 0.59.1 или выше.

Важно. Обновление должно быть выполнено для 0.59.1 при аренде. Это связано с отсутствием команд для вашего приложения gradle.

Если для вас так важно иметь 0.59, есть некоторая информация о присутствии ведьмы, которую вам нужно проверить, а если она отсутствует - просто добавьте ее.

Следуйте официальному руководству по обновлению здесь, чтобы обновить ReactNative.

Или вы можете прочитать мою статью для альтернативы здесь.

Шаги довольно просты:

  1. Просто беги:
react-native upgrade <version>

2. Разрешите конфликт с помощью git и вуаля! И все готово.

Когда вы закончите, давайте рассмотрим то, что должно быть в вашем проекте ReactNative.

Нам нужно взглянуть на ваш менеджер ABI (двоичный интерфейс приложения) в проекте Android; в основном это директивы устройству о том, какой набор команд он должен использовать.

Взглянем на файл /android/app/build.gradle, нас интересует блок abi:

android {
    ...   
 
    splits {
        abi {
            reset()
            enable enableSeparateBuildPerCPUArchitecture
            universalApk false
            include "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    // In case, if you're using `ndk`
    defaultConfig {
        ndk {
            // Tells Gradle to build outputs for the following ABIs and package
            // them into your APK.
            abiFilters "armeabi-v7a", "x86", "arm64-v8a", "x86_64"
        }
    }
    applicationVariants.all { variant ->
        variant.outputs.each { output ->
            def versionCodes = ["armeabi-v7a":1, "x86":2, "arm64-v8a": 3, "x86_64": 4]
            def abi = output.getFilter(OutputFile.ABI)
            if (abi != null) { 
                output.versionCodeOverride =
                    versionCodes.get(abi) * 1048576 + defaultConfig.versionCode
            }
        }
    }
    ...
}

ВАЖНО. Убедитесь, что в include и versionCodes у вас есть "arm64-v8a" и "x86-64".

ВАЖНО. Если вы используете ndk, убедитесь, что у вас тоже есть "arm64-v8a" и "x86-64".

Давайте рассмотрим конфигурацию ABI-менеджера, чтобы узнать, что там происходит:

  • armeabi-v7a и x86 - поддержка наборов инструкций на x86 (32-битных) процессорах
  • arm64-v8a и x86-64 - наборы инструкций для 64-битных процессоров.

Благодаря этим директивам мы сообщаем нашему приложению, что оно может работать на 32- и 64-битных процессорах.

Если вам чего-то не хватает build.gradle, просто добавьте это.

Обновлять

Важная вещь, которую вам нужно знать о поддержке нескольких архитектур - это увеличение размера вашего .apk файла. Не беспокойтесь, это не имеет ничего общего с самим JS.

Все, что вам нужно сделать, это bundle ваше приложение Android, это означает заменить ваш .apk на .aab.

Если вы следовали документации ReactNative о доставке в Google Play, скорее всего, вы использовали эту команду для создания приложения:

./gradlew assembleRelease

Вам нужно заменить эту команду на:

./gradlew bundleRelease

Будет создан .aab файл, после чего вы сможете выполнить доставку как обычно, но теперь вам нужно использовать функцию Подписание приложений в Google Play, чтобы подписать свое приложение и все.

Как работает пакет Android, вы можете отреагировать в официальной документации здесь или вы можете прочитать эту статью Уменьшите размер своего приложения React Native в 3 раза с помощью одной простой команды »для более широкого обзора.

Эпилог.

Я знаю, что обновление ReactNative может быть болезненным, но новые спецификации Google Play Market заставляют нас актуализировать наши проекты. В конце концов, благодаря этим изменениям у вас по-прежнему будет хороший прирост производительности и хуки в вашем проекте ReactNative, так что это не высокая цена.

Хорошо провести время!

Хотите меня нанять или просто поболтать? - через LinkedIn.