因为自己对相机还是情有独钟,也挺感兴趣的,所以这里就拿相机来做一个例子来说一下这个过程!
一、我们找到相机很重要的camera类来添加一个自己的方法。
我这里用到的并不是Google原生释放的Android源码,同时相机也是有Camera、Camera2、MktCamera。里面有很多三方开放商添加的客制化修改!所以我们得找准自己真正使用的camera类。我们这里使用Camera来做调试测试。
这里找到camera类路径:frameworks/base/core/java/android/hardware/Camera.java。Google原生的camra类(里面还存在MtkCamera类等等)。
我们这里就添加一个获取摄像头数量的方法:public native static int mygetNumberOfCameras();这是一个native方法。了解jni和ndk编程的都应该了解。native方法在相对应android_hardware_Camera.cpp文件中有与之匹配的c++方法。
二、找到android_hardware_Camera.cpp
文件路径:frameworks/base/core/jni/android_hardware_Camera.cpp(这里同样也得确认清楚文件,同样的文件也有很多)
我们在里面添加
static jint android_hardware_Camera_mygetNumberOfCameras(JNIEnv *env, jobject thiz)
{
return Camera::getNumberOfCameras();
}
在static const JNINativeMethod camMethods[]数组中添加上你添加的方法:
{ "getNumberOfCameras",
"()I",
(void *)android_hardware_Camera_mygetNumberOfCameras },
到这里方法是添加好了!
三、我们要想编译使用到你添加的方法,我们还要将你添加方法更新到api文档中。
在这里你只需要执行:make update-api
命令结束后,在frameworks/base/api/test-current.txt文件中,你就会看到
package android.hardware {
public deprecated class Camera {
method public static int mygetNumberOfCameras();
后面我们可以打印log来侧测试方法是否添加成功!