3

私は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
 }

プロジェクトは正しくビルドされます。しかし、デバイスでアプリを実行しようとすると、アプリがクラッシュします。アプリがこのライブラリを見つけることができないと思います。

ライブラリを正しく接続する方法と、何が問題なのですか?

4

1 に答える 1

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
}

# ...

導入.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 ディレクトリでライブラリを適切に検索して見つけ、展開中に Qt 作成者によって適切にバンドルされます。

それを調べるbuild.gradleと:android > sourcesets > main > jniLibs.srcDirs = ['libs']

それが役立つことを願っています。

于 2015-08-16T05:27:56.433 に答える