之前在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 -d jni -classpath “E:\AndroidStudio\Android-SDK\platforms\android-23\android.jar;../../build/intermediates/classes/debug" com.example.yummy.jnidemo.MainActivityy
有空格用双引号引起来
其中android.jar存放在AndroidSDK目录中,后者为class文件目录。
此时,在main目录下生成jni文件夹,里面含有com_example_yummy_jnidemo_MainActivity.h文件,其代码还有一个为实现的Nativie方法
第四步,在jni文件夹中,新建一个c文件,这里命名为main.c,写入下述内容
这里函数的作用是返回一个字符串“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文件的方法名是否写正确了
第五步,运行程序
资料参考:
http://blog.csdn.net/sbsujjbcy/article/details/45064375
http://www.ithao123.cn/content-8714312.html