Я разрабатываю приложение Qt5 для Android (с CMake!), и в настоящее время я пытаюсь читать данные местоположения с помощью Qt QGeoPositionInfoSource
.
Все мое приложение работает отлично, но когда я запускаю
auto source = QGeoPositionInfoSource::createDefaultSource(this);
Приложение немедленно сработает, и logcat
дает мне:
I/__log_qt( 422): (II) dpw_qt5: <last output from my app>
F/libc ( 422): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 797 (QtThread)
I/DEBUG ( 333): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
I/DEBUG ( 333): Build fingerprint: 'samsung/trltexx/trlte:5.0.1/LRX22C/N910FXXU1BOE3:user/release-keys'
I/DEBUG ( 333): Revision: '12'
I/DEBUG ( 333): ABI: 'arm'
I/DEBUG ( 333): pid: 422, tid: 797, name: QtThread >>> org.qtproject.DPW <<<
I/DEBUG ( 333): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x0
I/DEBUG ( 333): r0 00000000 r1 9d2bedf8 r2 00010006 r3 be7eb61d
I/DEBUG ( 333): r4 9d2bedf4 r5 9d2bedf8 r6 00000000 r7 9cffa030
I/DEBUG ( 333): r8 9d2bedf4 r9 afd04388 sl 00000001 fp 9d2bf8dc
I/DEBUG ( 333): ip 9cff9e80 sp 9d2bedd0 lr 9cff49b7 pc 9cff612e cpsr 60070030
I/DEBUG ( 333):
I/DEBUG ( 333): backtrace:
I/DEBUG ( 333): #00 pc 0000512e /data/data/org.qtproject.DPW/qt-reserved-files/plugins/position/libqtposition_android.so
I/DEBUG ( 333): #01 pc 000039b3 /data/data/org.qtproject.DPW/qt-reserved-files/plugins/position/libqtposition_android.so
Я использовал последние три Android NDK и несколько версий Qt с 5.6 до 5.9 - все с одинаковым результатом, поэтому я думаю, что я делаю что-то неправильно систематически.
My AndroidManifest.xml
содержит следующие строки:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
У вас есть идеи для меня, где я могу начать расследование?
Update:
Я отслеживаю верхнюю часть строки вызова:
I/DEBUG ( 333): #00 pc 0000512e /data/data/org.qtproject.DPW
и я обнаружил, что следующая строка внутри jnipositioning.cpp
вызывает сбой:
if (javaVM->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) < 0) {
так что новый вопрос: что может сделать сбой javavm->GetEnv()
(объявленный в jni.h
)?
Другое обновление:
jpo38 указал, что это здание с qmake приводит к приложению Android, которое не падает. Я создал проект github, демонстрируя это поведение.
Итак, вопрос в следующем: какая разница между настройками приложений с CMake и qmake?