• 安卓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 、#include 、#include
                            mk:配置文件;
            捋一捋这句话:在.c文件里面导入包含jni.h头文件的 JNIstudy.h头文件
                    
       2.动态注册    
       创建了3个文件:.c、.mk、.mk
                            .c:#include
                                    各种代码的实现:实现java层被native修饰的方法
                            mk:配置文件;

    Android.mk

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

    Application.mk

    APP_ABI := armeabi-v7a

     

  • 相关阅读:
    SpringBoot整合RabbitMQ学习笔记
    Qt地铁智慧换乘系统浅学( 二 )将存储的站点线路信息绘制到graphicsView(图形视图部件)
    Swift学习笔记四(function 篇)
    跨行或跨列布局
    每日三题 8.29
    LeetCode买卖股票之一:基本套路(122)
    人工智能如何改善运输和物流
    【Python数据结构与判断7/7】数据结构小结
    Linus Torvalds发布了第一个Linux内核6.4候选版本
    JSP pagecontext对象的简介说明
  • 原文地址:https://blog.csdn.net/Python9724/article/details/134322811