You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 13:21:04