Android Studio 配置NDK,运行第一个hello-jni安卓程序详细步骤
2016-04-01 21:51
501 查看
0 前言
本文是我一边操作一边截图记录下来的。理论上来说,如果你环境没有大问题的话,是可以成功运行出结果的。
1 准备工作
已经安装好android studio, 我安装的版本是Android Studio 2.0 Preview已经下载并解压好android ndk, 我下载的版本是 android-ndk64-r10b-windows-x86_64
2 打开android studio新建项目及NDK路径配置
如下图所示:
接下来先进行DNK的路径配置:
点击上方导航栏的File->Project
Structure...
如上图所示,选择你NDK的安装路径,点击确定。
此时,打开local.properties便可以看到ndk.dir即是你ndk的路径,若没有,自己手写一个。
3 JNI-目录的创建
如上图所示,在project视图下,在main文件夹上右键->new->Folder->JNI Folder,弹出提示框,直接点finish即可。此时,你的项目中会多出一个jni的文件夹。接下来在jni目录下新建hello-jni.c , hello-jni.h。如下图所示:
目前,发现了一个ndk的bug,那就是如果只有一个.c文件,可能会导致报错make: *** No rule to make target,所以,这里还要进行一次创建:在jni目录下新建temp.c , temp.h。
此时,jni目录应该如下图所示:
至此,目前jni目录的创建工作告一段落
4 java文件的准备
在main/java/your package(如我的:main/java/com.example.zwloverfianl.myapplication)下新建java class,并命名。(我取名为JNI),并在该java文件中添加一行 public static native String helloFromC();如下图所示:
不必理会红色报错。
接下来,打开你的启动Activity文件,如我的TestJNI.java。添加如下图中红色框中的代码
为方便copy : static {System.loadLibrary("hello-jni");}
JNI jni = new JNI();
Toast.makeText(this, jni.helloFromC(), Toast.LENGTH_SHORT).show();
注意System.loadLibrary中的”hello-jni“,请记住这个名字,后面还要用到
5 ndk gradle配置
打开gradle.properties,在文件尾添加一句:android.useDeprecatedNdk=true,如下图所示打开build.gradle,在defaultConfig 的括号里添加如下内容:
ndk{
moduleName "hello-jni"
abiFilters "armeabi", "armeabi-v7a", "x86"
}
注意到,这里的moduleName 后跟的字符串,必须和上文提到的System.loadLibrary("hello-jni"),一样。
至此,ndk的gradle配置完毕。接下里make一下module,以生成class文件。点击Build->make modules,如下图所示:
如果上述所有步骤你都正确走了下来,此时是不会报错的。若报错,请回头检查以上哪一步不满足。或者自行百度谷歌。
6 C函数的准备
如果你已经成功走过了第五步,那么现在请进入到目录你的项目存放路径\MyApplication\app\build\intermediates\classes\debug如下图所示
接下来打开cmd,进入到此目录,如下图所示
输入命令:javah com.example.zwloverfianl.myapplication.JNI
com.example.zwloverfianl.myapplication.JNI 就是上文中第4步中我们创建的java文件
若出现“找不到***类”的错误,请检查包名是否正确,或者改用如下命令:javah -classpath androidsdk路径\platforms\android-19\android.jar;. 包名.文件名
若你正确执行完成上述命令后,会在当前文件夹下生成一个: com_example_zwloverfianl_myapplication_JNI.h 文件。如下图所示
将其拖拽到上文3中创建的jni目录下,如下图所示:
打开你的hello-jni.c文件,在其文件尾端,添加如下内容:
#include "com_example_zwloverfianl_test_JNI.h"
JNIEXPORT jstring JNICALL Java_com_example_zwloverfianl_test_JNI_helloFromC(JNIEnv *env, jclass obj)
{
char buf[] = "HEllO JNI";
return (*env)->NewStringUTF(env,buf);
}
应如下图所示:
至此,所有工作已经做完,只需要运行即可。
7 运行截图
可以看到Toast 成功输出了hello-jni.c中的内容。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题