Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. "QSqlDatabase: QSQLITE driver not loaded" error in deploying a Qt-Android project using JNI with Android studio

"QSqlDatabase: QSQLITE driver not loaded" error in deploying a Qt-Android project using JNI with Android studio

Scheduled Pinned Locked Moved Solved General and Desktop
androidqt 5.7android studiojava jnisqlite
15 Posts 3 Posters 2.2k 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.
  • C Christian Ehrlicher
    4 Apr 2020, 09:43

    @morteza-ali-ahmadi said in "QSqlDatabase: QSQLITE driver not loaded" error in deploying a Qt-Android project using JNI with Android studio:

    Why this is wrong?

    Because you don't need it when you use the correct location in the first place. It just make it more complicated than it really is and confuses others when reading your post (as you're already confused about while searching the net)
    And, as already said, make sure you also have the needed dependencies for the plugin available.

    M Offline
    M Offline
    morteza ali ahmadi
    wrote on 4 Apr 2020, 10:18 last edited by
    #5

    @Christian-Ehrlicher Thanks, Ok.
    As mentioned in this For checking dependency of libqslite.so, I run these commands, is this right?

        QLibrary lib("libqsqlite.so");
        if (! lib.load()) {
          qDebug() << "Library load error:" << lib.errorString();
        }
    
        QPluginLoader lib2("libqsqlite.so");
        if (! lib2.load()) {
          qDebug() << "Library load error:" << lib2.errorString();
        }
    
    1 Reply Last reply
    0
    • C Offline
      C Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on 4 Apr 2020, 10:28 last edited by
      #6

      I would run 'ldd' on the shell if there is any but yes, basically you can try to load them with QLibrary and see what the error is (if there is any)

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      M 1 Reply Last reply 4 Apr 2020, 10:38
      0
      • C Christian Ehrlicher
        4 Apr 2020, 10:28

        I would run 'ldd' on the shell if there is any but yes, basically you can try to load them with QLibrary and see what the error is (if there is any)

        M Offline
        M Offline
        morteza ali ahmadi
        wrote on 4 Apr 2020, 10:38 last edited by morteza ali ahmadi 4 Apr 2020, 10:45
        #7

        @Christian-Ehrlicher After running ldd, this error appears:

        not a dynamic executable
        

        Using QLibrary, show this error:

            Trying... "/storage/emulated/0/plugins/libqsqlite.so"
            Trying... "/storage/emulated/0/plugins/libqsqlite.so.so"
            Trying... "/storage/emulated/0/plugins/liblibqsqlite.so"
            Trying... "/storage/emulated/0/plugins/liblibqsqlite.so.so"
            "libqsqlite.so" not found
            Library load error: "The shared library was not found."
        

        Don't forget I build and deploy this application using android studio on my Android device.
        It seems that the library path can not be identified. I am confused. How can I load that?

        1 Reply Last reply
        0
        • C Offline
          C Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on 4 Apr 2020, 11:11 last edited by
          #8

          @morteza-ali-ahmadi said in "QSqlDatabase: QSQLITE driver not loaded" error in deploying a Qt-Android project using JNI with Android studio:

          After running ldd, this error appears:

          This is what I expected - 'I would run 'ldd' on the shell if there is any' - you can't run ldd on the target so running it on the build system will not help at all.

          I would take a look with QFile/QFileInfo to see where the library is.

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          M 1 Reply Last reply 4 Apr 2020, 14:30
          0
          • C Christian Ehrlicher
            4 Apr 2020, 11:11

            @morteza-ali-ahmadi said in "QSqlDatabase: QSQLITE driver not loaded" error in deploying a Qt-Android project using JNI with Android studio:

            After running ldd, this error appears:

            This is what I expected - 'I would run 'ldd' on the shell if there is any' - you can't run ldd on the target so running it on the build system will not help at all.

            I would take a look with QFile/QFileInfo to see where the library is.

            M Offline
            M Offline
            morteza ali ahmadi
            wrote on 4 Apr 2020, 14:30 last edited by
            #9

            @Christian-Ehrlicher Finally in loading libqsqlite.so, this error appears:

            library "/storage/emulated/0/plugins/sqldrivers/libqsqlite.so" ("/storage/emulated/0/plugins/sqldrivers/libqsqlite.so") needed or dlopened by "/data/app/com.horizon.polarislib-1/lib/arm64/libQt5Core.so" is not accessible for the namespace: [name="classloader-namespace", ld_library_paths="", default_library_paths="/data/app/com.horizon.polarislib-1/lib/arm64:/data/app/com.horizon.polarislib-1/base.apk!/lib/arm64-v8a", permitted_paths="/data:/mnt/expand:/data/data/com.horizon.polarislib"]
            

            Can this error help?

            1 Reply Last reply
            0
            • S Offline
              S Offline
              SGaist
              Lifetime Qt Champion
              wrote on 4 Apr 2020, 18:50 last edited by SGaist 4 Apr 2020, 20:00
              #10

              Hi,

              You can't put plugins anywhere you'd like. Qt follows a well defined structure and will search plugins in specific paths. You have to put the database related plugins under "plugins/sqldrivers".

              Edit: while the plugins have specific subfolders, it seems deployment have them in different places. See here

              Interested in AI ? www.idiap.ch
              Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

              M 1 Reply Last reply 4 Apr 2020, 19:24
              0
              • S SGaist
                4 Apr 2020, 18:50

                Hi,

                You can't put plugins anywhere you'd like. Qt follows a well defined structure and will search plugins in specific paths. You have to put the database related plugins under "plugins/sqldrivers".

                Edit: while the plugins have specific subfolders, it seems deployment have them in different places. See here

                M Offline
                M Offline
                morteza ali ahmadi
                wrote on 4 Apr 2020, 19:24 last edited by morteza ali ahmadi 4 Apr 2020, 19:25
                #11

                @SGaist Thanks, yes of course. I have put my libqsqlit.so in /mnt/sdcard/plugins/sqldrivers/ and added /mnt/sdcard/plugins/ in library path using:

                QCoreApplication::addLibraryPath("/mnt/sdcard/plugins");
                QApplication::addLibraryPath("/mnt/sdcard/plugins");
                

                But this lib-plugin can not be identified.

                1 Reply Last reply
                0
                • S Offline
                  S Offline
                  SGaist
                  Lifetime Qt Champion
                  wrote on 4 Apr 2020, 19:43 last edited by
                  #12

                  Are you sure that this path can be accessed as is by your application ?

                  By the way, why use such an external path ?

                  Interested in AI ? www.idiap.ch
                  Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                  M 1 Reply Last reply 4 Apr 2020, 19:52
                  0
                  • S SGaist
                    4 Apr 2020, 19:43

                    Are you sure that this path can be accessed as is by your application ?

                    By the way, why use such an external path ?

                    M Offline
                    M Offline
                    morteza ali ahmadi
                    wrote on 4 Apr 2020, 19:52 last edited by
                    #13

                    @SGaist

                    Are you sure that this path can be accessed as is by your application ?

                    I have set permission to storage and I can create, read and write a simple text file in this address.

                    By the way, why use such an external path ?

                    Because when I deploy my app with android studio, I can see all libs like libQt5Core.so and libqsqlite.so in a specific folder and the structure of .../plugins/sqldrivers/libqsqlite.so does not exist. So, I have copied libqsqlite.so to a folder in sdcard by this structure /plugins/sqldrivers/

                    1 Reply Last reply
                    0
                    • S Offline
                      S Offline
                      SGaist
                      Lifetime Qt Champion
                      wrote on 4 Apr 2020, 19:58 last edited by
                      #14

                      It has been brought to my attention that my memory may have failed me. See here.

                      One thing that you can do is build one of Qt's database example and then inspect the content of the archive generated to see what does mismatch with yours.

                      Interested in AI ? www.idiap.ch
                      Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

                      1 Reply Last reply
                      0
                      • M Offline
                        M Offline
                        morteza ali ahmadi
                        wrote on 5 Apr 2020, 06:32 last edited by
                        #15

                        I can solve the problem. First, I created folder sqldrivers including libqsqlite.so in the app directory (e.x. /data/user/0/com.example.polarislib) and I set permission by chmod 777 to sqldrivers folder and libqsqlite.so file and finally I used the following code in my source where the connection to Sqlite is needed:

                        QCoreApplication::addLibraryPath("/data/user/0/com.example.polarislib");
                        
                        1 Reply Last reply
                        0

                        14/15

                        4 Apr 2020, 19:58

                        • Login

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