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

安卓NDK开发

1、jni:java native interface
    作用:用于java代码和C++、c代码的交互(代码混编);
    分类使用:Jni静态注册、jni动态注册
2、静态注册
    1).绑定java方法和C/C++方法的方式之一;
    2).java层操作和c层操作以及整体编译
            1-定义被native修饰的方法
            2-根据java代码生成.h头文件(javah -jni 类的包名路径)
            3-编写C/C++代码,导入.h头文件,实现我们.h头文件中方法
            4-编写(配置)两个mk文件:application.mk/android.mk
            5.通过ndk-build生成so文件;
            6.java代码中加载so文件(system.loadlibrary)
            7.补充:获取so库的名称
                    1-libs文件下去头去尾(头:lib;尾:.so);
                     2.在android.mk直接复制模块名称;
3.动态注册
    1)作用:.绑定java方法和C/C++方法的方式之一
    2)流程
            1-java中定义native的方法
            2-创建C++代码代码,导入头文件;
            2.1-编写(配置)两个mk文件:application.mk/android.mk
            3-JNInativeMethod:绑定java方法和C/C++的方法
            4-registerNatives(4个参数):注册java层相应的类以及方法
            5-使用jni.h中JNI_onload进行判断:注册是否成功(JIN_onload:系统调用,相当于java中的psvm:public static void main)
            6-ndk-build生成so,
            7-java代码中加载so文件(system.loadlibrary)

总结:静态注册和动态注册比较
            静态注册:1.编写不方便,jni方法名必须遵守规则且名字很长;
                              2.过程较多,效率低    
                              3.不安全,
             动态注册:1.流程清晰可控
                               2.效率更高,安全
                               3.JIN_onload

NDK开发总结
关于头文件:
    1.静态注册:
            创建了4个文件:.c、.h、.mk、.mk
                     JNIstudy.c:#inude < .h>
                                各种代码的实现:实现java层被native修饰的方法
                       JNIstudy .h:#include <jni.h>、#include <number.h>、#include <String.h>
                        mk:配置文件;
        捋一捋这句话:在.c文件里面导入包含jni.h头文件的 JNIstudy.h头文件
                
   2.动态注册    
   创建了3个文件:.c、.mk、.mk
                        .c:#include <jni .h>
                                各种代码的实现:实现java层被native修饰的方法
                        mk:配置文件;

Android.mk

LOCAL_PATH := $(call my-dir)   
include $(CLEAR_VARS)  
LOCAL_MODULE    := JNIstudy  	#�����  
LOCAL_SRC_FILES := JNIstudy.c #Դ�ļ�  .c����.cpp
LOCAL_ARM_MODE := arm #������ָ� ARMָ��
LOCAL_LDLIBS += -llog #������    
include $(BUILD_SHARED_LIBRARY) #ָ�������ļ�������

Application.mk

APP_ABI := armeabi-v7a

 

相关文章:

安卓NDK开发

1、jni&#xff1a;java native interface 作用&#xff1a;用于java代码和C、c代码的交互&#xff08;代码混编&#xff09;&#xff1b; 分类使用&#xff1a;Jni静态注册、jni动态注册 2、静态注册 1&#xff09;.绑定java方法和C/C方法的方式之一&#xff1b; …...

高性能网络编程 - 解读5种I/O模型

文章目录 服务端处理网络请求流程图基础概念阻塞调用 vs 非阻塞调用同步处理 vs 异步处理阻塞、非阻塞 和 同步、异步的区别recvfrom 函数 五种I/O模型I/O模型1&#xff1a;阻塞式 I/O 模型(blocking I/O&#xff09;I/O模型2&#xff1a;非阻塞式 I/O 模型(non-blocking I/O&a…...

复盘一个诡异的Bug

该Bug的诡异之处在于这是一个由多种因素综合碰撞之后形成的综合体。纵观整个排查过程&#xff0c;一度被错误的目标误导&#xff0c;花费大量功夫后才找到问题点所在&#xff0c;成熟的组件在没有确凿证据之前不能随意怀疑其稳定性。 前言 此前在接入两台粒径谱仪&#xff08;…...

【uniapp】通用列表封装组件

uniapp页面一般都会有像以下的列表页面&#xff0c;封装通用组件&#xff0c;提高开发效率&#xff1b; &#xff08;基于uView前端框架&#xff09; 首先&#xff0c;通过设计图来分析一下页面展示和数据结构定义 w-table组件参数说明 参数说明类型可选值默认值toggle列表是…...

17 Linux 中断

一、Linux 中断简介 1. Linux 中断 API 函数 ① 中断号 每个中断都有一个中断号&#xff0c;通过中断号可以区分出不同的中断。在 Linux 内核中使用一个 int 变量表示中断号。 ② request_irq 函数 在 Linux 中想要使用某个中断是需要申请的&#xff0c;request_irq 函数就是…...

