1.JNI的含义
JNI即为java native interface Java本地接口;JNI是用来调用本地方法的技术,用来使Java和C/C++进行通信。
简单来说,Java运行一个程序需要和不同的系统进行交互,在windows里就要和windows底层平台交互,mac里就要和mac的底层平台交互, JVM就是通过大量的JNI技术能够使Java运行在不同的系统平台当中,与不同的系统平台底层进行交互。
2.camera中新增JNI方法实例
案例背景:在实现GMS核心服务的时候,有涉及到需要在Camera中新增一个JNI方法提供给java层调用,便于在GMS测试途中来禁用扫码头
通常涉及以下几个步骤
- 声明Java的native方法:在Java类中声明native方法。
路径:frameworks/base/core/java/android/hardware/Camera.javatips:新增的方法需要更新api 路径:system/frameworks/base/core/api/current.txt 建议使用命令去更新api,手动更新容易导致编译不过
- 实现Native方法:使用C或C++实现该方法。
路径:frameworks/av/camera/include/camera/CameraBase.h
frameworks/av/camera/CameraBase.cpp
- 注册Native方法:使用JNI注册该方法,使得Java可以调用它。
路径:frameworks/base/core/jni/android_hardware_Camera.cpp
通过以上三个步骤之后,重新编译代码更新so库,在out的项目目录
system/lib64/libcamera_client.so,
刷机后就可以通过Java代码调用Camera.setDisableScan(true)方法了