在Android原有的api基础上添加自定义方法进行调用

      因为自己对相机还是情有独钟,也挺感兴趣的,所以这里就拿相机来做一个例子来说一下这个过程!

一、我们找到相机很重要的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来侧测试方法是否添加成功!

猜你喜欢

转载自blog.csdn.net/TSK_Amine/article/details/85336056
今日推荐