Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. Mobile and Embedded
  4. QNetwork error when use Qt lib with native JNI Android application
Forum Update on Monday, May 27th 2025

QNetwork error when use Qt lib with native JNI Android application

Scheduled Pinned Locked Moved Unsolved Mobile and Embedded
androidjnindkx86qtnetwork
1 Posts 1 Posters 852 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • A Offline
    A Offline
    alexpi
    wrote on 21 Dec 2016, 12:00 last edited by
    #1

    I have the simple Qt lib that makes http request like this:

    QNetworkAccessManager networkAccessManager;
    QNetworkRequest request{QUrl("http://www.google.ru")};
    QNetworkReply * reply = networkAccessManager.get(request);
    ...
    

    All works fine when i run it on Android devices (armeabi-v7a and x86) diractly from Qt Creator. But i want to use it inside android native application with NDK and JNI. In this case it works only on armeabi-v7a devices and with Android from version 6.0. If i run android application with this lib on x86 device it crash with next message:

    Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 11830 (itekllc.testjni)
    

    And it occurs on this line of code inside my Qt lib:

    QNetworkReply * reply = networkAccessManager.get(request);
    

    This is my communication.cpp file in native android project:

    #include <jni.h>
    #include "QCoreApplication"
    #include "testandroidthreadslib.h"
    
    #ifndef _Included_com_navitekllc_testjni_CppWrapper
    #define _Included_com_navitekllc_testjni_CppWrapper
    
    #ifdef __cplusplus
    extern "C" {
    #endif
    
    JNIEXPORT void JNICALL
    Java_com_navitekllc_testjni_CppWrapper_testNetwork(JNIEnv *env, jclass type) {
        TestAndroidThreadsLib testLib;
        testLib.run();
    }
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    This is my .java file to call .cpp function:

    public class CppWrapper {
        public static native void testNetwork();
    
        static {
            System.loadLibrary("communication");
        }
    }
    

    This is my build.gradle experemental gradle file:

    apply plugin: 'com.android.model.application'
    
    model {
    
        repositories {
            libs(PrebuiltLibraries) {
                QtStaticLibrary {
                    headers.srcDir file("..PathToLib/TestAndroidThreadsLib").absolutePath
                    binaries.withType(StaticLibraryBinary) {
                        def myStaticLibPath = "src/main/jniLibs/${targetPlatform.getName()}/libTestAndroidThreadsLib.a"
                        staticLibraryFile = file("${myStaticLibPath}")
                    }
                }
                QCoreSharedLibrary {
                    binaries.withType(SharedLibraryBinary) {
                        def coreLibPath = "src/main/jniLibs/${targetPlatform.getName()}/libQt5Core.so"
                        sharedLibraryFile = file("${coreLibPath}")
                    }
                }
                QNetSharedLibrary {
                    binaries.withType(SharedLibraryBinary) {
                        def networkLibPath = "src/main/jniLibs/${targetPlatform.getName()}/libQt5Network.so"
                        sharedLibraryFile = file("${networkLibPath}")
                    }
                }
            }
        }
    
        android {
            compileSdkVersion 23
            buildToolsVersion "23.0.3"
    
            defaultConfig {
                minSdkVersion.apiLevel 18
                targetSdkVersion.apiLevel 21
                versionCode 1
                versionName "1.0"
            }
            buildTypes {
                release {
                    minifyEnabled false
                    proguardFiles.add(file('proguard-rules.pro'))
                }
            }
    
            sources {
                main {
                    jni {
                        dependencies {
                            library "QtStaticLibrary" linkage "static"
                            library "QCoreSharedLibrary" linkage "shared"
                            library "QNetSharedLibrary" linkage "shared"
                        }
                    }
                }
            }
    
            ndk {
                moduleName = "communication"
                cppFlags.add("-std=c++11")
                stl "gnustl_shared"
    
                cppFlags.add('-I' + file("/Volumes/Transcend/Qt/5.7/android_armv7/include").absolutePath)
                cppFlags.add('-I' + file("/Volumes/Transcend/Qt/5.7/android_armv7/include/QtCore").absolutePath)
    
                abiFilters.addAll([
                        "x86",
                        "armeabi-v7a"
                ])
            }
        }
    }
    
    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        testCompile 'junit:junit:4.12'
    
        compile 'com.android.support:appcompat-v7:24.2.1'
    }
    

    It would be great if somebody tell what I'm doing wrong and why the error in this line of code:

    QNetworkReply * reply = networkAccessManager.get(request);
    

    only occurs on x86 devices and on devices with Android version less then 6.0 and only from native Android project (from QtCreator all works without errors). Thanks for help.

    1 Reply Last reply
    0

    1/1

    21 Dec 2016, 12:00

    • Login

    • Login or register to search.
    1 out of 1
    • First post
      1/1
      Last post
    0
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Get Qt Extensions
    • Unsolved