Android之jni入门

jni即java native interface,使用jni我们可以在JAVA中调用C代码,提高了效率,可以复用代码,可以灵活的应用于各种场景

怎么使用JNI

安装软件

1.NDK 用于将C代码编译成so库

2.CygWin 在windows下模拟linux环境

3.CDT 在eclipse下编写C与C++环境搭建

JNI实现

1 定义一个c方法的接口 相当于在java代码中定义了一个接口 接口的实现方法是C语言实现的

    public native String helloWorldFromC();

2 步 实现C代码

注意:方法名 严格按照jni的规范 jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv* env,jobject obj)
其中Java是大写的,函数名必须包括正确的包名,笔者就因为在这里出了错,导致找不到库文件

#include <stdio.h>
#include <jni.h>

//public native String helloWorldFromC();
jstring Java_com_zj_helloworldfromc_MainActivity_helloWorldFromC(JNIEnv*env,jobject obj)
{
    //返回一个java String类型的字符串
    // jstring     (*NewStringUTF)(JNIEnv*, const char*);
    //return (**env).NewStringUTF(env,"hello wrold From C");

    return (*env)->NewStringUTF(env,"hellowroldFromC");

    //把C代码打包成函数库


}

3 生成android.mk 告诉编译器 如何把c代码打包成函数库

如果没有mk文件,就使用ndk-build就会报错

这里写图片描述

android.mk文件格式如下

   LOCAL_PATH := $(call my-dir)

   include $(CLEAR_VARS)
    # 对应打包成函数库的名字
   LOCAL_MODULE    := hello
   # 对应c代码的文件
   LOCAL_SRC_FILES := Hello.c

   include $(BUILD_SHARED_LIBRARY)

4步 把c代码 打包成函数库 用到了安装的环境

这里写图片描述

生成了libhello.so库文件,就可以使用了

5 步在java代码中 引入库函数

    static{
        System.loadLibrary("hello");// 注意事项 去掉前面的lib 后面的.so

    }

6 使用方法

public void click(View view)
    {
        //弹出一个吐司,吐司内容为C代码内容
        Toast.makeText(getApplicationContext(), helloWorldFromC(), 0).show();
    }

运行效果

这里写图片描述

posted @ 2016-03-21 10:55  RicardoMJiang  阅读(140)  评论(0编辑  收藏  举报