AndroidStudio上的第一个jni程序——NDK入门
来源:互联网 发布:软件开发经理 编辑:程序博客网 时间:2024/06/05 14:56
之前在Eclipse上折磨过Jni编程,自从换了AndroidStudio之后,感觉写JNI变得很麻烦,今晚重新配置了下AndroidStudio,并安装了NDK包。
下面是在AndroidStudio上编写一个Jni小程序的过程,仅供新手参考和理清思路。
我的IDE版本及gradle版本
NDK 版本使用android-ndk-r10,这里提供国内下载链接:点击打开链接
点击下载后直接解压在自己指定的目录,这里我的目录是:E:\android-ndk-r10
我的AndroidSDK目录为:E:\AndroidStudio\Android-SDK
第一步,首先创建一个项目,命名为JNIdemo,在MainActivity中添加下述代码
第一个红框是添加静态代码块,作用是运行的时候动态调用名为“MyJni”的动态库
第二个红框是声明一个native方法,该方法需要后续我们在.c文件中实现
第三个红框则是我们利用一个TextView来显示我们调用native方法返回的字符串
同时绑定NDK,可以在”File“->”Project Structure“中添加ndk路径
在local.properties中可以如下设置
第二步,点击“Build”->“Make Project”进行编译,生成MainActivity.class文件,如下图
第三步,在AndroidStudio中打开终端,然后进入到该项目的app/src/main目录下,执行
javah -jni -classpath E:\AndroidStudio\Android-SDK\platfroms/android-23/android.jar;..\..\bulid\intermediates\classes\debug com.example.yummy.jnidemo.MainActivity
其中android.jar存放在AndroidSDK目录中,后者为class文件目录。
此时,在main目录下生成jni文件夹,里面含有com_example_yummy_jnidemo_MainActivity.h文件,其代码还有一个为实现的Nativie方法
第四步,在jni文件夹中,新建一个c文件,这里命名为main.c,写入下述内容
#include "com_example_yummy_jnidemo_MainActivity.h"/* * Class: com_jnimobile_www_myjnidemo_MainActivity * Method: getStringFromNative * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_example_yummy_jnidemo_MainActivity_getStringFromNative (JNIEnv * env, jobject obj){ return (*env)->NewStringUTF(env,"My first JNI demo!");}这里函数的作用是返回一个字符串“my first JNI demo!“
在app目录下的build.gradle中添加ndk模块
然后重新编译一遍(”Build“->”ReBuild Priject“),在这里我遇到几个bug
bug1
Error: NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin. For details, see http://tools.android.com/tech-docs/new-build-system/gradle-experimental. Set "android.useDeprecatedNdk=true" in gradle.properties to continue using the current NDK integration.
解决手段:在gradle.properties 文件里面添加 一句android.useDeprecatedNdk=true 后再重新编译
bug2
Error:Execution failed for task ':app:compileDebugNdk'.
> com.android.ide.common.process.ProcessException: org.gradle.process.internal.ExecException: Process 'command 'E:\android-ndk-r10\ndk-build.cmd'' finished with non-zero exit value 2
解决手段:在jni文件夹中在新建一个任意名称的.c空文件
bug3
java.lang.UnsatisfiedLinkError: No implementation found for java.lang.String
解决手段:找不到本地Native方法,查看.c文件的方法名是否写正确了
第五步,运行程序
源程序代码:点击下载
- AndroidStudio上的第一个jni程序——NDK入门
- JNI NDK (AndroidStudio+CMake )开发第一个项目的流程
- Android 我的第一个 NDK 程序 (AndroidStudio)
- Android JNI编程(七)——使用AndroidStudio编写第一个JNI程序
- 使用AndroidStudio编写第一个JNI程序
- android之NDK(jni)开发笔记1——运行第一个NDK程序
- 第一篇:AndroidStudio NDK的配置和使用,jni的第一个demo
- NDK学习笔记(1)——第一个jni程序
- 编写第一个jni入门程序
- 编写第一个jni入门程序
- AndroidStudio上使用NDK(Jni)的配置
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- Android For JNI(六)——交叉编译,NDK概述以及文件结构,编写自己的第一个JNI工程
- 第一个NDK-JNI项目
- Android Studio2.1上C++开发(一)——第一个JNI程序
- 第一个NDK程序
- 第一个NDK程序
- 第一个NDK程序
- Java核心技术第5章(2)
- 小小君的C语言第一课
- 交换机 路由器 HUB区别
- C实战:项目构建Make,Automake,CMake
- 自学QT之任务栏预览视图按钮
- AndroidStudio上的第一个jni程序——NDK入门
- STM32--vs1053 WAV录音实现(wav保存在flash)
- socket unix domain IPC代码示例
- HTML5本地存储详解
- Android 常见问题集
- 【Linux】简单理解Socket
- android工程转换到apk
- 字符串替换
- 用Netty开发中间件:高并发性能优化