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

时间:2015-08-14 20:38:35

标签: android qt shared-libraries mapbox-gl

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

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

Android Studio中的测试应用正常运行。

然后在Qt项目中试图在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
 }

项目正确构建。但是当我尝试在设备上运行应用程序时,应用程序崩溃了。 我认为,app无法找到这个库。

如何正确连接库以及可能出现的问题?

1 个答案:

答案 0 :(得分:2)

以下是使其在Gradle活动的上下文中起作用的关键部分。

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.gradleandroid > sourcesets > main > jniLibs.srcDirs = ['libs']

希望有所帮助。