zoukankan      html  css  js  c++  java
  • JNI的开发步骤

    使用C函数实现Java本地方法:

    1. java代码里面声明一个native的方法

      public native String helloFromC();

    2. 在工程目录下面创建一个jni的文件夹

    3. jni文件夹里面编写c代码,实现java的本地方法

      //JNIEnv* envJNI本地接口这个结构体的二级指针

      //该结构体中封装了很多函数指针方便程序员开发jni代码

      //jobject obj MainActivity的对象,调用者对象

      jstring Java_包名_类名_方法名(JNIEnv* env,jobject obj){}

      编译运行C函数,生成so可执行文件:

    4. jni文件夹下创建Android.mk文件,c代码编译的脚本文件

      # $表示调用ndk中定义好的方法或者变量

      # 加载本地的jni目录,当在dos窗口中执行ndk-build命令时,会找工程目录下中的jni目录;

      LOCAL_PATH := $(call my-dir)

      # 下次重新生成动态库时,清理掉上次生成的变量

      include $(CLEAR_VARS)

      # 指定生成的动态库的名称,生成动态库文件后,文件名为libhello.so

      LOCAL_MODULE := hello

      # 指定了本地的c文件

      LOCAL_SRC_FILES := Hello.c

      # 指定了生成库的类型:BUILD_SHARED_LIBRARY表示动态库.soBUILD_STATIC_LIBRARY表示静态库.a

      # 动态库.so文件小,静态库.a文件大。

      include $(BUILD_SHARED_LIBRARY)

    5. 调用ndk-build指令编译c代码

      注意配置环境变量生成一个.so的文件 ( c代码编译出来的二进制可执行文件)

    6. java代码里面写静态代码块,加载so文件

      static{

        System.loadLibrary("hello");

      }

    7. 像使用一般java方法一样调用native的方法.

  • 相关阅读:
    python之内置函数
    装饰器原理剖析
    迭代器&生成器&yield异步
    python之文件操作read
    函数的创建,调用,返回值和传参的讲解
    collections之deque【双向队列】与Queue【单向队列】
    collections之命名元组
    collections系列之OrderedDict【有序字典】与DefaultDict【默认字典】
    collections系列之Counter
    对象之int介绍
  • 原文地址:https://www.cnblogs.com/loaderman/p/6440009.html
Copyright © 2011-2022 走看看