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

Flutter通过MethodChannel调用Java+C++共享库找不到.so文件配置求助

解决方案

1 修正编译侧基础问题

你当前编译的是MacOS平台的.so文件,架构完全不兼容Android系统,首先需要使用Android NDK工具链编译适配Android不同ABI架构的.so文件。
另外你提供的CMakeLists.txt存在拼写错误:set(CMALE_CXX_STANDARD_REQUIRED ON) 需修改为 set(CMAKE_CXX_STANDARD_REQUIRED ON)。

2 Android项目文件放置规则

  • 编译好的适配Android的.so文件,按ABI分类放到 android/app/src/main/jniLibs/ 目录下,目录结构示例:
android/
└── app/
    └── src/
        └── main/
            └── jniLibs/
                ├── arm64-v8a/
                │   └── libjava_cpp.so
                ├── armeabi-v7a/
                │   └── libjava_cpp.so
                └── x86_64/
                    └── libjava_cpp.so
  • 你编译生成的.jar包放到 android/app/libs/ 目录下

3 修改Android侧配置

3.1 调整app模块的build.gradle配置

打开 android/app/build.gradle,做如下修改:

android {
    defaultConfig {
        // 新增ndk配置,指定你要支持的ABI架构,和jniLibs下的目录对应
        ndk {
            abiFilters 'arm64-v8a', 'armeabi-v7a', 'x86_64'
        }
    }

    // 确保libs目录下的jar包会被引入
    dependencies {
        implementation fileTree(dir: 'libs', include: ['*.jar'])
        // 其余原有依赖保留
    }
}

3.2 修改Java层的库加载代码

删除原来的绝对路径加载逻辑,改为调用System.loadLibrary加载:

static {
    // 参数是so文件去掉前缀lib、去掉后缀.so的名称,你生成的so是libjava_cpp.so,所以填java_cpp
    System.loadLibrary("java_cpp");
}

4 MethodChannel调用链路配置

4.1 Android侧注册MethodChannel

在你的Flutter项目的主Activity中注册MethodChannel,接收Dart侧的调用,转发到你jar包中的Java逻辑即可:

// 示例代码,放在MainActivity的onCreate方法中
new MethodChannel(getFlutterEngine().getDartExecutor().getBinaryMessenger(), "你的自定义channel名称")
    .setMethodCallHandler((call, result) -> {
        if (call.method.equals("你要调用的方法名")) {
            // 调用你jar包中的Java方法,Java方法内部会调用C++的逻辑
            String res = 你的Java类.方法名(call.argument("参数名"));
            result.success(res);
        } else {
            result.notImplemented();
        }
    });

4.2 Dart侧调用示例

const channel = MethodChannel('你的自定义channel名称');
// 调用方法
final result = await channel.invokeMethod('你要调用的方法名', {'参数名': '参数值'});

可选简化方案

你可以直接把C++源码放到 android/app/src/main/cpp/ 目录下,把你的CMakeLists.txt也放到该目录,然后在android/app/build.gradle中配置CMake编译逻辑,由Android编译流程自动生成对应ABI的so文件,无需手动提前编译:

android {
    externalNativeBuild {
        cmake {
            path "src/main/cpp/CMakeLists.txt"
            version "3.22.1" // 对应你的CMake版本
        }
    }
}

内容的提问来源于stack exchange,提问作者Ludwig12

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 14:09:05