当前位置: 移动技术网 > IT编程>移动开发>Android > Android Studio开发之 JNI 篇的简单示例

Android Studio开发之 JNI 篇的简单示例

2019年07月24日  | 移动技术网IT编程  | 我要评论

僧众出发行脚峨眉,流氓小游戏,猎人职业大厅升级

前言

android上层应用使用java开发,不过java并不适合密集型运算,比如图片处理等,遇到密集型运算,一般使用c/c++完成。

java虚拟机支持调用c/c++代码,即jni(java native interface),它提供了若干的api实现了java和其他语言的通信。为方便android平台上使用jni技术,提供了ndk开发包,可以将ndk理解为对jni的进一步封装,方便开发使用罢了。

jni开发方式有多种,可以在android 源码中开发,也可以利用其它工具,但都比较烦琐或者要下载很多东西,android studio也支持jni开发,使用起来也比较方便,本文主要讲述下如何使用android studio进行jni开发。

ndk设置

ndk需要下载,一共有两种方式,建议从android studio中下载。

从android studio中打开sdk manager,进入如下界面并且勾选ndk选项。

点击应用,安装完后重启android studio即可。

也可以从官网下载,然后在android studio中设置,这种方式不再讲述。

jni开发

本章中以高斯模糊图像处理为示例,学习如何进行jni开发。

1、新建一个android工程,注意android studio对包名的处理,它的默认处理非常地别扭,如果不喜欢这种包名命名方式,可以点击 edit 进行更改。

2、将工程以project视图显示,方便查找具体文件。

3、在项目gradle.properties文件中加上以下代码,表示我们要使用ndk进行开发。

android.usedeprecatedndk=true

4、查看项目local.properties中是否有加入ndk和sdk的路径,如果没有需要补充。

 ndk.dir=d\:\\android-sdk\\ndk-bundle
 sdk.dir=d\:\\android-sdk

5、在app文件夹下的build.gradle的defaultconfig里加入如下代码

 ndk {
  modulename "imageblur"  //生成的so文件名字,调用c程序的代码中会用到该名字
  abifilters "armeabi", "armeabi-v7a", "x86" //输出指定三种平台下的so库
  ldlibs "log", "jnigraphics", "android" //jni中需要用到的其它库
 }

6、定义native方法

7、生成h文件,打开android studio提供的命令行工具terminal,输入以下指令。

cd app/src/main/java
javah -jni 包名+类名

本例中报错,“无法确定bitmap的签名”,根据网上搜索结果,需要指出 android.jar 文件的位置才行,于是按如下方法生成 h 文件。

复制代码 代码如下:

javah -classpath c:\progra~2\android\android-sdk\platforms\android-8\android.jar;. com.test.jnitest

8、建立 jni 文件夹,复制生成的 h 文件到 jni 文件夹中来。 选择file->new->folder->jni folder

注意:在弹出创建 jni 文件夹的对话框中勾选 change folder location,并在下面输入文件夹名,如下图所示。

一般来说jni相关文件放在 src/main/jni 之中。

9、新建c文件,实现对应接口,在java代码中完成 jni 接口调用。

结语

在gradle构建的过程中有可能出现这样或那样的异常,查看gradle构建日志,即可知道具体异常,而查看gradle构建日志按钮比较隐蔽。

比如说,使用c文件或c++文件,往往会有一些不同,使用c++文件可能编译报错,此时则需要打开gradle console查看具体原因。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网