Как установить 64 битную программу на 32 битную систему андроид

Обновлено: 07.07.2024

Я только что получил и прочитал информационный бюллетень из Google Play с упоминанием о том, что со следующего года магазин "потребует, чтобы новые приложения и обновления приложений с собственными библиотеками предоставляли 64-битные версии в дополнение к их 32 версии ".

Для тех, кто еще не читал, говорится:

64-разрядное требование поддержки в 2019 году

Поддержка платформ для 64-битных архитектур была введена в Android 5.0. Сегодня более 40% Android устройств, подключенных к сети, имеют 64-битную поддержку, сохраняя при этом 32-битная совместимость. Для приложений, использующих собственные библиотеки, 64-битный код обычно предлагает значительно лучшую производительность с дополнительными регистрами и новыми инструкциями.

В ожидании будущих Android устройств, которые поддерживают только 64-битный код, Play Console потребует, чтобы новые приложения и обновления приложений с собственными библиотеками предоставляли 64-битные версии в дополнение к их 32-битным версиям Это может быть один APK или один из нескольких опубликованных APK.

Мы не удаляем 32-битную поддержку. Google Play продолжит поддерживать 32-битные приложения и устройства. Приложения, которые не содержат нативный код, остаются без изменений.

Это изменение вступит в силу в августе 2019 года. Сегодня мы предоставляем предварительное уведомление, чтобы предоставить разработчикам, которые еще не поддерживают 64-разрядную версию, достаточно времени для планирования перехода. Следите за будущими публикациями, в которых мы подробно рассмотрим преимущества производительности 64-битных собственных библиотек на Android и ознакомимся с руководством по процессорам и архитектурам NDK для получения дополнительной информации.

Какие практические изменения нам необходимо внести, чтобы полностью соответствовать этому новому требованию, когда это применимо?

Согласно официальному электронному письму, отправленному командой Google Play, необходимо выполнить следующие действия:

Если вы этого еще не сделали, мы рекомендуем вам как можно скорее начать работу над 64-разрядным требованием. Многие приложения написаны полностью не на нативном коде (например, Java язык программирования или Kotlin) и не требуют изменений кода.

Обратите внимание, что мы не вносим изменения в нашу политику в отношении 32-разрядной поддержки. Google Play продолжит доставлять приложения с 32-битным собственным кодом на 32-битные устройства. Требование означает, что эти приложения также должны иметь 64-битную версию.

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

Мы также предоставляем график высокого уровня ниже.

Итак, связанная документация объясняет:

Если ваше приложение использует только код, написанный на языке программирования Java или Kotlin, включая любые библиотеки или SDK), ваше приложение уже готово для 64-разрядных устройств. Если ваше приложение использует какой-либо собственный код, или Вы не уверены, что это так, вам нужно будет оценить свое приложение и принять меры.

[. ]

Самый простой способ проверить наличие 64-битных библиотек - проверить структуру вашего APK-файла. После сборки APK будет упакован с любыми встроенными библиотеками, необходимыми приложению. Собственные библиотеки хранятся в разных папках на основе ABI. Не требуется поддерживать каждую 64-разрядную архитектуру, но для каждой поддерживаемой вами 32-разрядной архитектуры необходимо включить соответствующую 64-разрядную архитектуру.

Для архитектуры ARM) 32-битные библиотеки находятся в armeabi-v7a. 64-битный эквивалент - arm64-v8a.

Для архитектуры x86 ищите x86 для 32-битной и x86_64 для 64-битной.

Первое, что нужно сделать, это убедиться, что у вас есть собственные библиотеки в обеих этих папках. [. ]

И для построения 64-битных библиотек вам, в основном, нужно следовать приведенным ниже инструкциям:

Большинство Android Студийные проекты используют Gradle в качестве базовой системы сборки, поэтому этот раздел применим к обоим случаям. Включение сборок для собственного кода так же просто, как добавление arm64-v8a и/или x86_64, в зависимости от в тех архитектурах, которые вы хотите поддерживать, в настройке ndk.abiFilters в файле build.gradle вашего приложения:

Наконец, быстрое примечание:

64-битная версия вашего приложения должна иметь то же качество и набор функций, что и 32-битная версия.

В настоящее время широко распространены 64-битные ОС [1]. Но и 32-битные ОС еще присутствуют на рынке в достаточно большом количестве. Многие современные программные средства разрабатываются исключительно для работы в 64-битном режиме, так как для обеспечения работоспособности программы и в 32-битной, и в 64-битной ОС требуются дополнительные трудозатраты и, соответственно, стоимость разработки повышается.

