2017-02-14 15 views
13

पर क्रैश, मैं एंड्रॉइड (सीएमके के साथ) के लिए एक क्यूटी 5 एप्लीकेशन विकसित कर रहा हूं और वर्तमान में मैं क्यूटी के QGeoPositionInfoSource का उपयोग कर स्थान डेटा पढ़ने की कोशिश कर रहा हूं। अपने आवेदन के सभी अब तक बढ़िया चल रहा है लेकिन जब मैंQt5 QGeoPositionInfoSource :: createDefaultSource() एंड्रॉइड 5.0

auto source = QGeoPositionInfoSource::createDefaultSource(this); 

अनुप्रयोग क्रैश तुरंत चलाने के लिए और logcat मुझे देता है: पिछले तीन एंड्रॉयड NDKs

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 

मैं का उपयोग किया है और के कई संस्करण क्यूटी 5.6 से 5.9 तक - सभी एक ही परिणाम के साथ, इसलिए मुझे लगता है कि मैं व्यवस्थित रूप से कुछ गलत कर रहा हूं।

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

जहाँ मैं जांच करने के लिए शुरू कर सकते हैं तुम मेरे लिए किसी भी विचार है:

मेरे AndroidManifest.xml निम्नलिखित लाइनों में शामिल है?

अद्यतन:

मैं कॉल स्टैक के शीर्ष सबसे लाइन वापस अनुरेखण किया गया है:

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() (में घोषित किया जा सकता है 10) दुर्घटना?

एक और अद्यतन:

jpo38 ने बताया कि किसी Android ऐप्लिकेशन में qmake परिणामों के साथ कि इमारत है कि दुर्घटना नहीं है। मैंने इस व्यवहार का प्रदर्शन github project स्थापित किया है।

तो सवाल यह है: क्षुधा के बीच का अंतर CMake के साथ विन्यस्त और qmake किया जा रहा है?

+0

पर आपको सही ढंग से जोड़ें, आपको एक क्यूटी बग की रिपोर्ट करने का प्रयास करना चाहिए। – jpo38

+0

मैंने किया: https://bugreports.qt.io/browse/QTBUG-59010 – frans

+0

अच्छा। उम्मीद है कि आपको जल्द ही एक जवाब मिल जाएगा। मैं अनुशंसा करता हूं कि आप अपनी क्यूटी बग रिपोर्ट में एमसीवी पोस्ट करें। जब आप ऐसा करते हैं तो वे समस्याओं में तेजी से देखते हैं। सौभाग्य। – jpo38

उत्तर

1

जाहिरा तौर पर बहुत अच्छी तरह से काम करता है:

TestGeo.pro:

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 argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 

    QMainWindow w; 

    qDebug() << "Creating"; 
    auto source = QGeoPositionInfoSource::createDefaultSource(&a); 
    if (source) 
     qDebug() << "Created"; 
    else 
     qDebug() << "NULL"; 

    w.show(); 

    return a.exec(); 
} 

कार्यक्रम आउटपुट:

Creating 
Created 

नोट कि मैंनेनहीं जोड़ा परियोजना मेंफ़ाइल। यह "स्थानीयकरण" सक्षम या अक्षम दोनों के साथ काम करता है।

मैं Android 5.1 (armeabi-v7a) के साथ Nexus 6 पर Android-22 लक्ष्य के साथ की तैनाती कर रहा हूँ। Qt 5.6 (GCC 4.9) का उपयोग करना। एनडीके r11b का उपयोग करना।

आपके सेटअप में कुछ गड़बड़ होना चाहिए।

तो इस सेटअप को करें, कामकाजी एपीके उत्पन्न करें। फिर इस कामकाजी एपीके और आपके असफल एपीके की सामग्री निकालें। मतभेदों की जांच करके (गायब पुस्तकालय, फाइलें, अलग-अलग मैनिफेस्ट ....), आप पहचान सकते हैं कि आपके सीएमके निर्माण और तैनाती के माहौल में क्या गड़बड़ है और बाद में इसे ठीक करें (संभावित रूप से सीएमके परियोजना में लापता फाइलों की प्रतिलिपि बनाकर)!

आपके मामले में क्यूटी की स्थिति पुस्तकालयों के संदर्भ गुम हैं। बस उन्हें अपने 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_jars" android:value="jar/QtAndroid.jar:jar/QtAndroidAccessibility.jar:jar/QtAndroid-bundled.jar:jar/QtAndroidAccessibility-bundled.jar:jar/QtPositioning.jar:jar/QtPositioning-bundled.jar"/> 
<meta-data android:name="android.app.static_init_classes" android:value="org.qtproject.qt5.android.positioning.QtPositioning:org.qtproject.qt5.android.positioning.QtPositioning"/> 
+0

मैंने बग्रेपोर्ट के अंदर अपना उदाहरण देखा है। वह अपनी परियोजना बनाने के लिए सीएमके और वीएस का उपयोग करता है। – Evgeny

+0

किसी को एक समाधान समाधान (QtCreator, सरल .pro, मूल प्रोग्राम) से शुरू करना चाहिए और फिर क्रैश का कारण बनने के लिए एक और जटिल समाधान (वीएस, सीएमके ...) में क्या भिन्न है ट्रैक करें ... शायद वीएस तैनाती नहीं करता है कार्यक्रम सही ढंग से – jpo38

+0

अच्छा - मैं सीएमके का उपयोग कर रहा हूं लेकिन वीएस नहीं। मैं jpo का दृष्टिकोण टाइप करूंगा - एक 'qmake' प्रोजेक्ट को एक सीएमके प्रोजेक्ट में बदल रहा हूं .. – frans

संबंधित मुद्दे