13

最近我用qt写了一个android app。
但是我有一个很大的问题,我可以使用/调用一些原生的android API,比如调用特殊活动吗?

例如,在 Android SDK 我调用 java 中的联系人:
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT);

是否有一些用于 java android sdk API 的 c++ 包装库?

或者,如果我需要一些特殊的组件(用 java 编写的),我可以在我的 qt android 程序中使用它吗?
或者制作一个包含“纯qt”和“标准java”或“C++ android NDK”的混合页面/活动的程序?

(我问这个问题是因为我有使用 MOSYNC 框架的经验,这是一个很好的框架,但是你被限制在它自己的库中,你不能使用任何外部库或 android 标准 API,......)

提前致谢。

编辑: 根据 JNI 的改进( http://qt-project.org/doc/qt-5/qtandroidextras-index.html),我有一个问题:我可以在我的qt项目?当我在 Java SDK 项目中使用这些库时?

4

3 回答 3

9

为了做你想做的事,你需要通过 JNI 从你的 C++ 代码中调用 Java 代码。我不知道任何 C++ 包装库。您将需要从 JNI_OnLoad 获取 Java VM,并且当您想要调用 Java 方法时,您需要将 VM 附加到您的线程,并为您提供一个 JNIEnv,您可以使用它来查找您想要的类并调用方法在上面。此链接应该有助于详细信息。

至于使用QT开发Android应用是否值得,是的,如果你需要跨平台支持,并且想将同一个应用部署到Android、Linux、Windows等。如果你只是开发Android应用,那么在我的经验是直接使用Android更容易,更快捷。

于 2013-08-19T23:54:50.780 回答
3

我不确定您如何继续使用“Qt for Android”。但此时,这个想法得到了KDE团队(K Desktop Environment)的官方支持。他们称之为KDE Necessitas项目。他们已于 2012 年 10 月发布了该项目的第一个测试版。

所以基本上当你安装 Necessitas SDK 时,你可能会安装这些东西。

  1. Qt Creator - 为 Android 定制的 Qt IDE。
  2. Android NDK - 用于从 Qt 代码构建共享对象。
  3. Android SDK - 使用 Qt 支持进行定制。

使用定制的 Qt Creator,您可以

  1. 创建一个 Android UI 项目。
  2. 在集成的 Qt Designer 中设计 UI。
  3. 编译 C++ 代码以构建 .so 文件并用 Java 代码包装它。
  4. 创建 APK 并部署。
  5. 调试 APK。

我对 Qt for Android 的一个主要担忧是关于 UI。UI 具有 KDE 4.x 的原生外观和感觉(在桌面上运行的相同)。android UI 主题(Holo 等)尚未完全可用。

由于这个项目仍处于测试阶段,我不确定 Android 原生特性的包装类/函数的可用性。请阅读官方文档以获取更多详细信息。

希望这可以帮助。

于 2013-08-20T06:22:25.427 回答
-1

您可以使用 Android NDK 在 C/C++ 中进行编程。您必须将您的 c++ 代码库包装在一个静态库中,并通过 Java 包装器和 JNI 加载它。

标准 NDK 不支持 RTTI,并且标准 c++ 的许多功能也不可用,例如 std::string 等。要解决此问题,您可以重新编译 NDK。Dmitry Moskalchuk 在http://www.crystax.net/android/ndk-r3.php提供了支持此功能的 NDK 的修改版本。此修改版本适用于所有运行 ARM 处理器的 Android 手机。

注意:JNI 调用会大大降低您的性能。Java 并不难——如果你知道如何用 C/C++ 编程的话。Java 的优势在于应用程序可以在任何运行 Android 的设备上运行,因为 NDK 应用程序依赖于编译它的架构。

于 2013-08-14T13:21:59.137 回答