微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?

背景&#xff1a;小程序真机调试的时候&#xff0c;发现真机的network不显示接口调用情况&#xff0c;控制台也没有输出内容。具体如下所示&#xff1b; 解决方法&#xff1a; 1、确保手机端连接的网络和微信开发者工具网络一致&#xff0c;比如用同一个WiFi 2、真机自动调试…...

最新Next 14快速上手基础部分

最新Next 14快速上手基础部分 最新的NEXT快速上手文档&#xff0c;2023.10.27 英文官网同步&#xff0c;版本Next14.0.0 本项目案例&#xff1a;GitHub地址&#xff0c;可以根据git回滚代码到对应知识&#xff0c;若有错误&#xff0c;欢迎指正&#xff01; 一、介绍 1.什么是…...

【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标

最终效果是这样的&#xff1a; 官方没有给出相关配置项&#xff0c;后来发现小箭头不是 uview 的图标&#xff0c;而是 unicode 编码&#xff0c;具体代码&#xff1a; // 箭头图标 ::v-deep .uicon-arrow-down[data-v-6e20bb40]:before {content: \1f783; }附一个查询其他 u…...

企业如何落地搭建商业智能BI系统

随着新一代信息化、数字化技术的应用&#xff0c;引发了新一轮的科技革命&#xff0c;现代化社会和数字化的联系越来越紧密&#xff0c;数据也变成继土地、劳动力、资本、技术之后的第五大生产要素&#xff0c;这一切都表明世界已经找准未来方向&#xff0c;前沿科技也与落地并…...

RedisTemplate连接密码设置教程

最近在一个项目中使用Redis保存Token时&#xff0c;出现连接Redis报错的情况 org.springframework.data.redis.RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException: Unable to connect to localhos…...

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…...

温故知新:探究Android UI 绘制刷新流程

一、说明&#xff1a; 基于之前的了解知道ui的绘制最终会走到Android的ViewRootImpl中scheduleTraversals进行发送接收vsync信号绘制&#xff0c;在ViewRootImpl中还会进行主线程检测&#xff0c;也就是我们所谓子线程更新ui会抛出异常。 像我们常用的刷新ui&#xff0c;inval…...

设计模式-命令模式(Command)

设计模式-命令模式&#xff08;Command&#xff09; 一、命令模式概述1.1 什么是命令模式1.2 简单实现命令模式1.3 使用命令模式的注意事项 二、命令模式的用途三、命令模式实现方式3.1 使用匿名内部类实现命令模式3.2 使用Lambda表达式实现命令模式3.3 使用Java内置的函数式接…...

linux批量解压zip

方法一 1&#xff0c;创建unzip.sh #!/bin/bashwhile read line do unzip $linedone < filelist.txt #!/bin/bashwhile read line dounzip "$line" >& log & done < filelist.txt3. 在终端中执行以下命令 $ chmod x unzip.sh $ ./unzip.sh 这…...

HBase导出建表语句

HBase导出建表语句 HBase是一个面向大数据的分布式列存数据库&#xff0c;它以Hadoop作为底层存储和计算平台。在HBase中&#xff0c;数据以表的形式存储&#xff0c;每个表由行和列组成。本文将介绍如何使用HBase导出建表语句&#xff0c;并提供相应的代码示例。 HBase建表语…...

Linux环境配置(云服务器)

目录 1.第一步&#xff1a;购买云服务器 2.第二步&#xff1a;下载Xshell 7 3.第三步&#xff1a;打开Xshell&#xff0c;登录云服务器 4.第四步&#xff1a;更加便捷的云服务器登录方式 1.第一步&#xff1a;购买云服务器 &#xff08;推荐&#xff1a;阿里云、华为云、腾…...

【性能测试】Linux下Docker安装与docker-compose管理容器(超细整理)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、Linux下Docker…...

陪玩2.0升级版源码/价值18500元的最新商业版游戏陪玩语音聊天系统源码

陪玩2.0升级版源码&#xff0c;价值18500元的最新商业版游戏陪玩语音聊天系统源码。 修复部分逻辑以及bug 修复bug&#xff1a;店员拒单后&#xff0c;退款会退到店员账号里而不是用户账户里。 修复bug&#xff1a;客户在盲盒下单后&#xff0c;马上取消了订单&#xff0c;但…...

读程序员的制胜技笔记08_死磕优化(上)

1. 过早的优化是万恶之源 1.1. 著名的计算机科学家高德纳(Donald Knuth)的一句名言 1.2. 原话是&#xff1a;“对于约97%的微小优化点&#xff0c;我们应该忽略它们&#xff1a;过早的优化是万恶之源。而对于剩下的关键的3%&#xff0c;我们则不能放弃优化的机会。” 2. 过早…...