Для пользователей 32-битной ОС иногда возникает необходимость использовать программные средства, предназначенные только для 64-битной ОС. Что же делать, если пользователь не готов отказаться от 32-битной ОС как основной рабочей системы?

Для различных ОС существуют свои особенности, связанные с запуском 64-битных приложений в 32-битном окружении. При запуске 64-битного приложения непосредственно в 32-битном окружении теряется преимущество, связанное с возможностью использования большего количества оперативной памяти. Для поддержки 64-битных приложений ваш процессор должен обладать 64-битной архитектурой. Рассмотрим некоторые наиболее популярные ОС.

В Mac OS X ядро является гибридным. Оно позволяет одинаково работать любым приложениям в независимости от того, являются ли они 32- или 64-битными. Единственное отличие гибридного ядра от полноценного 64-разрядного — это невозможность использовать в системе больше 32 ГБ оперативной памяти. Поэтому на данный момент нет совершенно никакой разницы между загрузкой в 32- и 64-битном режимах. А вот в будущем разница обязательно появится по мере увеличения объемов использования ОЗУ и появления новых технологий.

Для ОС семейства Linux и 32-битных ОС семейства Windows запуск 64-битных приложений в 32-битном окружении осуществляется с применением технологий виртуализации [2]. Существует ряд специализированных программных продуктов, позволяющих установить виртуальную гостевую 64-битную OC, в которую вы сможете инсталлировать требуемое вам приложение и осуществить его запуск. При этом, если устанавливаемая ОС платная, то вы вынуждены будете ее купить.

Виртуализация

Виртуальная машина - программное обеспечение, эмулирующее работу аппаратного обеспечения некоторой платформы со всеми его компонентами (процессор, память, жесткий диск, usb-шина, привод оптических дисков, видео и сетевые адаптеры и т.д.). Виртуальная машина позволяет устанавливать и запускать несколько гостевых систем (ОС, запускаемые на виртуальных машинах) в рамках одной хост-системы (ОС, установленная на аппаратном обеспечении) одновременно. Перечень операционных систем, устанавливаемых на виртуальные машины, разнообразен и зависит от конкретной системы виртуализации.

Вот некоторые популярные решения:

Oracle VirtualBox - универсальная бесплатная виртуальная машина. VirtualBox - очень простой, мощный и бесплатный инструмент для виртуализации, развивающийся благодаря поддержке знаменитой корпорации Oracle. Он распространяется бесплатно, с открытым исходным кодом. VirtualBox позволяет устанавливать в качестве "гостевой" практически любую современную операционную систему, будь то Windows, Mac OS или любой из многочисленных представителей семейства Linux.

VMware Workstation - для серьёзных задач. VMware Workstation - мощная, платная, максимально-надёжная программа для виртуализации, которая поддерживает работу с Windows и Linux. Для виртуализации Mac OS данная машина не предназначена.

QEMU — свободная программа с открытым исходным кодом для эмуляции аппаратного обеспечения различных платформ.

Аппаратная виртуализация

Для запуска гостевой 64-битной виртуальной машины в 32-битном окружении необходимо, чтобы процессор обладал 64-битной архитектурой и поддерживал технологии аппаратной виртуализации, такие как Intel VT-x и AMD-V. Иногда их необходимо вручную включить в BIOS вашей системы.

Облачные вычисления

Все эти решения требует определенной производительности от системы, и не всегда есть возможность добиться оптимальной работы требуемого вам приложения.

В настоящее время широко развиваются технологии облачных вычислений [3]. Они позволяют развернуть любые ОС на удаленных серверах и запускать на них ваши приложения. При этом никаких ограничений на вашу 32-битную систему не накладывается, все расчеты производятся на удаленных машинах. Например, это Microsoft Azure, с помощью которой можно развернуть множество ОС и исполнять различные, в том числе и высокопроизводительные, приложения.

Часто вопрос о запуске 64-битных приложений на устаревающих 32-битных машинах стоит перед геймерами. Существуют специализированные облачные решения и для таких задач. Например, NVIDIA GRID. GRID воспроизводит 3D игры на облачных серверах, мгновенно кодирует каждый кадр и передает результаты на любое устройство с проводным или беспроводным высокоскоростным подключением к сети Интернет.

Заключение

Мы видим, что запуск 64-битных приложений в 32-битной ОС возможен, но связан с определенными трудностями. Так как некоторые решения являются платными, необходимо оценить, какая технология подходит вам больше.

Рядовые пользователи не особо задумываются о таких вещах как архитектура процессора и разрядность операционной системы, по крайне мере до тех пор, пока не столкнуться с проблемами совместимости при установке приложений или операционной системы. Так, попытка установить 64-битное приложение на 32-битную систему неминуемо приведет к ошибке «32-bit Windows hosts are not supported…» .

