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
.