2015-08-14 67 views
1

我使用mapbox-glhttps://github.com/mapbox/mapbox-gl-native)。将外部库添加到Qt-Android项目中

我建立libmapbox-gl.so使用化妆的Android(拱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 
} 

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

如何正确连接库以及可能存在的问题?

+0

你使用Gradle还是Ant?在我开始安装Android studio并找到我在Gradle中使用的库之后,将它放到最后一点并不算太坏。我会仔细检查我添加的位置并发布路线。 – phyatt

回答

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) 

摇篮搜索,并在库目录正确找到库和它得到部署期间,Qt Creator的正确捆绑。

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

希望有所帮助。