NDK JNI开发配置以及Demo

NDK开发环境搭建—-AndroidStudio

本片文章用于讲解windows下android studio 的NDK环境搭建以及Demo展示:


Android Studio搭建

开发软件
1 NDK下载:https://developer.android.google.cn/ndk/downloads/index.html
2 Cygwin下载:https://cygwin.com/install.html

1. 配置ndk

1)配置NDK的环境变量(在系统环境变量中配置,不赘述):

2)打开Android Studio(后面简称AS),依次点击File->Project Structure->SDK Location,到如下界面,选择你的NDK所在的目录,选择完之后点击ok,就可以了:
这里写图片描述

2. 配置使用Terminal(如果已经配置跳过)

 使用ctrl + alt +s打开settings,然后操作setting->Tools->Terminal,配置cmd.exe这样就可以在Terminal里面做dos命令(后面用来生成jni文件)。

3. 写JniDemo

1) 首先在项目中新建一个类JniClient,如:

这里写图片描述

这里做一下讲解,这个里面有两个静态方法,都是用native修饰,意思表示是JniClient类里面有两个本地方法helloWord和calculate,但是这里显示的是红色说明我们只是声明,但是AS没有找到这两个方法。下面就来创建方法

2)创建玩JniClient类之后
  1. make 一下项目,AS会在在项目的app\build\intermediates\classes\debug\ zj\guyue\testjni 下创建JniClient.class字节码文件,之后创建jni文件夹如下:
    这里写图片描述
    这里写图片描述

  2. 打开AS命令行窗口(View->Tool Window->Terminal)。输入如下命令:
    javah -d jni -classpath E:\5-ProjectFile\2-AndroidStudio\TestJNI\app\build\intermediates\classes\debug zj.guyue.testjni.JniClient
    可以在刚刚创建的jni文件夹下看到对应的.h文件(生成的文件名称规则:包名_ 类名.h,包名的点变成 _
    这里写图片描述

3)创建c代码
  • 创建c文件
    这里写图片描述

  • 编写C代码

#include <zj_guyue_testjni_JniClient.h>
JNIEXPORT jstring JNICALL Java_zj_guyue_testjni_JniClient_helloWord(JNIEnv *env, jclass obj){

     return (*env)->NewStringUTF(env,"guyuelan");
}

JNIEXPORT jint JNICALL Java_zj_guyue_testjni_JniClient_calculate(JNIEnv *env,jclass obj,jint a,jint b){
    return a + b;
}

这里写图片描述

扫描二维码关注公众号,回复: 4308126 查看本文章
4)配置项目参数
  • 在gradle.properties 里面加上:android.useDeprecatedNdk=true

  • 在gradle的defaultConfig里面添加

    ndk{
            moduleName "JniClient"   // 生成的so文件名
            abiFilters "armeabi","x86","armeabi-v7a"  //CPU类型
        }
5)生成so文件

项目参数配置好之后,直接rebuild一次,然后在项目的build目录下就有对应的so文件。
这里写图片描述

这样AS的JNI使用就OK了~,至于引用so文件简单的说下:将生成的3个类型的文件夹(含so文件)拷贝到项目的libs文件夹下就可以直接引用了,看下调用结果。

这里写图片描述

常见的错误解决办法:

  • 报错说“….找不到文件”/…Not Found…——>你的NDK本身有问题重新下载一个
  • 报错说: ….ndk.cmd….错误———->你在jni文件夹下添加一个空的empty.c文件(为什么这样,我在网上找了很久,说是AS集成jni,不是很友好….目前也没有明确,为什么这么说,你可以去你的jni文件夹下看看你写的c文件,即使编译成功,生成so文件,但是c文件里还是显示红色。)

猜你喜欢

转载自blog.csdn.net/qq_29917267/article/details/62422432
今日推荐