博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android Studio 编写 JNI
阅读量:4488 次
发布时间:2019-06-08

本文共 2329 字,大约阅读时间需要 7 分钟。

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

参考链接

  

  

创建一个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目录

  JNIDemo\app\build\intermediates\classes\debug

  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 
/* Header for class com_example_tony_jnidemo_JNITest */#ifndef _Included_com_example_tony_jnidemo_JNITest#define _Included_com_example_tony_jnidemo_JNITest#ifdef __cplusplusextern "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

转载于:https://www.cnblogs.com/helloworldtoyou/p/5686693.html

你可能感兴趣的文章
人工智能深度学习框架MXNet实战:深度神经网络的交通标志识别训练
查看>>
PCL Examples
查看>>
git基本操作总结
查看>>
mplayer-ww-37356 compile with mingw gcc 4.5.1 修复无法播放wmv
查看>>
jQuery 追加元素的方法如append、prepend、before,after(转)
查看>>
SKAction类
查看>>
spring boot
查看>>
浏览器URL传参最大长度问题
查看>>
学习进度条
查看>>
Linux crontab 定时任务详解
查看>>
string成员函数
查看>>
onSaveInstanceState()方法问题
查看>>
[转]CocoaChina上一位工程师整理的开发经验(非常nice)
查看>>
大数据时代侦查机制有哪些改变
查看>>
L1-047 装睡
查看>>
雷林鹏分享:jQuery EasyUI 菜单与按钮 - 创建链接按钮
查看>>
Apache Traffic Server服务搭建
查看>>
poj1990两个树状数组
查看>>
学习python-day1
查看>>
Zend_Db_Table->insert ()和zend_db_adapter::insert方法返回值不同
查看>>