so文件是什么
so文件,即Shared Object,是用C/C++(JNI)编译出来的Android平台上的动态链接库,类比.dll。本质上就是一段用C/C++写的、编译成机器码的本地代码库。
Android Java 层无法直接调用C/C++,必须通过JNI。
为什么Android要用so文件
Android App 平时写的是Java或Kotlin代码,但有些场景下:
- 对性能要求特别高(如图像处理、音视频解码、AI 推理等)
- 需要复用已有的C/C++代码(如 OpenCV、FFmpeg、TensorFlow Lite)
- 需要调用底层系统接口(JNI 层)
这时就会用到Native层代码(C/C++),然后编译生成so文件,供Java层调用。
so文件存放路径
so文件必须放在特定路径,AGP(Android Gradle Plugin)才能识别到:
1 | app/src/main/jniLibs/ |
Android设备有多种ABI(CPU架构),so文件也须根据不同架构单独编译,每个CPU架构文件夹下都放对应的so文件。
可以在app模块的build.gradle中指定:
1 | android { |
调用so方法
定义JNI方法
1 | public class NativeHelper { |
通常由提供so文件的一方提供封装了Java native方法的jar/aar。
调用
1 | String msg = NativeHelper.getMessage(); |