最简单的使用 NDK 的程序

来源:互联网 发布:三个月雅思准备 知乎 编辑:程序博客网 时间:2024/05/24 06:37
  • 第一步
    新建一个工程,这里我的包名是 com.xiao.ndk,然后在新建一个 Test 类
public class Test{    public native String getContent();}
  • 第二步

    编译程序后,注意项目目录 app\build\intermediates\classes\debug,此时已经生成了 Test 类的字节码文件。

  • 第三步

    根据生成的 class 文件,利用 javah 生成对应的 .h 头文件。
    点开AS的Terminal标签,cd命令进入到该项目的app/build/intermediates/classes/debug/ 文件夹下。
    然后执行命令:javah -jni com.xiao.ndk.Test

    然后查看文件夹 app\build\intermediates\classes\debug 会生成一个 .h 文件:com_xiao_ndk_Test.h 文件

  • 第四步

    在工程的main目录下新建一个名字为jni的目录,然后将刚才的 .h 文件剪切过来。在 jni 目录下新建一个 c 文件,随意取名,我这叫 jnitest.c 。然后编辑代码如下

#include "com_xiao_ndk_Test.h"JNIEXPORT jstring JNICALLJava_com_xiao_ndk_Test_getContent(JNIEnv *env, jobject obj){    return (*env)->NewStringUTF(env, "hello 个屁");}


  • 第五步

接下来在工程的local.properties文件中添加NDK路径
ndk.dir=/Users/daiyunzhen/NDK/android-ndk-r10e

在app module目录下的build.gradle中设置库文件名(生成的so文件名)。找到gradle文件的defaultConfig这项,在里面添加如下内容:

项目的 gradle.properties 文件的末尾添加如下代码:

android.useDeprecatedNdk=true


  • 第六步

环境都设置好了,现在就可以用 Test 类来获取了。
在 Test 类中引用刚才的 so 文件,加如下代码 :
static {    System.loadLibrary("TestJniLib");}

此时 Test 类已经能调用 c 代码了


  • 第七步

来测试下吧
在 MainActivity 的 onCreate() 方法中加入如下代码 :
String content = new Test().getContent();if (!TextUtils.isEmpty(content)){    TextView tv = (TextView) findViewById(R.id.tv);    tv.setText(content);}

>

好了,编译项目运行,能打印 .c 文件里写的那句话 “hello 个屁” 那就成功了。


  • 最后放一下生成的 so 文件路径图

0 0