32-bit Windows hosts are not supported

В связи с этим у пользователей 32-битных Windows может возникнуть вопрос: а нельзя ли каким-то образом обойти это ограничение?

Да, такой способ существует, но работать он будет только при одном условии, — если процессор поддерживает 64-разрядную архитектуру.

В Windows 10 и 8.1 проверить разрядность ЦП очень просто, достаточно выполнить в окошке Win + R команду control /name Microsoft.System .

Сведения о компьютере

Обратите внимание на пункт «Тип системы», в котором будет указана разрядность ОС и разрядность процессора. Наличие процессора x64 делает возможной установку 64-битных программ, если ЦП x86 , увы, запускать 64-битный софт вы не сможете даже при всём желании.

Тип системы

Примечание: если ЦП поддерживает архитектуру x64, установка 64-разрядной Windows возможна на ПК даже с 1 Гб оперативной памяти.

Более того, на машине с таким процессором возможна установка только 32-разрядной Windows или другой ОС. Для определения разрядности процессора в Windows 7 и более старых ОС можно воспользоваться встроенной консольной утилитой systeminfo или сторонним приложением CPU-Z.

Выполните в командной строке systeminfo и посмотрите, что указано в пункте «Процессор<ы>».

Systeminfo

x64 укажет на 64-разрядный ЦП, а x86 — на старый 32-битный. В CPU-Z на 64-разрядный ЦП укажут маркеры х86-64 или ЕМ64Т в блоке «Instructions», если процессор окажется 32-битным, указанные маркеры будут отсутствовать.

CPU-Z

С разрядностью разобрались, теперь что до установки 64-разрядного софта на 32-битные Windows.

Напрямую установить и запустить 64-битную программу на такую ОС не получится, но вы можете воспользоваться любым гипервизором, тем же VirtualBox, создав в нём 64-битную виртуальную машину и установив на нее 64-разрядную Windows.

VirtualBox

Другое дело, будете ли вы довольны результатом такой виртуализации.

Производительность виртуальной 64-битной OS, даже если это будет XP , окажется более чем низкой, впрочем, возможно именно это заставит пользователя задуматься о необходимости перехода на более производительную 64-битную систему.

Начиная с 1 августа Google Play больше не будет принимать новые приложения или обновления приложений без 64-битной версии (если, конечно, вообще не существует нативного кода). Для пользователей Qt это означает, что вам нужно создать дополнительный APK, содержащий 64-битные двоичные файлы.

  1. 1. Примечание о версиях SDK
  2. 2. Шаг 1: Установка JDK
  3. 3. Шаг 2. Настройка среды Android
  4. 4. Шаг 3: Установите Qt
  5. 5. Шаг 4: Настройка проекта в Qt Creator
  6. 6. Шаг 5: Подготовка манифеста
  7. 7. Шаг 6: Опубликуем приложение в Google Play

Qt поставляет 64-битные двоичные файлы для Android (начиная с Qt 5.12.0), поэтому с технической точки зрения соблюдение нового требования не представляет особой проблемы. Но после обсуждения с пользователями стало ясно, что не всем понятно, как настроить приложение в Google Play, которое поддерживает несколько архитектур одновременно.

Этот призыв о помощи в сочетании с тем фактом, что сейчас настраивается новая рабочая станция Windows (Windows work station), предоставило прекрасную возможность взглянуть на разработку приложений Qt для Android в целом. В этом блоге мы начнем с чистого листа и покажем, как начать работу на Android, а также как опубликовать приложение, соответствующее требованиям Google Play.

  • проходить через все этапы установки, необходимые для создания рабочей среды;
  • описывать процесс построения приложения для нескольких архитектур,
  • и покажем вам, как загрузить свои двоичные файлы в Google Play.

Первые несколько частей могут быть знакомы многим из вас, поэтому, если вам скучно, и вы хотите ознакомиться с основной темой, можете смело переходить к шагу 4.

Примечание о версиях SDK

SDK Android находится в стадии интенсивной разработки и довольно часто не имеет обратной совместимости, что вызывает проблемы с интеграцией в Qt. Хотя мы максимально быстро реагируем на проблемы, возникающие из-за изменений или регрессий в SDK, но общее практическое правило заключается в том, чтобы подождать, прежде чем обновиться до последних и самых лучших версий Android tools (инструментов Android), пока не появится возможность адаптироваться к несовместимости с Qt.

Хотя на других платформах также были некоторые проблемы, большинство проблем, которые мы видели, были связаны с Windows. Поэтому, если вы находитесь в этой хост-системе, будьте особенно внимательны и проверяйте наличие известных хороших версий перед настройкой среды.

