当前位置: 首页 > 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

 

http://www.lryc.cn/news/224284.html

相关文章:

  • 高性能网络编程 - 解读5种I/O模型
  • 复盘一个诡异的Bug
  • 【uniapp】通用列表封装组件
  • 17 Linux 中断
  • 微信小程序真机调试连接状态一直在正常和未链接之间反复横跳?
  • 最新Next 14快速上手基础部分
  • 【uniapp/uview】Collapse 折叠面板更改右侧小箭头图标
  • 企业如何落地搭建商业智能BI系统
  • RedisTemplate连接密码设置教程
  • 基于SSM的二手车交易网站的设计与实现
  • 温故知新:探究Android UI 绘制刷新流程
  • 设计模式-命令模式(Command)
  • linux批量解压zip
  • HBase导出建表语句
  • Linux环境配置(云服务器)
  • 【性能测试】Linux下Docker安装与docker-compose管理容器(超细整理)
  • 陪玩2.0升级版源码/价值18500元的最新商业版游戏陪玩语音聊天系统源码
  • 读程序员的制胜技笔记08_死磕优化(上)
  • 【gltf-pipeline】安装gltf-pipeline 进行文件格式转换
  • Android OpenGL ES踩坑记录
  • Vue3 项目完整配置
  • 二十三种设计模式全面解析-从线程安全到创新应用:探索享元模式的进阶之路
  • Qt之qobject_cast使用
  • 如何实现云端开发能力快速提升?【DevRun】云上开发创新实践带你实现
  • 猫头虎博主第7期赠书活动:《计算机考研精炼1000题》
  • Linux常见指令:从基础到理论
  • ARM---CAN2.0B读取 汽车BMS报文
  • 第十一章 JSP开发模型
  • Java面试题-Redis-第四天(线程模型一)
  • 逐次变分模态分解(Sequential Variational Mode Decomposition,SVMD)(附代码)