代码之家  ›  专栏  ›  技术社区  ›  Steven Clark

将外部库添加到Qt Android项目

  •  3
  • Steven Clark  · 技术社区  · 9 年前

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

    我建造了 libmapbox gl。所以(armeabi-v7a拱门) 使用 制作android .

    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
     }
    

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

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

    1 回复  |  直到 9 年前
        1
  •  2
  •   phyatt    9 年前

    以下是让它在Gradle活动中发挥作用的关键部分。

    我的项目.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
    }
    
    # ...
    

    部署优先级

    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创建者正确地获得捆绑包。

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

    希望这会有所帮助。