Починаючи з 1 серпня Google Play більше не прийматиме нові програми або оновлення програм без 64-бітної версії (якщо, звичайно, взагалі не існує нативного коду). Для користувачів Qt це означає, що потрібно створити додатковий APK, що містить 64-бітові двійкові файли.
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 проекту. Ось трохи змінена версія його коду:
defineReplace(droidVersionCode) { segments = $$split(1, ".") for (segment, segments): vCode = "$$first(vCode)$$format_number($$segment, width=3 zeropad)" contains(ANDROID_TARGET_ARCH, arm64-v8a): \ suffix = 1 else:contains(ANDROID_TARGET_ARCH, armeabi-v7a): \ suffix = 0 # add more cases as needed return($$first(vCode)$$first(suffix)) } VERSION = 1.2.3 ANDROID_VERSION_NAME = $$VERSION ANDROID_VERSION_CODE = $$droidVersionCode($$ANDROID_VERSION_NAME)
Цей трюк перетворює 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
Сторінка публікації в Google Play (Google Play publishing page) досить самодокументована, і є багато хороших посібників про те, як це зробити, тому ми не будемо проходити всі етапи заповнення форми. Загалом просто заповніть всю запитувану інформацію, надайте потрібні зображення і переконайтеся, що всі галочки на лівій бічній панелі мають зелений колір. Ви можете додати всі види контенту тут, так що не поспішайте з цим. Зрештою, це вплине на популярність вашої програми.
Як тільки це буде зроблено, ви можете створити новий випуск у розділі 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-розрядні двійкові файли.
Спасибо. Я ждал эту информацию.
Правда требования не такие уж новые. Я первое письмо от гугла получил почти год назад, а еще у вас на форуме тему создавал: https://evileg.com/ru/forum/topic/909/ (думаю, ее как-то стоит слить со статьей или хотя бы ссылку поставить, т.к. по запросу google android 64 bit она одна из первых в выдаче гугла).
К сожалению, нет возможности оперативно разбираться в подобных вещах самостоятельно. Объём проработки информации слишком большой для маленького информационного ресурса. Но как только на блоге Qt вышла подобная полезная статья, так сразу сделали перевод.
Очень полезная информация, увы уже выкинул поддержку 32 битных бедняг.
да, наверное, 32-х разрядную поддержку уже давно поа было выкинуть. К слову, у вас много проектов под Android? Часто много где вижу вопросы о том, пишет ли кто-то вообще на Qt под мобильные системы. При этом вижу мнения, что под мобильные системы стоит писать вообще на нативных средствах. При этом у меня складывается мнение, что проекты есть и их не мало, просто народ об этом обычно не трубит на каждом повороте.
Добрый день.
Спасибо вам огромное за вашу статью!
только начинаю изучать QT под Андроид
4 дня потратил на то чтобы подобрать версию QT которая наконец то скомпилирует мне на windows.
Уже думал вторую операционку ставить Линукс.
Но благодаря вашей статье -поставив все строго как вы описывали - все заработало.
Ку всем! Вопрос! Как с помощью JNI вызвать оплату на android устройстве? Попробовал Qt Purchasing вроде пошло... но android пишет что библиотека устарела. В qt6 пока поддержки purchasing нет. Работать начал с Qt 5.15
Добрый день! Честно, не подскажу. Вообще я мог бы вам посоветовать посмотреть в сторону Qt-based фреймворка Felgo. У них сейчас в бесплатном тарифе есть как поддержка покупок внутри приложения, так и поддержка рекламных блоков.