Android 完整SDK项目中添加对应的JNI与底层通信

news2024/10/1 1:28:32

安卓应用发消息给底层

近日需要写一个安卓app和底层发消息,这就涉及到java如何到c层的一个逻辑,app已经写好,就差发个消息了。至于如何对接底层,得和写底层的人进一步沟通,本文笔者只写从java层通信到cpp,并且打印出一个值,至于通信底层,到了c层了,open,read一个驱动,也就轻轻松松了。

文章目录

  • 安卓应用发消息给底层
  • framework/jni 编写
  • 注册编写好的JNI—>AndroidRuntime.cpp
  • 创建\frameworks\base\core\java\android\sendMsg\SendMsg.java文件并编写
  • 在实际应用APP目录下packages/apps/test.java调用对应的代码
  • 结束

framework/jni 编写

\android_sdk\frameworks\base\core\jni
新建一个cpp文件
SendDriverMsg.cpp
这个Cpp主要就是注册实际要执行的代码,比如下文的sendMsg函数


#define LOG_TAG "SendDriverMsg"

#include "jni.h"
#include "android_runtime/AndroidRuntime.h"
#include <nativehelper/JNIHelp.h>
#include "utils/Log.h"

	// 实现 sendMsg 函数,用于调用底层的东西并传递数据
int sendMsg(int msg) {
    // 在这里实现调用底层的逻辑,处理传递的数据 msg
	// 打印信息到 Logcat
        __android_log_print(ANDROID_LOG_INFO, LOG_TAG, "*******************");
		__android_log_print(ANDROID_LOG_INFO, LOG_TAG, "%d", msg);
    return msg; 
}

//注意名称空间和Java调用JNI所有路径紧密的关系,不能随便取名称
namespace android {
	static jint android_sendMsg(JNIEnv *env,jobject clazz,jint msg){
		return sendMsg(msg);
	}
/*
`sendSelect_MSG` 方法需要一个整数参数 `msg`,则方法的签名应该为 `"(I)I"`。
这样,`sendSelect_MSG` 方法会被认为接受一个整数参数并返回一个整数。
*/
static JNINativeMethod method_table[] ={
	{"sendSelect_MSG","(I)I",(void *)android_sendMsg},
};

//JNI注册函数,后面应用层导入包就是android.sendMsg
int register_android_sendMsg(JNIEnv *env){
	//第二个参数是对应的java代码的路径,我这里的java代码名字是SendMsg.java
		//这个参数和应用层java文件调用包的路径有关联
		//frameworks/base/core/java/android/sendMsg/SendMsg.java完整路径是对应的
		//应用层导入包名android.sendMsg,android.sendMsg.SendMsg
	return AndroidRuntime::registerNativeMethods(env,"android/sendMsg/SendMsg",method_table,NELEM(method_table));
}
};

注册编写好的JNI—>AndroidRuntime.cpp

打开同目录下的AndroidRuntime.cpp
进去之后,先看我怎么加,你就会知道怎么写,俩个字“模仿”文件的其它cpp添加即可

extern int register_android_sendMsg(JNIEnv* env);

//………………省略代码

static const RegJNIRec gRegJNI[] = {
//………………省略代码

REG_JNI(register_android_sendMsg),
//………………省略代码

}

主要就是添加两行

  1. extern int register_android_sendMsg(JNIEnv* env);
  2. REG_JNI(register_android_sendMsg),
  3. 在文中找到对应的地方添加就可以了

创建\frameworks\base\core\java\android\sendMsg\SendMsg.java文件并编写

package android.sendMsg;
/**
	Native methods for managing fm
	{@hide}
*/
public class SendMsg{
	public native int sendSelect_MSG(int msg);//Android应用的代码最终能调用的就是这个代码
	public SendMsg(){
	}
}

在实际应用APP目录下packages/apps/test.java调用对应的代码

导入你写好的framework层的包名
在这里插入图片描述
实例化,并且调用
在这里插入图片描述
烧录并等待对应的结果
在这里插入图片描述

结束

如果对你有帮助,来个三连支持一下吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505778.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

RabbitMQ - 05 - Direct交换机

部署demo项目 通过消息队列demo项目进行练习 相关配置看此贴 http://t.csdnimg.cn/hPk2T 注意 生产者消费者的yml文件也要配置好 什么是Direct交换机 Direct 交换机是 AMQP&#xff08;高级消息队列协议&#xff09;中的一种交换机类型&#xff0c;它根据消息的路由键&am…

【微服务】SpringBoot整合Resilience4j使用详解

目录 一、前言 二、熔断器出现背景 2.1 几个核心概念 2.1.1 熔断 2.1.2 限流 2.1.3 降级 2.2 为什么会出现熔断器 2.3 断路器介绍 2.3.1 断路器原理 三、Resilience4j介绍 3.1 Resilience4j概述 3.1.1 Resilience4j是什么 3.1.2 Resilience4j功能特性 3.2 Resilie…

巨型犰狳优化算法(Giant Armadillo Optimization,GAO)的无人机三维路径规划(MATLAB)

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行时间和节省能量消耗。 二、算法介…

javase day01笔记

第一天课堂笔记 Java第三代高级语言中的面向对象的语言 b/s 浏览器/服务器c/s 客户端/服务端 1991年詹姆斯高斯林在sun公司开发的Java 常用的dos命令 磁盘操作系统&#xff1a;dos win &#xff0b; r -》 cmd dos命令 切换盘符&#xff1a;直接输入对应盘符目录操作&#x…

【R包开发:入门】 简介+ 包的结构

简介 本书的目的是教你如何开发包&#xff0c;以便你可以写出自己的包&#xff0c;而不只是使用别人的包。 为什么要写一个包&#xff1f; 一个令人信服的理由是&#xff0c;你想要与他人分享代码。把你的代码打成一个包&#xff0c;可以方便他人使用&#xff0c;因为他们像你…

