zoukankan      html  css  js  c++  java
  • JNI开发流程

    eclipse开发流程

    第一种

    • 定义本地方法

      • public native String hello();
    • 工程目录下创建jni目录

    • 在jni目录下创建hello.c源文件

        #include <jni.h>//包含jni.h头文件  定义了java和c之间数据对应关系以及java和c数据转换的函数
        /**
         *返回值jstring
         *函数名:Java_包名(.以_代替)_类名_函数名
         *JNIEnv *env 结构体的二级指针  提供了java和c数据转换的函数  (jni环境提供)
         *jobject obj 调用当前方法的java类(c语言调用java方法需要这个参数)jni环境提供
         */
        jstring Java_com_itheima_helloa_MainActivity_hello(JNIEnv *env,jobject obj){
        	char *buf="hello";
        	return (*env)->NewStringUTF(env,buf);
        }
      
    • 在jni目录下创建Android.mk配置文件

            LOCAL_PATH := $(call my-dir)
      
            include $(CLEAR_VARS)
        
            LOCAL_MODULE    := hello  #指定最终生成的库名    lib库名.so
            LOCAL_SRC_FILES := hello.c #指定要编译的C语言源文件 多个源文件 空格依次排开
        
            include $(BUILD_SHARED_LIBRARY) #指定生成动态库 
      
    • 在jni目录下创建Application.mk配置文件 配置生成库的平台

              APP_ABI := all     #指定生成库的平台  
      
    • 进入到jni目录下执行ndk-build命令生成so库

    • 程序运行时加载so库

        //程序运行时加载库
        static{
        	System.loadLibrary("hello");
        }
      

    添加本地支持开发方式

    • 定义本地方法

      • public native String hello();
    • 配置ndk路径

    • 右键工程-android tools - add native support 指定生成的库名

    • 会自动创建c语言源文件和Android.mk文件

    • 在jni目录下创建Application.mk配置文件 配置生成库的平台

              APP_ABI := all     #指定生成库的平台  
      
    • 程序运行时加载so库

        //程序运行时加载库
        static{
        	System.loadLibrary("hello");
        }
      
    • 运行程序,会自动调用ndk命令生成so库

    as中开发

    as开发方式一

    • 定义本地方法

      • public native String hello();
    • 工程目录下创建jni目录

    • 在jni目录下创建hello.c源文件

    • 在jni目录下创建Android.mk配置文件

    • 在jni目录下创建Application.mk配置文件 配置生成库的平台

    • 进入到jni目录下执行ndk-build命令生成so库

    • 程序运行时加载so库

        //程序运行时加载库
        static{
        	System.loadLibrary("hello");
        }
      
    • 注意:指定so库目录为libs 在模块的build.gradle下

        sourceSets{
                main{
                    jniLibs.srcDirs=['libs']
                }
            }
      

    as添加本地支持开发方式

    • 定义本地方法

      • public native String hello();
    • 配置ndk路径

    • 右键工程-new - folder - jni folder 会在main下生成jni目录

    • 创建hello.c源文件

    • 在模块下的build.gradle下配置属性

        ndk{
                //指定生成的库名
                moduleName "hello"
                //指定生成的平台
                abiFilters "armeabi","armeabi-v7a","x86"
            }
      
    • 在工程下的gradle.properties下配置使用废弃的ndk

        android.useDeprecatedNdk=true 
      
    • 在程序运行时加载so库
      //程序运行时加载库
      static{
      System.loadLibrary("hello");
      }

    • 运行程序,会自动调用ndk命令生成so库

    • so库在build - 中间文件 - ndk - debug - lib

  • 相关阅读:
    extjs4 tree 父子节点联级勾选,半选节点半透明处理
    回调函数设计及应用(Java)——分组模式设计
    未来发展方向
    博客园网摘chrome插件源码分析
    apue2 阅读笔记第11章
    apue2 阅读笔记第八章
    APUE阅读笔记第十五章(第一部分)
    一个常用的vimrc
    apue2 阅读笔记第12章
    APUE阅读笔记第十四章(第二部分)
  • 原文地址:https://www.cnblogs.com/xxc0505/p/6803803.html
Copyright © 2011-2022 走看看