Перевожу свои приложения для Android на API level 26 (Android 8 Oreo). Раньше всё нормально было с API level 23, но с августа новые на Google Play должны быть собраны для level 26, а мне проще всё перевести сразу и не заморачиваться потом. Установил API и Qt 5.9.6 с QtCreator 4.6.2, так как API 26 теперь не поддерживает сборку с ant, только gradle. Повозился, но всё собрал. Установил на смартфон с Android 7 Nougat (API level 24) - вроде работает. Увы, девайса с Android 8 у меня нет, но для него почти нет изменений. Какие-то мелочи вылезли, но всё поправимо. Установил на планшет с Android 4.1 так как минимальный API у меня настроен для этой версии. При запуске падает с сообщением системы Android. Запускаю с рабочей станции в QtCreator, через USB. Оба-на... падает с сообщением что не найдена одна из моих библиотек. Но я файлы проектов не менял, все библиотеки включены - ведь на 7-ке работает же. Более того - я в этой самой библиотеке, которая не найдена, включал qWarning() чтобы мелкий баг убрать. И оно работало.
Смотрю на файлы проектов - всё вроде на месте, но замечаю что в проект добавлен DISTFILES += с подключением gradle. То есть, при настройке проекта при первой загрузке в Qt 4.6.2 он это автоматически добавил. Пялюсь на проект как баран на новые ворота. Ничего не понимаю... Строки с подключением моих библиотек есть - но ведь не работает же. Библиотеки мои подключаются из своих каталогов, поскольку используются в нескольких головных проектах. Тут они собираются все в переменную ANDROID_EXTRA_LIBS как положено. Добавляю ниже этого message($$ANDROID_EXTRA_LIBS), проверяю - все библиотеки есть. Ничего не понимаю...
И тут замечаю, что я вижу не весь проект - раньше он целиком в экран креатора помещался, голова небольшая, всё остальное в инклюдах .pri, которые не поменялись. Но теперь внизу есть новые строки, которые не поместились в экран. ТВОЮ МАТЬ! Оказывается при настройке проекта креатор добавил в самый конец, и я это не видел:
contains(ANDROID_TARGET_ARCH,armeabi-v7a) {
ANDROID_EXTRA_LIBS = \
}
То есть, эта скотина просто затёрла содержимое ANDROID_EXTRA_LIBS присвоением пустоты вместо добавления "+=". Убил бы таких разработчиков! Убрал эту ерунду, собрал проект, установил на Android 4.1 - всё работает.
Но тут возник вопрос - а как же оно на 7-ке то работало?... Полез смотреть, какие оно файлы генерит и где они ложатся. Обнаружил, что кроме файлов библиотек, которые генерятся по моим настройкам, и ложатся туда, где указано у каждого подпроекта в его DESTDIR, теперь ещё создаются одноимённые файлы библиотек в каталоге сборки приложения, в подкаталоге libs. Ничего подобного в предыдущей версии QtCreator 4.0.2 не было, я год назад, когда сборку настраивал всё это тщательно проверял. Что ещё страннее - в каталоге DESTDIR подпроекта и в каталоге libs приложения у одноимённых библиотек... разные размеры.
И время отличается на пару секунд. Очевидно разработчики Qt и тут напортачили - каким-то образом запускаются
две сборки. Причём у меня в проектах нигде нет сборки с записью в каталог libs проекта - это оно уже само как-то их настроило. Уф... Руки бы поотрывать...
ГДЕ настроена эта сборка?! И почему размеры разные???!! В каталоге libs проекта файлы меньше, чем в моих DESTDIR. Отладчик тут ни при чём - я собираю только релизы, отладчик повсеместно отключен.