vue中性能优化

目录 1. 编码优化 2. 源码优化 3. 打包优化 4. 利用 Vue Devtools 总结 Vue.js 作为一个强大的前端框架&#xff0c;提供了丰富的功能和工具来帮助开发者构建高效的 Web 应用。然而&#xff0c;在开发过程中&#xff0c;性能优化仍然是一个需要关注的问题。以下是对 Vue.j…

高级IO【select、poll、epoll】

高山仰止&#xff0c;景行行止 文章目录 五种IO模型阻塞I/O非阻塞I/OI/O复用信号驱动I/O异步I/O 同步通信与异步通信同步通信异步通信 非阻塞IO基于fcntl实现setNonblock函数注意事项 IO多路转接—select文件描述符集合timeval结构调用过程返回值缺点和局限性 IO多路转接—poll…

Java共享问题 、synchronized 线程安全分析、Monitor、wait/notify

文章目录 1.共享带来的问题1.1 临界区 Critical Section1.2 竞态条件 Race Condition 2. synchronized语法及理解2.1 方法上的 synchronized 3.变量的线程安全分析3.1.成员变量和静态变量是否线程安全&#xff1f;3.2.局部变量是否线程安全&#xff1f;3.2.1 局部变量线程安全分…

三阶导数在生活中应用

“鲍威尔还表示&#xff0c;美联储将在某个时候放慢&#xff08;利率&#xff09;加息步伐” 这是参考三阶导数&#xff08;贷款义务基础&#xff0c;利率一阶导数&#xff0c;利率变化二阶导数&#xff0c;利率变化速度三阶导数&#xff09;。 是否还有其他有趣的例子&#…

算法详解——leetcode150(逆波兰表达式)

欢迎来看博主的算法讲解 博主ID&#xff1a;代码小豪 文章目录 逆波兰表达式逆波兰表达式的作用代码将中缀表达式转换成后缀表达式文末代码 逆波兰表达式 先来看看leetcode当中的原题 大多数人初见逆波兰表达式的时候大都一脸懵逼&#xff0c;因为与平时常见的表达式不同&am…

华为配置DHCP Snooping防止DHCP Server仿冒者攻击示例

配置DHCP Snooping防止DHCP Server仿冒者攻击示例 组网图形 图1 配置DHCP Snooping防止DHCP Server仿冒者攻击组网图 DHCP Snooping简介配置注意事项组网需求配置思路操作步骤配置文件 DHCP Snooping简介 在一次DHCP客户端动态获取IP地址的过程中&#xff0c;DHCP Snoopi…

基于Vue的娱讯移动端APP前端设计与实现

目 录 摘 要 Abstract 引 言 1绪论 1.1课题背景及目的 1.1.1移动端APP发展简介 3 1.1.2移动端APP的优势 3 1.2前端开发相关技术 1.2.1前端开发工具介绍 3 1.2.2 前端开发相关技术介绍 4 1.3本章小结 2系统分析 2.1功能需求分析 2.2系统工作流程 2.3本章小结 3系统设…

Linux 之七:Linux 防火墙 和进程管理

防火墙 查看防火墙 查看 Centos7 的防火墙的状态 sudo systemctl status firewalld。 查看后&#xff0c;看到active(running)就意味着防火墙打开了。 关闭防火墙&#xff0c;命令为&#xff1a; sudo systemctl stop firewalld。 关闭后查看是否关闭成功&#xff0c;如果…

python的scripts文件夹作用

Windows系统&#xff1a; Scripts文件夹通常位于Python的安装目录下&#xff0c;如C:\Python\Scripts。该文件夹内包含了各种有用的工具&#xff0c;例如pip、virtualenv等&#xff0c;这些工具有助于管理和配置Python环境和依赖包。 Linux系统&#xff1a; 在Linux系统中&…

【大厂AI课学习笔记NO.69】使用开源管理仓库

了解了开源框架&#xff0c;开源项目&#xff0c;今天来学习开源管理仓库。 我们先说Git&#xff0c;开源的版本管理分布式系统。 GitHub&#xff0c;则是世界上最大的代码托管平台&#xff0c;面向开源和私有项目托管。 有的人总是分不清这两个&#xff0c;其实一个是版本管…

凌鲨微应用架构

微应用是静态网页加上凌鲨提供的扩展能力而形成的一种应用&#xff0c;主要特点是开发便捷&#xff0c;安全。 微应用架构 组件说明 名称 说明 微应用 webview窗口&#xff0c;显示web服务器上的页面 接口过滤器 根据权限配置,屏蔽非授权接口访问 接口提供者 tauri注入…

循序渐进丨MogDB 数据库特性之动态数据脱敏机制

数据脱敏是行之有效的数据库隐私保护方案之一&#xff0c;可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化脱敏策略来实现对隐私数据保护的技术&#xff0c;可以在保留原始数据的前提下有效地解决非授权用户对敏感信息访问的问题。当管理员…

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板&#xff0c;找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上&#xff0c;玩家可以完全控制掷骰子的结果&#xff0c;并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩…

基于鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)的无人机三维路径规划

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径&#xff0c;使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一&#xff0c;它可以通过算法和模型来确定无人机的航迹&#xff0c;以避开障碍物、优化飞行…

gradle下载太慢者超时!国内镜像可以直接下载

# 解决Gradle下载过慢问题的有效方式&#xff1a;使用国内镜像站点 在开发过程中&#xff0c;我们经常会遇到Gradle下载速度缓慢或超时的问题。作为一个强大而流行的构建工具&#xff0c;Gradle是许多项目中必不可少的一部分。然而&#xff0c;由于官方下载地址可能受网络限制…