我一直在调查Qt5/Android/Location issue并找到了一个无效指针访问权限,这让我觉得使用Qt5的GPS无法在任何机器上运行。
在我尝试运行的情况下
auto source = QGeoPositionInfoSource::createDefaultSource(this);
AttachedJNIEnv::AttachedJNIEnv()
(Qt5来源)中定义的方法src/plugins/position/android/src/jnipositioning.cpp
因以下调用而崩溃:
if (javaVM->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) < 0) {
在我尝试过的至少三款设备上,javaVM
为NULL
,因此我非常确定这不仅仅是我设备的问题。
javaVM
是一个全局指针(真可惜......),而应该获取Q_DECL_EXPORT jint JNICALL JNI_OnLoad(JavaVM *, void *)
中定义的jnipositioning.cpp
中的值
我现在的问题是:
显然这是Qt5中的一个错误,我会做一个错误报告。但与此同时,我希望通过某种修复/解决方法来定位。
那么JNI_OnLoad()
不被召唤的原因是什么?我忘了以某种方式初始化Qt::Location
?谁应该致电JNI_OnLoad()
?我能以某种方式手动完成吗?
更新
我现在报告了Qt bug。