Подтвердить что ты не робот

[Родной]: использование функций Java и сторонних библиотек в Qt для Android

Недавно я использую qt для записи приложения Android.
Но у меня есть большой вопрос, могу ли я использовать/называть какой-то родной андроид APIS, например вызов специальной активности?

Например, в Android SDK я вызываю контакты в java:
 Intent intent = new Intent (Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);  startActivityForResult (намерение, PICK_CONTACT);

Есть ли некоторые библиотеки С++-оболочки для API-интерфейсов java android sdk?

Или, если мне нужен какой-то специальный компонент (написанный с помощью java), могу ли я его использовать в моей программе Android-андроида? Или сделать программу со смешанными страницами/действиями "чистого qt" и "стандартного java" или "С++ android NDK"?

(Я задаю этот вопрос, потому что у меня есть опыт работы с MOSYNC-фреймворком, который был хорошим, но вы были ограничены его собственными библиотеками, вы не могли использовать какие-либо внешние библиотеки или стандартные API-интерфейсы Android...)

Спасибо заранее.

EDIT: в соответствии с улучшениями в JNI ( http://qt-project.org/doc/qt-5/qtandroidextras-index.html), у меня есть вопрос: я могу использовать "любые" сторонние библиотеки Android для Android в моем проекте qt? Как я использую эти библиотеки в проектах Java SDK?

4b9b3361

Ответ 1

Чтобы сделать то, что вы хотите, вам нужно вызвать код Java из вашего кода на С++ через JNI. Для этого я не знаю никаких библиотек-оболочек С++. Вам нужно будет получить Java-виртуальную машину от JNI_OnLoad, и когда вы хотите вызвать метод Java, вам нужно будет подключить виртуальную машину к вашему потоку, с помощью которой вы получите JNIEnv, который вы можете использовать для поиска нужного вам класса и методов вызова в теме. Эта ссылка должна помочь с деталями.

Что касается того, стоит ли использовать QT для разработки приложений для Android, да, если вам нужна кросс-платформенная поддержка и вы хотите развернуть одно и то же приложение на Android, Linux, Windows и т.д. Если вы только разрабатываете приложения для Android, то по моему опыту проще и быстрее использовать Android напрямую.

Ответ 2

Я не уверен, как вы продолжаете работу с Qt для Android. Но на этот момент эта идея официально поддерживается командой KDE (K Desktop Environment). Они называют это проектом KDE Necessitas. И они выпустили первую бета-версию этого проекта в октябре 2012 года.

Поэтому, когда вы устанавливаете Necessitas SDK, вы, вероятно, устанавливаете эти вещи.

  • Qt Creator - Qt IDE, настроенная для Android.
  • Android NDK - для создания общего объекта из Qt-кода.
  • Android SDK - настраивается с поддержкой Qt.

Используя настраиваемый Qt Creator, вы можете

  • Создайте проект пользовательского интерфейса Android.
  • Создайте пользовательский интерфейс в интегрированном Qt Designer.
  • Скомпилируйте код С++ для сборки .so файла и оберните его кодом Java.
  • Создайте APK и разверните.
  • Отладка APK.

Одна из основных проблем, с которыми я сталкиваюсь в Qt для Android, касается пользовательского интерфейса. Пользовательский интерфейс имеет собственный внешний вид KDE 4.x(тот же, что и на рабочих столах). Темы андроидского интерфейса (Holo и т.д.) Еще не доступны.

И поскольку этот проект все еще бета-версия, я не уверен в доступности классов-оболочек/функций для собственных функций Android. Пожалуйста, просмотрите официальную документацию для более подробной информации.

Надеюсь, что это поможет.

Ответ 3

Вы можете программировать на C/С++ с помощью Android NDK. Вам придется обернуть свою базу данных С++ в статическую библиотеку и загрузить ее через оболочку Java и JNI.

Стандартный NDK не поддерживает RTTI, и многие функциональные возможности стандартного С++ также недоступны, например std::string и т.д. Чтобы решить эту проблему, вы можете перекомпилировать NDK. Дмитрий Москальчук поставляет модифицированную версию NDK, которая поддерживает это в http://www.crystax.net/android/ndk-r3.php. Эта модифицированная версия работает на всех телефонах Android, работающих на процессоре ARM.

Примечание. JNI-вызовы могут значительно снизить вашу производительность. Java не так уж трудна, если вы знаете, как программировать на C/С++. Преимущество Java заключается в том, что приложение может работать на любом устройстве под управлением Android, где приложения NDK зависят от архитектуры, в которой она была скомпилирована.