В настоящее время мы рекомендуем использовать следующие инструменты вместе с Qt 5.13.0:

• Android build tools (Инструменты сборки Android) версии 28
• Android NDK r19
• Java Development Kit 8

Шаг 1: Установка JDK

Android - это, прежде всего, платформа на основе Java, и, хотя вы можете писать свои приложения Qt полностью в C++ и/или QML, вам потребуется Java Development Kit для компиляции файлов, которые делают возможной интеграцию.

Обратите внимание, что существует несовместимость между инструментом Android SDK Manager и более поздними версиями Oracle JDK, что делает последние версии JDK непригодными для использования вместе со средой Android. Чтобы обойти это, мы рекомендуем вам загрузить JDK версии 8 для использования с Android.

Вы можете использовать официальные двоичные файлы Oracle или другой вариант, такой как проект AdoptOpenJDK.
Загрузите и запустите установщик и установите его в папку по умолчанию.

Шаг 2. Настройка среды Android

Вторым шагом является получение фактической среды разработки Android. Начните с загрузки и установки Android Studio . Пролистайте различные “beta” и “canary” релизы (версии), и вы найдете последний стабильный выпуск.


Когда Android Studio установлена, вы можете использовать ее для установки “SDK Platform” («Платформы SDK») . Это фактическая коллекция классов Java для конкретного дистрибутива Android. При первом запуске Android Studio вам будет предложено установить платформу SDK. Вы можете безопасно использовать последнюю версию SDK, платформа 29 (platform 29), которая является рекомендуемой по умолчанию.

В дополнение к SDK нам также необходимо установить NDK. Это набор разработчика, используемый для кросс-компиляции кода C++ для запуска на Android. Как упоминалось выше, мы будем использовать Android NDK r19c, а не последний выпуск, поскольку существуют проблемы с Android NDK r20 вызывают ошибки компиляции. Проблема будет решена в Qt 5.13.1 и Qt 5.12.5, поэтому, когда вы начнете использовать их, возможно обновление до Android NDK r20.

И как последний шаг, мы должны убедиться, что используем версию 28.0.3 Android build tools (инструментов сборки Android), а не последнюю версию. Обратите внимание, что это проблема только для хостов Windows.

В начальном диалоговом окне Android Studio нажмите Configure (Настроить) , а затем выберите SDK Manager (Менеджер SDK) . Перейдите на вкладку SDK Tools (Инструменты SDK) и убедитесь, что флажок Show Package Details (Показать подробности пакета) установлен. Под Android build tools (инструментами сборки Android) убедитесь, что вы отменили выбор 29.0.0 и выбрали 28.0.3 вместо этого.


Это приведет к удалению неработающей версии инструментов сборки и установке более старой версии. Нажмите Apply (Применить) , чтобы начать процесс, и когда он будет завершен, у вас будет установлена работающая среда Android.

Шаг 3: Установите Qt

Мы будем использовать Qt 5.13.0. Если вы этого еще не сделали, начните с загрузки онлайн-установщика из своей учетной записи Qt (Qt Account).

При запуске установщика убедитесь, что вы выбрали целевые архитектуры arm64-v8a и armv7a. Это технические названия, соответственно, для 64-битных и 32-битных версий процессоров семейства ARM, которые являются наиболее часто используемыми процессорами на устройствах Android.


Примечание. В частности, для этого примера нам понадобится Qt Purchasing (Qt Покупки), поскольку он содержит приложение, которое мы планируем использовать в качестве демонстрации. Его также можно выбрать из списка.

Когда Qt закончит установку, запустите Qt Creator и откройте Options (Опции) . В разделе Devices (Устройства) перейдите во вкладку Android и выберите каталоги, в которые вы установили различные пакеты на предыдущих шагах.


Если все настроено правильно, Qt Creator покажет зеленую галочку, и вы будете готовы приступить к разработке Android с помощью Qt.

Шаг 4: Настройка проекта в Qt Creator

Для этого примера мы будем использовать Qt Hangman . Это небольшой пример, который мы сделали, чтобы показать, как осуществлять покупки в приложении кроссплатформенным способом.

Сначала мы откроем Qt Creator, что можно сделать с экрана приветствия. После того, как он был открыт, Qt Creator попросит нас выбрать, какие версии Qt мы хотим использовать для его сборки.


Выберите 64-битную и 32-битную версии Qt и нажмите Configure Project .

Чтобы соответствовать дополнительным требованиям в Google Play, мы хотим создать два пакета APK: один для 32-разрядных устройств и один для 64-разрядных устройств. Нам нужно настроить каждый из них в отдельности.


