折腾了一天,总算把ndk的创建给搞定了,网上了找了很多资源,大多都是对eclipse的ndk配置,但是现在ecl又不是很好用了,自己在android studio上就想着配一下。
我想环境配置不必多说,编程andorid的相比都是会配置环境变量的,这里只要到官网下载一下ndk得本地然后配置环境变量就可以了,网上这类教学蛮多的,之后开始
1,新建一个android项目并且在那个主类中申明一个方法
public static native String showString();//就算红的页无所谓
2.在java的同级别下面新建一个jni的文件夹,之后在cmd中写点什么,将目录调节至当前目录的main下,这点跟ecl很不一样,纠结了半天。之后用javah -classpath 这后边跟上你的工程路径的build\intermediates\classes\debug;
在分号加上一个android.jar的目录,之后在 -d jni 跟上你工程的包名和类名。 下面给出我的cmd中所写的。
E:\skl\stiodworkspace\New_project_2016\myself_text_ndk\src\main>javah -classpath
E:\skl\stiodworkspace\New_project_2016\myself_text_ndk\build\intermediates\clas
ses\debug;E:\skl\soft\android_studio\sdk\platforms\android-17\android.jar -d jni
android.myself_text_ndk.MainActivity
3,之后在项目的jni文件夹中会出现一个.h的文件,找到其中的 大概:
JNIEXPORT jstring JNICALL Java_android_myself_1text_1ndk_MainActivity_getStringFromC (JNIEnv *, jclass);这句话复制下来,
在再同级别下建立一个.c文件,学过c的都知道要加一个头文件就是将外面的h文件加载进来之后将复制的粘贴进来作为方法体展开,下面是我的
#include "android_myself_text_ndk_MainActivity.h" JNIEXPORT jstring JNICALL Java_android_myself_1text_1ndk_MainActivity_getStringFromC (JNIEnv * env, jclass jc){ return (*env)->NewStringUTF(env, "myself_ndk ! " ); } 4,到这里差不多快好了,在build.gradle中的defaultConfig中添加ndk{ moduleName "testndk" //需要生成的so名字 abiFilters "armeabi" //输出的so库类型。 } 然后在主类中添加static { System.loadLibrary("testndk"); }5接下来我们试试看能不能输出c文件中的那个字符串,在主类中找一个textview来显示字符串,将那个getStringFromC()写入textview,直接运行app,
6就这样出现了我们要的效果,
在此还是要谢谢网络上的一个大牛们,各种资源都能找到,给了我不少帮助。最近对android studio2.3.2 自带的ndk做了相应学习--http://blog.csdn.net/sinat_26761191/article/details/74309548