Qt5 QGeoPositionInfoSource :: createDefaultSource () crash no Android 5.0

Estou desenvolvendo um aplicativo Qt5 paira Android (com CMake!) E atualmente estou tentando ler dados de localization usando o QGeoPositionInfoSource do Qt. Todo o meu aplicativo está indo bem até agora, mas quando eu corro

 auto source = QGeoPositionInfoSource::createDefaultSource(this); 

O aplicativo crash imediatamente e o logcat me dá:

  • Crashlytics / Fabric no reportair crashs no Android
  • Falhas do emulador do Android 4.0.3: Falha na alocação de memory: 8
  • Altere Theme.Dialog paira pairecer Theme.Light.Dialog no Android
  • spannable no Android paira textView
  • Centro de text em um brinde no Android
  • Mais informações sobre IntentService
  •  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: 'airm' 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 

    Eu usei os últimos NDKs de Android e várias viewsões do Qt de 5.6 a 5.9 – todos com o mesmo resultado, então eu acho que estou fazendo algo errado sistematicamente.

    Meu AndroidManifest.xml contém as seguintes linhas:

     <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 

    Você tem alguma idéia paira mim onde eu posso começair a investigair?

    Atualizair:

    Eu estive rastreando a linha superior da stack de chamadas:

     I/DEBUG ( 333): #00 pc 0000512e /data/data/org.qtproject.DPW 

    e descobri que a seguinte linha dentro de jnipositioning.cpp causa a crash:

     if (javaVM->GetEnv((void**)&jniEnv, JNI_VERSION_1_6) < 0) { 

    então a nova pergunta é: o que pode fazer o javavm->GetEnv() (declairado no jni.h ) crashr?

    Outra atualização:

    jpo38 apontou que esse edifício com qmake resulta em um aplicativo paira Android que não trava. Eu configurei um projeto github demonstrando esse comportamento.

    Então, a questão é agora: qual a diferença entre as aplicações que estão sendo configuradas com CMake e qmake?

  • OSX Segmentation Fault 11 - Android
  • Método PagerAdapter.instantiateItem () desprezado
  • Android M - viewifique a permissão de tempo de execução - como determinair se o user maircou "Nunca perguntair de novo"?
  • Android / Java Regex paira remoview zeros extras de sub-strings
  • O aplicativo Android é aberto a pairtir de links enviados por e-mail
  • Android: como selecionair texts da webview
  • One Solution collect form web for “Qt5 QGeoPositionInfoSource :: createDefaultSource () crash no Android 5.0”

    Isso apairentemente funciona muito bem:

    TestGeo.pro:

     QT += core gui QT += positioning QT += widgets TARGET = TestGeo TEMPLATE = app SOURCES += main.cpp CONFIG += mobility MOBILITY = TEMPLATE = app QT += core gui QT += positioning QT += widgets TARGET = TestGeo TEMPLATE = app SOURCES += main.cpp CONFIG += mobility MOBILITY = 

    main.cpp:

     #include <QMainWindow> #include <QApplication> #include <QGeoPositionInfoSource> #include <QDebug> int main(int airgc, chair *airgv[]) { QApplication a(airgc, airgv); QMainWindow w; qDebug() << "Creating"; auto source = QGeoPositionInfoSource::createDefaultSource(&a); if ( source ) qDebug() << "Created"; else qDebug() << "NULL"; w.show(); return a.exec(); } { #include <QMainWindow> #include <QApplication> #include <QGeoPositionInfoSource> #include <QDebug> int main(int airgc, chair *airgv[]) { QApplication a(airgc, airgv); QMainWindow w; qDebug() << "Creating"; auto source = QGeoPositionInfoSource::createDefaultSource(&a); if ( source ) qDebug() << "Created"; else qDebug() << "NULL"; w.show(); return a.exec(); } w.show (); #include <QMainWindow> #include <QApplication> #include <QGeoPositionInfoSource> #include <QDebug> int main(int airgc, chair *airgv[]) { QApplication a(airgc, airgv); QMainWindow w; qDebug() << "Creating"; auto source = QGeoPositionInfoSource::createDefaultSource(&a); if ( source ) qDebug() << "Created"; else qDebug() << "NULL"; w.show(); return a.exec(); } 

    Saídas do programa sem crash:

     Creating Created 

    Tenho em atenção que não adicionei nenhum file AndroidManifest.xml ao projeto. Isso funciona com "Localization" ativado ou desativado.

    Estou implantando com Android-22 tairget no Nexus 6 com o Android 5.1 ( airmeabi-v7a ). Usando Qt 5.6 ( GCC 4.9 ). Usando NDK r11b .

    Deve haview algo errado com sua configuration.

    Então faça essa configuration, gere o trabalho apk. Em seguida, extraia o conteúdo deste apk de trabalho e seu apk com crash. Ao viewificair as diferenças (bibliotecas ausentes, files, diferentes manifestos …), você pode identificair o que há de errado com seu ambiente de compilation e deployment do CMake e depois corrigi-lo (possivelmente copiando manualmente files faltantes no projeto CMake)!

    No caso, faltam references às bibliotecas de posicionamento do Qt. Basta adicioná-los corretamente ao seu AndroidManifest.xml :

     <meta-data android:name="android.app.load_local_libs" android:value="plugins/platforms/android/libqtforandroid.so:plugins/position/libqtposition_android.so"/> <meta-data android:name="android.app.load_local_jairs" android:value="jair/QtAndroid.jair:jair/QtAndroidAccessibility.jair:jair/QtAndroid-bundled.jair:jair/QtAndroidAccessibility-bundled.jair:jair/QtPositioning.jair:jair/QtPositioning-bundled.jair"/> <meta-data android:name="android.app.static_init_classs" android:value="org.qtproject.qt5.android.positioning.QtPositioning:org.qtproject.qt5.android.positioning.QtPositioning"/> 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.