• Android Studio 编写 JNI


    之前一直都不知怎么编写JNI,今天刚好学习一下,感谢梦真的指教,以及提供的文档。

    参考链接

      http://blog.csdn.net/u011168565/article/details/51878176

      http://www.ntu.edu.sg/home/ehchua/programming/java/JavaNativeInterface.html

    创建一个jni类(.java文件)

      1. 创建Android studio 工程

      2. 切换到project视图

      3. 创建jni类如下所示

    package com.example.tony.jnidemo;
    
    /**
     * Created by Tony on 2016/7/19.
     */
    public class JNITest {
        public native String getJNIString(); // jni接口函数
        static {
            System.loadLibrary("hello-jni"); //加载jni动态库,只写库名,库名称是在build.gradle中指定的。
        }
    }
    
    

    生成.class文件

      点击导航栏build-> Make Module "app", 编译jni类(.java文件),生成.class文件

      生成的.class文件在app/build/intermediates/classes/debug目录中

    生成.h文件

      1. 打开终端,切换到debug目录

      JNIDemoappuildintermediatesclassesdebug

      2. 在debug目录下生成.h文件

       在终端输入命令

        javah com.example.tony.jnidemo.JNITest    
            //com.example.tony.jnidemo是包名,JNITest是类名;
    

       在debug目录下,生成文件com_example_tony_jnidemo_JNITest.h

    编写jni源代码

      1. 复制debug目录的.h文件

      2. 在app/src/main目录下创建jni目录(一定要是小写的)

      3. debug目录中的.h文件粘贴到jni目录中。

      4. 在jni目录中创建.c文件,文件名称自己取。

      5. 复制.h文件中的内容到.c文件中。并实现其中的函数,如下所示,返回一个jstring类型。

    /* DO NOT EDIT THIS FILE - it is machine generated */
    #include <jni.h>
    /* Header for class com_example_tony_jnidemo_JNITest */
    
    #ifndef _Included_com_example_tony_jnidemo_JNITest
    #define _Included_com_example_tony_jnidemo_JNITest
    #ifdef __cplusplus
    extern "C" {
    #endif
    /*
     * Class:     com_example_tony_jnidemo_JNITest
     * Method:    getJNIString
     * Signature: ()Ljava/lang/String;
     */
    JNIEXPORT jstring JNICALL Java_com_example_tony_jnidemo_JNITest_getJNIString
            (JNIEnv *env, jobject thisObj) {
            return (*env)->NewStringUTF(env,"Hello World");
    }
    
    #ifdef __cplusplus
    }
    #endif
    #endif
    

    配置gradle文件

      打开buidle.gradle,添加ndk内容,指定动态库名称和处理器架构

    defaultConfig {  
            applicationId "com.example.aplex.jnidemo"  
            minSdkVersion 15  
            targetSdkVersion 23  
            versionCode 1  
            versionName "1.0"  
            ndk{  
            //在JNI打log 必须加上log,否则会报错log函数未定义,
                ldLibs "log"
            //指定生成模块名字,也就是最终的动态库名hello-jni,相应库文件名libhello-jni.so moduleName "hello-jni"  
                moduleName "hello-jni"  
            // 指定生成哪些处理器架构的动态库文件,如果要运行在x86架构处理器一定需要指定 abiFilters "armeabi" , "x86"  
                abiFilters "armeabi" , "x86"  
            }  
      
        }  
    

    添加ndk

      打开gradle.properties在文件最后添加。

      android.useDeprecatedNdk=true

      否者编译会出错。

    至此,jni编写完毕,点击导航栏中的图标(Sync Project with Gradle Files),生成gradle文件,就可以调用JNI的类了。

    Author

      Tony Liu

      2016-7-19, Shenzhen

  • 相关阅读:
    datatables出现横向滚动条
    mumu模拟器设置代理/打开网络连接(windows)
    a标签下划线
    python 配置导入方式
    redis命令
    django+mongodb 内置用户控制
    异常补充
    关于异常的总结
    java 常用类的方法
    java 日期时间类加Calendar的set和add方法
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/5686693.html
Copyright © 2020-2023  润新知