我即将开发的Android应用程序具有Java中的用户界面以及可通过JNI访问的C++中的非UI功能。 C++代码使用一些非UI Qt类。我想我会在JNI_OnLoad
中产生一个线程,它基本上会实例化并运行QCoreApplication
。任何后续的JNI调用都只会将一个事件发布到该线程。这可能吗?问候。在Android应用程序中本地使用Qt类
0
A
回答
0
你想要做的事绝对有可能,但比起初看起来要困难得多。
如果您在Qt中端到端构建您的应用程序,您可以从其框架中免费获得许多功能,从而使其能够在Android上运行,并且很多功能/管道都会包含在其UI中。所以如果你不使用他们的UI,那么你需要做额外的工作。
在Android上,他们的UI框架基本上创建了一个本地活动,然后使用该活动作为应用程序的包装。如果你看看他们的UI的低级来源,那就是Android上发生的事情,它允许Qt应用程序访问本地资源,网络,操作系统设施等。
没有活动包装器,你的应用程序将只能够进行简单的内存操作,不需要操作系统,文件系统或网络访问,也无法使用其他Qt库(例如Qt5Sql,Qt5Core等)。
下面是我们必须做的,使这项工作在我们的Java应用程序:
- 创建一个代理包装活动为Qt来使用与您共享应用程序的基础 上下文。
- 创建一个QtActivityDelegate。
- 使用本机Qt库设置代理活动和委托。例如QtNavite.setActivity。
- 使用相同的本机Qt android库实例化和设置DexClassLoader。
- 使用System.loadLibrary(..)加载任何Qt库。请注意,这些库必须已经存在于文件系统中。这部分对我们来说是一大痛苦。
对于你的Qt代码,请确保你有正确的包装,以便他们可以通过jni使用。我们最终使用swig为我们的代码自动生成java包装器。
你可以找到更多关于痛饮这里:http://swig.org/
一切,你应该能够使用你的Qt类/库从原生Android应用程式中后。
痛苦但绝对有可能!
相关问题
- 1. 在Qt应用程序中使用taglib
- 2. 在Qt应用程序中使用WINAPI
- 3. 在本地使用Flash应用程序
- 4. 使用CrystaX使用Qt构建Android应用程序:java.lang.UnsatisfiedLinkError中
- 5. 在Qt应用程序及其插件中使用Singleton类
- 6. Android应用程序在Qt不启动
- 7. 在Qt HTML5应用程序中使用替代脚本语言
- 8. Android应用程序和本地桌面应用程序通信
- 9. 在Qt应用程序使用sleep_for()
- 10. 使用android应用程序在本地测试PHP Web服务
- 11. 调试使用vs-android构建的Android本地应用程序
- 12. Symbian本地应用程序的应用程序类型
- 13. Android和iOS web应用程序包装在本地应用程序中
- 14. 应用程序本地化的动态文本在Android应用程序
- 15. Qt国际化:您在Qt应用程序中使用什么源文本?
- 16. 在本地应用程序中实现从本地应用程序抽屉
- 17. 调试Android NDK本地应用程序
- 18. android应用程序本地化建议
- 19. android apk本地应用程序
- 20. Android上应用程序的本地化
- 21. Android Library应用程序本地化
- 22. 在本地应用程序中使用地图
- 23. 在Android的adb外壳程序本地程序中使用stl
- 24. Qt Quick 2应用程序中的非本地对话框
- 25. 在QT应用程序中嵌入应用程序(本例中为终端)
- 26. 在Android应用程序中删除JNI本地引用
- 27. 使用线程的Qt应用程序
- 28. 如何在创建qt应用程序时使用ui类
- 29. 构建Qt Android应用程序失败
- 30. 部署android应用程序Qt 5.1
我认为这是。老实说,你的问题并不是一个真正的问题。你为什么不通过构建一个示例项目来测试它? – sashoalm