我即将开发的Android应用程序具有Java中的UI和C ++中可通过JNI访问的非UI功能。 C ++代码使用一些非UI Qt类。我想我会在JNI_OnLoad
中生成一个主要实例化并运行QCoreApplication
的线程。任何后续的JNI调用都只会将事件发布到此线程。这可能吗?问候。
答案 0 :(得分:0)
你想要做的事情肯定是可能的,但比起初看起来要困难一些。
如果你在Qt中端到端构建你的应用程序,那么你可以从他们的框架中免费获得许多功能,这些功能允许它在Android上运行,并且很多功能/管道都包含在他们的UI中。因此,如果您没有使用他们的UI,那么您需要做额外的工作。
在Android上,他们的UI框架基本上创建了一个本机Activity,然后将该活动用作应用程序的包装器。如果你看一下UI的低级源代码,那就是在Android上发生了什么,它是什么让Qt应用程序可以访问本地资源,网络,操作系统设施等。
如果没有Activity包装器,您的应用程序将只能执行简单的内存操作,不需要操作系统,文件系统或网络访问,也无法使用其他Qt库(例如Qt5Sql) ,Qt5Core等。)
以下是我们在java应用程序中使用它所需要做的事情:
对于您的Qt代码,请确保编写了正确的包装器,以便可以通过jni使用它们。我们最终使用swig为我们的代码自动生成java包装器 您可以在此处找到有关swig的更多信息:http://swig.org/
毕竟,你应该能够在原生Android应用程序中使用你的Qt类/库。
痛苦但绝对可能!