Qt Android: Почему QtApp-debug.apk создан для сборки Release?

Я создаю приложение для Android Qt/С++ в сборке Release, но создаются следующие файлы APK:

Release/android-build/bin/QtApp-debug.apk
Release/android-build/bin/QtApp-debug-unaligned.apk

Я нашел этот вопрос, который подразумевает, что файлы APK встроены в режим отладки даже для релизов. Ответы там подразумевают, что сборка Release возможна только в том случае, если у вас есть сертификат.

Я следил за инструкциями, и, действительно, после создания сертификата я вместо этого получаю эти файлы:

Release/android-build/bin/QtApp-release.apk
Release/android-build/bin/QtApp-release-unsigned.apk

Зачем мне нужен сертификат для создания APK Release, а если нет сертификата, есть ли разница между сборкой релизов и сборкой Debug или оба они содержат неоптимизированный код?

Изменить: В свете опубликованного ответа я хотел бы уточнить, что я спрашиваю, почему не требуется сертификат для для Qt Creator для компиляции С++ код с отключенной оптимизацией и добавлена ​​информация об отладке?

Ответ 1

Это, кажется, ошибка в процессе сборки Qt Creator. Файлы С++ скомпилированы так, как они должны, в соответствии с выбранной конфигурацией сборки (с оптимизацией и отсутствием информации об отладке в режиме выпуска). Поэтому, независимо от того, какой ваш APK называется QtApp-debug.apk, двоичные файлы внутри скомпилируются по вашему выбору.

Проблема возникает при вызове androiddeployqt. Если вы посмотрите на source, он создает пакет выпуска, если он получает --release, а также когда он получает --sign. Qt Creator никогда не передает --release, поэтому он компилирует файлы так, как должен, но androiddeployqt генерирует только APK выпуска, когда вы используете сертификат, потому что Qt Creator передает --sign

Каковы различия в androiddeployqt для создания отладочного пакета:

  • Имя пакета
  • Он включает двоичный файл gdbserver (aprox 250 KB на arm-v7)
  • Он вызывает ant с 'debug' вместо 'release'. Это то, что заставляет ваш apk подписываться с отладочным ключом

Отсутствие сертификата не отключает оптимизацию и добавляет информацию об отладке, просто создает пакет отладки с отладочной подписью, которая необходима, если вы не добавляете свой собственный. Так ведь, может быть, это не ошибка.

Ответ 2

Приложению требуется сертификат для публикации в Google Play. Этот сертификат определяет приложение и автора, поэтому вы можете обновить приложение.

Важно: Не теряйте ключ, который вы использовали для публикации своего приложения, иначе вы больше не сможете его обновлять.

Вы можете подписать свое приложение как для режима выпуска, так и для отладки, Android SDK позволяет подписать его для отладки, но вам нужен свой собственный ключ для подписки на выпуск. Режим выпуска - это тот, который отправляется в Google Play.

Есть хорошая документация об издательском процессе для Android-приложений. Вы можете посмотреть более подробную информацию здесь: http://developer.android.com/tools/publishing/preparing.html и здесь: http://developer.android.com/tools/publishing/app-signing.html

Что касается разницы между Release/Debug, я не уверен, но я предполагаю, что он будет связан только с библиотеками Qt, а не с собственным кодом Android, сгенерированным в процессе сборки, вы можете посмотреть на размер скомпилированных версий для лучшего изображения.

Ответ 3

Это может быть старый вопрос, но я был свидетелем той же проблемы с Qt 5.12.3, сборка Release производила отладочный APK в каталоге Release.

Это произошло потому, что я не установил флажок "Подписано" (и если вы отметите его, вам будет предложено ввести пароль) при запуске QtCreator. После предоставления пароля я получил обычный файл android-build-release-signed.apk.