将外部库添加到 Qt-Android 项目中

Adding external library into Qt-Android project

我使用 mapbox-gl (https://github.com/mapbox/mapbox-gl-native).

我使用 make-android 构建了 libmapbox-gl.so (arch armeabi-v7a)

在 Android Studio 中测试应用程序正常工作。

然后在Qt项目中尝试link这个库在myproject.pro文件中:

contains(ANDROID_TARGET_ARCH,armeabi-v7a)
 { 
   ANDROID_EXTRA_LIBS = \
   $$PWD/../Desktop/mapbox-gl-native/build/android-arm-v7/Release/lib.target/libmapbox-gl.so
 }

项目构建正确。但是当我尝试 运行 设备上的应用程序时,应用程序崩溃了。 我想,应用找不到这个库。

如何正确连接库,可能出现什么问题?

以下是让它在 Gradle activity.

上下文中工作的关键部分

myproject.pro

# ...

android {
    QT += androidextras

    # Default rules for deployment.
    include(deployment.pri)

    DISTFILES += \
        android/gradle/wrapper/gradle-wrapper.jar \
        android/AndroidManifest.xml \
        android/res/values/libs.xml \
        android/build.gradle \
        android/gradle/wrapper/gradle-wrapper.properties \
        android/gradlew \
        android/gradlew.bat \
        android/src/com/example/myproject/MySubclassOfQtActivity.java

    ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
}

# ...

deployment.pri

android-no-sdk {
    target.path = /data/user/qt
    export(target.path)
    INSTALLS += target
} else:android {
    x86 {
        target.path = /libs/x86
    } else: armeabi-v7a {
        target.path = /libs/armeabi-v7a
    } else {
        target.path = /libs/armeabi
    }
    export(target.path)
    INSTALLS += target
} else:unix {
    isEmpty(target.path) {
        qnx {
            target.path = /tmp/$${TARGET}/bin
        } else {
            target.path = /opt/$${TARGET}/bin
        }
        export(target.path)
    }
    INSTALLS += target
}

export(INSTALLS)

Gradle 在 libs 目录中正确搜索并找到 libs,并在部署期间由 Qt creator 正确捆绑。

检查 build.gradle 它有:android > sourcesets > main > jniLibs.srcDirs = ['libs']

希望对您有所帮助。