您的位置:首页 > 移动开发 > Android开发

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中的内容。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息