欢迎来到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方法][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 __cplusplus
extern "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 __cplusplus
extern "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文件。