Qt — компиляция для Linux не является компиляцией для Android? Почему?

#android #c #qt #compilation

#Android #c #qt #Сборник

Вопрос:

Qt 5 поддерживает Android: используя Android SDK и NDK, вы можете скомпилировать приложение Qt для работы и на Android. Теперь то, что я не понимаю. Qt был кроссплатформенным задолго до появления Android. Это означало, что он мог компилироваться на Windows, Mac и Linux. Но Android — ЭТО Linux, не так ли? Почему мне нужны специальные инструменты Android, такие как SDK и NDK, для компиляции для Android. Почему компиляция для Linux не является компиляцией на Android?

Комментарии:

1. Android является базовой системой, но программное обеспечение на самом деле основано на Java. Поэтому у вас просто другая целевая система. Целями являются windows linux osx symbian android blackberry…

Ответ №1:

Android — это не просто ОС, а полный набор мобильного программного обеспечения.

Это связано с тем, что структура Android (в контексте приложений) сильно отличается от структуры Linux. Все приложения для Android запускаются на экземпляре виртуальной машины Dalvik (DVM) и изолированы друг от друга. Поэтому любое приложение, которое требуется для запуска на Android, должно быть совместимо с DVM.

Android основан на пользовательском ядре Linux, он также использует ту же файловую структуру, но, говоря о платформе, приложения, работающие в Android, работают в совершенно другой среде.

Структура Android
(источник: cubrid.org )

также здесь есть официальный источник низкоуровневой системной архитектуры Android

Я мало что знаю о QT5, но я думаю, что эта информация может быть полезной.

Комментарии:

1. Эта иллюстрация фреймворка великолепна! Не могли бы вы показать ссылку?

2. @SMR Начиная с Qt5 (5.2, я думаю, чтобы быть точным), можно писать приложения на QT и развертывать их на Android и iOS — qt-project.org/qt5/qt52

3. @Losiowaty как я уже сказал, я мало что знаю о QT и о том, как это работает. спасибо за предоставленную вами ссылку. Пожалуйста, если у вас есть лучший ответ, тогда просветите нас. 🙂

4. @SMR из вашего ответа я не понял, почему файл, который может быть выполнен в Linux, не может быть на Android. Как они ограничили, что все исполняемые файлы должны быть только APK?

5. «как я уже сказал, я мало что знаю о QT и о том, как это работает», если вы этого не сделаете, вам не следует утверждать: «Я думаю, что QT несовместим с фреймворком Android». Это истинное утверждение вашего убеждения, но оно не относится к этому ответу. Ваши убеждения здесь несколько выходят за рамки.

Ответ №2:

Самый короткий ответ: android — это linux, но linux не Android.

Потому что Android ожидает apk. Приложения для Android имеют ресурсы, разрешения и т.д. они работают в разных средах выполнения.Итак, Android имеет ядро Linux, но на уровне ОС большинство вещей разные.

Комментарии:

1. Если Android — это Linux, а не то, что действительно для Linux, то же самое должно быть действительно для Android. Но это не так. Из этого мы можем сделать вывод, что Android НЕ в Linux. Согласен?

2. @Narek Вы, безусловно, можете запускать общие приложения Linux на компьютере с Android. Вы просто не можете ожидать, что сможете установить их с помощью app Store, и вы не можете ожидать, что они будут взаимодействовать с платформой Android. Так что вы в некотором роде ошибаетесь: если вы хотите захватить экран устройства и делать что-то свое, вы, безусловно, можете. Но если вы хотите взаимодействовать со средой Android, вы должны использовать Android development kit для компиляции программного обеспечения, которое вы собираетесь использовать (здесь: библиотека Qt ).

3. @KubaOber итак, единственная проблема в том, что я не могу использовать app Store и его функции? Но я могу делать все, что могу, в других системах Linux?

4. @Narek Ты уверен, что можешь. С точки зрения пользователя это будет отстой, но вы, безусловно, можете это сделать. Удачи в том, чтобы заставить дисплей работать, так как на каждом устройстве это нужно будет делать по-разному — нет единой «графики Linux» или чего-то подобного. Почти у каждой системы / набора микросхем есть свои изломы.

5. @KubaOber вот почему нам нужны Android SDK и NDK. Поскольку мой код будет работать на одном устройстве, а на другом — нет. Но если я использую SDK-NDK, они решают проблему кроссплатформенности, не так ли? (Просто для тройной проверки :))

Ответ №3:

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

На низком уровне Android имеет другую облегченную стандартную библиотеку C — bionic LibC. Вместо X11 он использует устройство буфера кадров видео. Также реализовано только подмножество стандарта POSIX, чтобы сделать ОС легкой на Android.

Приложения Android запускаются на виртуальной машине Dalvik. Есть также много других отличий, которые делают Android более непохожим на обычный дистрибутив Linux. Можно сказать, что Android использует только ядро Linux и все.

Из-за этих основных различий вы должны использовать конкретную версию Qt для Android вместе с необходимыми SDK и NDK, чтобы иметь возможность разрабатывать приложения Qt для Android.