Android studio开发NDK,第一个NDK程序教程

来源:互联网 发布:python 算法包 编辑:程序博客网 时间:2024/05/22 06:52

欢迎来到Studio的NDK教程(Mac平台)

本文主要内容是:

NDK

在Android SDK首次发布时,Google就宣称其虚拟机Dalvik支持JNI编程方式,也就是第三方应用完全可以通过JNI调用自己的C动态库,即在Android平台上,“Java+C”的编程方式是一直都可以实现的。。 —— [NDK详细讲解 ]

本文重点是怎么MAC下Android Studio开发第一个NDK程序,所以NDK知识请读者自行阅读。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考[Github][2].

1.下载NDK、SDK并设置环境变量

交给读者作业

2.配置JAVA环境(在terminal中可以使用javah、javac)

3.写好TestNdk程序为后续调用JNI做准备

定义一个native方法

[定义一个native方法][5]

4.执行Studio中[Build–>Make Project][6],生成class文件

生成的class文件在Project目录下。(不知道是Studio的版本问题还是系统的问题,小编的测试未成功)
这里写图片描述

5.1生成.h文件

这个我们使用的命令:javah -d <文件名> -classpath

5.2进入TestNdk.javad的文件夹main下(cd命令)

这里写图片描述
如果不进入这个目录,后面运行javah会报找不到“com.spoofing.spoofing.ndkdemo.TestNdk”类文件。
小编在此介绍上面的方法不行的另种可行方案:
1)找到class文件所在的文件,命令行切换到该目录下
这里写图片描述
2)运行javah命令:
javah com.spoofing.spoofing.ndkdemo.TestNdk
路径不写错误,基本没什么错误。
运行成功如下图:(生成头文件,直接拷贝到jni文件下)
这里写图片描述
头文件出现了,头文件的内容、函数声明不要修改!

5.3编写c源文件,函数的名一定要从之前生成的头文件里复制过来,保持一致。

#include <jni.h>/* Header for class com_spoofing_spoofing_ndkdemo_TestNdk */#ifndef _Included_com_spoofing_spoofing_ndkdemo_TestNdk#define _Included_com_spoofing_spoofing_ndkdemo_TestNdk#ifdef __cplusplusextern "C" {#endif/* * Class:     com_spoofing_spoofing_ndkdemo_TestNdk * Method:    getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_spoofing_spoofing_ndkdemo_TestNdk_getString  (JNIEnv *, jobject);#ifdef __cplusplus}#endif#endif
#include <jni.h>#include <string.h>/* Header for class com_spoofing_spoofing_ndkdemo_TestNdk */#ifndef _Included_com_spoofing_spoofing_ndkdemo_TestNdk#define _Included_com_spoofing_spoofing_ndkdemo_TestNdk#ifdef __cplusplusextern "C" {#endif/* * Class:     com_spoofing_spoofing_ndkdemo_TestNdk * Method:    getString * Signature: ()Ljava/lang/String; */JNIEXPORT jstring JNICALL Java_com_spoofing_spoofing_ndkdemo_TestNdk_getString  (JNIEnv * env, jobject jObj)  {return (*env)->NewStringUTF(env,"Hello From NDK");}#ifdef __cplusplus}#endif#endif

6、配置build.gradle文件,加入下图中的语句。 moduleName 就是将来生成的so文件名称的一部分,修改它可以修改so的文件名。 ldLibs 目前不管 abiFilters 是生成os文件的平台,这里选择了3种

这里写图片描述

7.配置ndk路径。打开local.properties,加入NDK的路径(ndk需要单独下载,我在网上下载ndk后放在了和sdk相同的路径下)

这里写图片描述

8.生成os文件。

8.1、Build->Make Project生成so文件。
8.2 查看工程目录 ..\build\intermediates\ndk\debug\lib目录里面各有一个os文件。
这里写图片描述

9.调用jni

这里写图片描述

10.实验结果

这里写图片描述

0 0
原创粉丝点击