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

Android Studio提示JNI类缺失:无法解析对应JNI函数求助

解决Android Studio提示"Cannot resolve corresponding JNI function"问题

你遇到的这个情况其实挺常见——项目能正常构建运行,但IDE一直报JNI函数找不到的提示,确实有点闹心。结合你提供的信息,我整理了几个针对性的解决思路,你可以逐一尝试:

1. 先核对JNI函数签名的一致性

这个提示最常见的原因就是Java层native方法和JNI层函数的签名不匹配,哪怕是一个字符的差异都会触发警告。你需要仔细检查:

  • Java层opensslSign类里的native方法的包名、类名、方法名、参数类型、返回值必须和JNI代码里的函数完全对应。
  • 如果opensslSign是AsyncTask的内部类,JNI函数名里需要用$连接外层类和内部类,比如Java类路径是com.example.MyTask$opensslSign,那JNI函数名应该是Java_com_example_MyTask$opensslSign_xxx(注意内部类的$在JNI函数名里要保留,不能转成下划线)。
  • 建议用javah工具自动生成正确的JNI头文件,避免手动写签名出错。

2. 确保Gradle正确配置JNI相关目录

看你的Gradle配置,已经设置了jniLibs.srcDirs = ['libs'],但如果你的JNI源码(.c/.cpp文件)在单独的jni目录下,需要明确指定源码目录:

sourceSets {
    main {
        // ... 保留其他原有配置
        jni.srcDirs = ['jni'] // 指向你的JNI源码所在目录
        jniLibs.srcDirs = ['libs'] // 指向so文件存放目录
    }
}

另外,Android.mk和Application.mk要放在jni目录下,这样Gradle才能正确识别并调用ndk-build编译。

3. 清理IDE缓存并重新同步项目

有时候就是Android Studio的缓存抽风了,试试这套组合拳:

  • 点击工具栏的File -> Sync Project with Gradle Files,确保Gradle配置完全同步
  • 执行Build -> Clean Project,然后Build -> Rebuild Project
  • 最后重启IDE并清除缓存:File -> Invalidate Caches... -> Invalidate and Restart

4. 检查so文件的ABI结构是否正确

你的Gradle里配置了splits支持x86和armeabi-v7a,那libs目录下必须有对应的子目录,结构应该是这样:

libs/
├── x86/
│   └── libcryptowrapper.so
└── armeabi-v7a/
    └── libcryptowrapper.so

不能把so文件直接放在libs根目录下,否则Android Studio可能无法按ABI正确关联。

5. 确认NDK配置正常

检查local.properties文件里是否指定了正确的NDK路径:

ndk.dir=/path/to/your/android/ndk

如果使用的是较新的Gradle插件,还可以在defaultConfig里明确指定ABI过滤,和splits配置保持一致:

defaultConfig {
    // ... 保留其他配置
    ndk {
        abiFilters 'x86', 'armeabi-v7a'
    }
}

6. 临时禁用JNI检查(迫不得已的方案)

如果以上方法都试过了,项目运行完全正常只是IDE提示烦人,可以暂时关闭这个检查:

  • 打开File -> Settings -> Editor -> Inspections -> Android -> Lint -> Correctness
  • 找到JNI Function Declaration选项,取消勾选,点击Apply保存设置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:36:18