Android framework 中间件开发(三)

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

Android framework 中间件开发(一)

Android framework 中间件开发(二)

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

1.新建C++文件

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

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

相关推荐
超勇的阿杰32 分钟前
gulimall项目笔记:P54三级分类拖拽功能实现
android·笔记
峥嵘life2 小时前
Android 欧盟网络安全EN18031 要求对应的基本表格填写
android·安全·web安全
程序员码歌4 小时前
【零代码AI编程实战】AI灯塔导航-从0到1实现篇
android·前端·人工智能
北十南4 小时前
SODA自然美颜相机(甜盐相机国际版) v9.3.0
android·windows·数码相机
Harry技术4 小时前
Trae搭建Android项目:智能存储柜表结构设计以及实体生成
android·kotlin·trae
编程乐学5 小时前
网络资源模板--基于Android Studio 实现的通讯录App
android·android studio·移动端开发·通讯录app·安卓大作业
bytebeats6 小时前
# Android Studio Narwhal Agent 模式简介
android·android studio
吴Wu涛涛涛涛涛Tao7 小时前
Flutter 实现类似抖音/TikTok 的竖向滑动短视频播放器
android·flutter·ios
bytebeats7 小时前
Jetpack Compose 1.8 新增了 12 个新特性
android·android jetpack
limingade8 小时前
手机实时提取SIM卡打电话的信令声音-整体解决方案规划
android·智能手机·usb蓝牙·手机拦截电话通话声音