前言

相信在 Android 中进行 jni 开发的基本都碰到过如下错误

1
java.lang.UnsatisfiedLinkError: No implementation for void xxx

定位

上面这个错误网上有不少资料,大概就是 Java 对应的 C++ 方法找不到。

Java 的函数很好找,但是 C++ 编译成 so 之后,对应的函数还在不在,有没有改变就不好说了。

其实可以通过查看 so 的符号表来看 C++ 对应的函数是否正确。

1
sdk/ndk/28.0.13004108/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf -s xxx.so

如果符号表很多函数可以通过 grep 来过滤。

1
sdk/ndk/28.0.13004108/toolchains/llvm/prebuilt/darwin-x86_64/bin/llvm-readelf -s xxx.so |grep Java_xxx