zoukankan      html  css  js  c++  java
  • Android jni学习

    笔者使用的是eclipse开发环境,ndk环境已搭建好(怎样搭建可百度  so easy)

    jni使用流程:

          1.随便新建一个Android项目,在项目根目录下创建jni目录,并在目录下建立一个Android.mk文件

    Android.mk文件编译如下(双斜杠为注释部分,不用复制):

     //编译时的目录,开发树中查找源文件。,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

    LOCAL_PATH := $(call my-dir)        

    include $(CLEAR_VARS)               //

    //LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。

    LOCAL_MODULE := nativeadd           //编译后库文件的名称

    //LOCAL_SRC_FILES变量必须包含将要编译打包进模块中的C或C++源代码文件。注意,你不用在这里列出头文件和包含文件,因为编译系统将会自动为你找出依赖型的文件;仅仅列出直接传递给编译器的源代码文件就好。【注意,默认的C++源码文件的扩展名是’.cpp’. 指定一个不同的扩展名也是可能的,只要定义LOCAL_DEFAULT_CPP_EXTENSION变量,不要忘记开始的小圆点(也就是定义为‘.cxx’,而不是‘cxx’)(当然这一步我们一般不会去改它)】

    LOCAL_SRC_FILES := nativeadd.c     //这里写的是需要编译的.c文件  

    LOCAL_C_INCLUDES := $(LOCAL_PATH)/include
    include $(BUILD_SHARED_LIBRARY)

    2.在java文件中建立有native方法的类文件:

    3.用javah 命令生成c的头文件

    这里有两种方法可以实现:

    a.eclipse 中配置javah命令

    备注:上图中需要配置的三项内容如下:

    ${system_path:javah}

    ${workspace_loc}

    -v -classpath "${project_loc}/bin/classes" -d "${project_loc}/jni" ${java_type_name}

    配置好之后,选中需要本地包含native方法的java类  ,并运行javah命令,刷新jni目录,该目录会多一个.h文件

    4.在jni目录建立一个.c文件  实现头文件中的方法

    5.命令行中进入jni文件目录,使用ndk-build命令生成.so文件:

    成功后,本项目libs目录下会多个.so文件

    6.在项目调用native jni方法

    完结。

    注:其中第三步  javah 命令生成c的头文件

    第二种方法,将NativeAdd类在eclipse中导出为jar(主要为了获取.class文件)

    并解压到文件到电脑中的任意目录

    cd 到该目录,直接使用命令:javah -jni com.zbtx.maize.nativedemo.NativeAdd,即可生成.h文件  

  • 相关阅读:
    你做的页面有哪些浏览器测试过?这些浏览器的内核分别是什么?
    响应式布局
    Promise(二)
    Promise(一)
    同步和异步的自我理解
    null 与 undefined 区别
    python pandas 数据处理
    【python】list、tuple、dict、set、dataframe、narray、series之间的区别
    时间序列常用模型
    Linux系统学习笔记
  • 原文地址:https://www.cnblogs.com/x-bing/p/5268091.html
Copyright © 2011-2022 走看看