• 安卓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

     

  • 相关阅读:
    【驯服野生verilog-mode全记录】day1 —— 常用链接与基本命令模板
    Golang教程——配置环境,再探GoLand
    Spring Cloud面试题
    TreeSet详解
    flask-sqlalchemy结合Blueprint遇到循环引入问题的解决方案
    1文件+2个命令,无需安装,单机离线运行70亿大模型
    GO语言基础
    【正点原子Linux连载】第二十二章 AP3216C 摘自【正点原子】I.MX6U嵌入式Qt开发指南V1.0.2
    java毕业设计全屋家具定制网站源码+lw文档+mybatis+系统+mysql数据库+调试
    【数据结构】对称二叉树 && 另一颗树的子树(六)
  • 原文地址:https://blog.csdn.net/Python9724/article/details/134322811