На этом снимке экрана показан пример установки для 32-разрядной сборки. Важные вещи, на которые следует обратить внимание:

• Используйте разные директории теневых сборок для каждой из сборок.
• Убедитесь, что вы выбрали Release конфигурацию (Release configuration) .
• Вы также должны поставить галочку в Sign package (Подписи пакета) , чтобы подписать пакет, в противном случае магазин Google Play отклонит его.

За исключением директории сборки, настройка для 64-битной сборки должна быть такой же. Выберите 64-битный комплект с левой стороны и внесите в него эквивалентные настройки.

Шаг 5: Подготовка манифеста

Кроме того, для двух пакетов потребуются идентичные файлы AndroidManifest.xml , за исключением одной детали: version code (код версии) двух должен различаться. Код версии может быть почти любым, который вы выберете, но нужно учесть, что, когда APK установлен на устройстве из магазина, он выберет APK с наивысшим кодом версии. Как отметил пользователь Qt Фабьен Шеро в комментарии к отчету об ошибке, вы, как правило, хотите установить version code 64-битной версии выше, чем для 32-битной, чтобы устройство, которое поддерживает обе версии, предпочитало 64-битный.

Как отметил Феликс Барз в той же теме, это можно автоматизировать в файле .pro проекта. Вот слегка измененная версия его кода:

Этот трюк преобразует VERSION приложения в целое число и добавляет новую цифру, в наименее значимом конце, для обозначения архитектуры. Так, например, для версии 1.2.3 код версии будет 0010020030 для 32-разрядного пакета и 0010020031 для 64-разрядного.

Когда вы генерируете AndroidManifest.xml, используя кнопку Build APK в настройках проекта, он автоматически забирает этот код версии из проекта. После того, как вы это сделали и отредактировали манифест, получив имя и название пакета вашего приложения, последний шаг - это сборка пакета: сначала вы делаете сборку с помощью одного из двух наборов, а затем вы должны активировать другой набор и построить снова.

Когда вы закончите, у вас будет два выпускаемых пакета APK (releasable APK packages), по одному в каждой из директорий сборки, которые вы установили ранее. Относительно директории сборки, пакет будет находиться в android-build\build\output\apk\release .


Обратите внимание, что для более эффективной настройки вы, вероятно, захотите автоматизировать этот процесс. Это также вполне возможно, поскольку все инструменты, используемые Qt Creator, могут запускаться из командной строки. Посмотрите на androiddeployqt documentation для получения дополнительной информации.

Шаг 6: Опубликуем приложение в Google Play

Как только это будет сделано, вы можете создать новый выпуск в разделе App Releases (Выпуски приложений) и загрузить в него свои APK.

Стоит отметить, что при первом запуске вам будет предложено разрешить Google Play управлять ключом подписи вашего приложения.


Пока вам нужно будет отказаться от этого, выбрав Opt Out. Чтобы использовать эту функцию, приложение должно быть в новом формате «Android App Bundle». Он пока не поддерживается Qt, но разработчики также работают над этим. На самом деле, Богдан Ватра из KDAB (который также поддерживает порт Android на Qt) уже опубликовал патч (patch), который решает самую сложную задачу получения такой поддержки.

Когда мы получим поддержку, это сделает процесс выпуска более удобным. С форматом AAB Google Play будет генерировать оптимизированные APK-файлы для различных архитектур, но сейчас мы должны сделать это вручную, настроив несколько комплектов и создав несколько APK, как было описано ранее в этом руководстве.


Когда два APK-файла были загружены в релиз (release), вы должны увидеть список, такой как представлен на изображении выше: два отдельных пакета APK, каждый из которых охватывает одну собственную платформу. Развернув каждую из записей, вы можете увидеть, что такое “Differentiating APK details” («Дифференцирующая информация об APK»). Эти критерии используются для выбора одного из другого, когда устройство загружает APK из магазина Google Play (Google Play Store). В этом случае дифференцирующая деталь должна быть родной платформой.

Так что все, что вам нужно сделать - это создание и выпуск приложения Qt в Google Play с 32-битными и 64-битными двоичными файлами. Когда APK будут загружены, вы можете нажать Publish (Опубликовать) и подождать, пока Google Play выполнит свою автоматизацию. И если на данный момент у вас есть 32-битные приложения в магазине, убедитесь, что вы обновили их до 64-битной версии задолго до августа 2021 года, поскольку именно тогда несовместимые приложения больше не будут обслуживаться 64-битными устройства, даже если они также поддерживают 32-разрядные двоичные файлы.

Читайте также: