将外部库添加到 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']
希望对您有所帮助。
我使用 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']
希望对您有所帮助。