Android Studio加载Qt所用C++ .so共享库问题咨询
核心结论
Qt项目编译的C++ .so文件无法直接在Android Studio中加载使用,因为它是针对桌面Linux架构编译的,且依赖Qt桌面运行时库,和Android环境的ABI架构、依赖体系不兼容。必须重新编译适配Android的版本,或调整为纯C++无Qt依赖的库后用NDK编译。
具体解决方案
1. 用Qt for Android重新编译库
如果你的库依赖Qt模块(比如Qt Core、Qt GUI),必须通过Qt的Android编译环境重新构建:
- 先在Qt Installer中安装Android组件:对应版本的NDK、SDK,以及Qt for Android的编译套件(如
Android Clang 64-bit)。 - 导入原Qt库项目,切换到Android编译套件:
- 检查
.pro文件,移除仅桌面平台的依赖(比如QT += widgets如果是纯逻辑库可删除),若不需要Qt核心库,可设置QT -= core gui。 - 编译后,Android版本的.so会生成在
build-xxx-Android_Qt_xx_clang_64bit-Debug/libs/[ABI]/目录下(ABI包括arm64-v8a、armeabi-v7a等)。
- 检查
2. 导入Android Studio项目
- 在项目
app/src/main/下创建jniLibs目录,按ABI架构创建子目录,将对应架构的.so文件放入。 - 如果库依赖Qt的Android运行时库(如
libQt5Core.so、libQt5Gui.so),需将这些库一并放入对应jniLibs子目录。
3. 通过JNI调用库函数
- 编写JNI桥接代码(C++),对接头文件中的函数:
#include <jni.h> #include "你的库头文件.h" extern "C" JNIEXPORT jint JNICALL Java_com_yourpackage_MainActivity_callLibFunc(JNIEnv* env, jobject thiz) { // 调用库中的目标函数 return your_lib_function(); }
- 在Android端的Kotlin/Java代码中加载库并调用:
class MainActivity : AppCompatActivity() { init { // 先加载依赖的Qt库(如果有) System.loadLibrary("Qt5Core") // 加载你的自定义库(不带lib前缀和.so后缀) System.loadLibrary("your-lib-name") } external fun callLibFunc(): Int // 业务逻辑中调用该函数即可 }
4. 纯C++库的替代方案
如果你的库不依赖任何Qt模块,可直接用Android NDK编译:
- 编写
CMakeLists.txt或Android.mk配置文件,指定编译目标ABI和编译选项,用NDK直接生成Android兼容的.so文件,无需依赖Qt环境。
内容的提问来源于stack exchange,提问作者Maneeksha C Ashok
相关产品推荐
相关产品推荐

