当前位置: 首页 > news >正文

Android framework 中间件开发(三)

        前两篇我们讲了中间件的开发和打包应用,

        Android framework 中间件开发(一)

        Android framework 中间件开发(二)

        这边我们来讲一下在中间件中编写JNI

        1.新建C++文件

        找到frameworks\base\services\core\jni\路径,新建一个cpp文件,文件名为com_android_server_DarkControlService.cpp,里面就写两个测试函数,内容如下:

#define LOG_TAG "--==>>"
#include <utils/Log.h>
#include <log/log.h>
#include <jni.h>
#include <android_runtime/AndroidRuntime.h>
#include <nativehelper/JNIHelp.h>
#include "core_jni_helpers.h"namespace android{static jint android_server_DarkControlService_getSum(JNIEnv *env, jobject thiz, jint num1, jint num2)
{ALOGE("num1: %d, num2: %d",num1,num2);return num1+num2;
}static void android_server_DarkControlService_testPrint(JNIEnv *env, jobject thiz,jstring str)
{const char* cstr = env->GetStringUTFChars(str, NULL);ALOGE("testPrint: %s",cstr);// 记得释放内存env->ReleaseStringUTFChars(str, cstr);
}static const JNINativeMethod method_table[] = {{ "native_getSum", "(II)I",(void *)android_server_DarkControlService_getSum },{ "native_testPrint", "(Ljava/lang/String;)V",(void *) android_server_DarkControlService_testPrint },
};int register_android_server_DarkControlService(JNIEnv *env)
{return jniRegisterNativeMethods(env, "com/android/server/DarkControlService",method_table, NELEM(method_table));
}} // namespace android

        里面有几个重要的地方,static const JNINativeMethod method_table[]和register_android_server_DarkControlService
        method_table中需要将暴露给java的函数都在里面声明一下,注意每个函数的传参和返回值,

        register_android_server_DarkControlService:这个是将这个C++代码和中间件的service类绑定起来

        2.引入源文件

        找到frameworks\base\services\core\jni\Android.bp,将刚刚写的cpp文件添加到这边:

        3.初始化绑定 

        找到frameworks\base\services\core\jni\onload.cpp文件,将刚刚的register_android_server_DarkControlService函数添加进去,

        4.调用jni 

        在DarkControlService中添加jni中的两个函数

然后我们调用一下这两个函数,

这样就算完成了,重新编译之后开机我们看一下执行的log

相关文章:

  • docker(四)使用篇二:docker 镜像
  • unity之导入本地packages包
  • 若依框架SpringBoot从Mysql替换集成人大金仓(KingBase)数据库
  • Android 中 权限分类及申请方式
  • nlf loss 学习笔记
  • 智能呼入:云蝠大模型赋能政府热线
  • 激活函数全解析:定义、分类与 17 种常用函数详解
  • 编译opencv4.11gstreamer 参考
  • Spring Batch学习,和Spring Cloud Stream区别
  • 高光谱遥感图像处理之数据分类的fcm算法
  • 采用hovernet统计整张病理切片(png)细胞数量并进行RGB可视化
  • 相机Camera日志分析之九:高通相机Camx 基于预览1帧的ConfigureStreams二级日志分析详解
  • 现代简约中式通用,民国画报风,中国风PPT模版8套一组分享
  • Spring Cloud动态配置刷新:@RefreshScope与@Component的协同机制解析
  • iOS音视频解封装分析
  • LangFlow技术深度解析:可视化编排LangChain应用的新范式 -(2)流编辑器系统
  • 深入理解 Git 分支操作的底层原理
  • SZU 编译原理
  • 深度学习笔记23-LSTM实现火灾预测(Tensorflow)
  • C++_STL_map与set
  • 美国失去最后的AAA主权评级,继标普、惠誉后再遭穆迪降级
  • “朱雀玄武敕令”改名“周乔治华盛顿”?警方称未通过审核
  • 九江宜春领导干部任前公示,3人拟提名为县(市、区)长候选人
  • 上海市重大工程一季度开局良好,多项生态类项目按计划实施
  • 德国总理默茨发表首份政府声明:将提升国防能力,全力发展经济
  • 陕西河南山西等地将现“干热风”灾害,小麦产区如何防范?