【gltf-pipeline】安装gltf-pipeline 进行文件格式转换

问题 想使用gltf-pipeline进行gltf和glb格式转换。简单记录一下安装过程。 解决 1、安装Node.js Node.js下载路径&#xff1a;https://nodejs.org/en 建议默认设置安装。 添加系统环境变量&#xff1a; 测试安装是否成功&#xff1a; 在cmd.exe中运行&#xff1a; no…...

如何5分钟搞定GitHub加速:新手的终极解决方案指南

如何5分钟搞定GitHub加速&#xff1a;新手的终极解决方案指南 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 你是否曾因GitHub下载…...

从‘玩具’到‘工具’:我的电容主动均衡板实战笔记(解决电芯压差,提升电池组真实容量)

从‘玩具’到‘工具’&#xff1a;我的电容主动均衡板实战笔记 第一次意识到电池均衡的重要性&#xff0c;是在我的户外电源项目遭遇"容量跳水"之后。那组标称100Ah的磷酸铁锂电池&#xff0c;实际使用时容量竟不足70Ah——就像买了一辆宣称续航500公里的电动车&…...

食品喷码检测实战:Java+YOLOv11准确率99.2%,延迟不到30ms

做工业视觉落地快6年了,食品包装喷码识别是我做过最多的项目之一。几乎所有食品厂都有这个需求,但90%的项目都做得不好:传统OCR对模糊、变形、倾斜的喷码识别准确率只有60%-70%,每天需要安排大量人工复检,漏检的产品流到市场就是巨额的召回损失。 去年我帮某知名乳制品厂…...

Cadence Virtuoso实战:手把手教你搞定PLL相位噪声的HBnoise仿真与结果解读

Cadence Virtuoso实战&#xff1a;PLL相位噪声HBnoise仿真全流程解析 在射频集成电路设计中&#xff0c;相位噪声是衡量振荡器性能的关键指标之一。对于锁相环(PLL)中的压控振荡器(VCO)模块&#xff0c;准确的相位噪声仿真能够帮助工程师预测系统整体性能&#xff0c;识别潜在…...

WarcraftHelper:终极魔兽争霸III兼容性修复指南 [特殊字符]

WarcraftHelper&#xff1a;终极魔兽争霸III兼容性修复指南 &#x1f3ae; 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典魔兽争霸III在现…...

VSCode金融配置失效预警:2024年10月起VS Code 1.95将禁用非签名扩展——你的QuantLib调试器还能用几天?

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;VSCode金融配置失效预警总览 在高频交易、量化回测及金融建模等场景中&#xff0c;VSCode 常被用作核心开发环境&#xff0c;依赖大量定制化配置&#xff08;如 Python 虚拟环境路径、Jupyter 内核注册…...

【PySide6】构建实时视频监控界面:从摄像头捕获到QLabel动态显示

1. 环境准备与基础概念 在开始构建实时视频监控界面之前&#xff0c;我们需要先准备好开发环境。PySide6是Qt框架的Python绑定库&#xff0c;它提供了丰富的GUI组件和工具&#xff0c;非常适合用来开发桌面应用程序。OpenCV则是一个强大的计算机视觉库&#xff0c;能够轻松处理…...

虚拟现实的触觉延伸:vJoy如何重新定义数字世界的物理边界

虚拟现实的触觉延伸&#xff1a;vJoy如何重新定义数字世界的物理边界 【免费下载链接】vJoy Virtual Joystick 项目地址: https://gitcode.com/gh_mirrors/vj/vJoy 在数字与现实的交汇处&#xff0c;我们常常感受到一种奇妙的断裂——当我们的手指在键盘上飞舞&#xff…...

QMCFLAC2MP3终极指南:如何快速将QQ音乐加密格式转换为通用MP3

QMCFLAC2MP3终极指南&#xff1a;如何快速将QQ音乐加密格式转换为通用MP3 【免费下载链接】qmcflac2mp3 直接将qmcflac文件转换成mp3文件&#xff0c;突破QQ音乐的格式限制 项目地址: https://gitcode.com/gh_mirrors/qm/qmcflac2mp3 QMCFLAC2MP3是一个专为解决QQ音乐格…...

STK可见性分析避坑指南:仰角、光照约束设置不当,你的卫星通信链路可能白算了

STK可见性分析避坑指南&#xff1a;仰角、光照约束设置不当&#xff0c;你的卫星通信链路可能白算了 在卫星通信和遥感任务中&#xff0c;精确计算可见性窗口是确保任务成功的关键。许多工程师在使用STK进行可见性分析时&#xff0c;往往只关注"无约束"条件下的计算结…...