[Native]:在Qt for Android中使用Java函数和第三方库

pay*_*oob 13 qt android mosync

最近我用qt写了一个Android应用程序.
但是我有一个很大的问题,我可以使用/调用一些原生的Android APIS,比如调用特殊活动吗?

例如,在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),我有一个问题:我可以使用'任何'android Java第三方库吗? qt项目?当我在Java SDK项目中使用这些库时?

Log*_*kup 9

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

至于是否值得使用QT开发Android应用程序,是的,如果您需要跨平台支持并希望将相同的应用程序部署到Android,Linux,Windows等.如果您只是开发Android应用程序,那么根据我的经验,直接使用Android会更容易,更快捷.


Shi*_*iva -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 应用程序依赖于其编译的架构。

  • NDK 支持 RTTI、异常和 STL。请参阅:http://developer.android.com/tools/sdk/ndk/index.html (2认同)