JNI开发(一)

JNI开发步骤:

1.写java声明方法

public class MyJni {

    public native int add (int a, int b);
    public native int sub (int a, int b);
    
    public native String helleFromC();
}


2.用javah命令生成C语言头文件

到工程的bin目录下面
cd work\adt-bundle-windows-x86-20140321\eclipse\workspace\AndroidDemo\bin
javah -d header -classpath classes -jni com.example.androiddemo.jni.MyJni
生成的头文件就在bin\header文件夹中

参数说明:

-d header   表示将在当前目录下生成一个header文件夹,产生的头文件就在这里面了;

-classpath classes 指明类所在的位置

-jni com.example.androiddemo.jni.MyJni  指定类名

然后在android工程中创建一个jni目录,将生成的头文件放到jni目录中。
3.实现头文件的方法

编写一个.c文件,实现头文件。

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

JNIEXPORT jstring JNICALL Java_com_example_androiddemo_jni_MyJni_helleFromC
  (JNIEnv * env, jobject obj){
	return (*env)->NewStringUTF(env, "hello from c");
}

JNIEXPORT jint JNICALL Java_com_example_androiddemo_jni_MyJni_add
  (JNIEnv * env, jobject obj, jint a , jint b){
	return a + b;
}


4.编写Android.mk文件,生成.so文件


LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE    :=Operator
LOCAL_SRC_FILES :=Operator.c
#liblog.so libGLESv2.so
LOCAL_LDLIBS += -llog
include $(BUILD_SHARED_LIBRARY)


说明:LOCAL_SRC_FILES :=Operator.c,就是编写的c文件

LOCAL_MODULE    :=Operator,就是去掉c文件的后缀名之后的名字


cd /cygdrive/e/work/adt-bundle-windows-x86-20140321/eclipse/workspace/AndroidDemo

在cgwin中使用命令$NDK/ndk-build

$NDK是我定义的ndk的路径

生成的.so文件就在工程的libs目录下面
5.调用.so文件中的方法

static{
        System.loadLibrary("Operator");
    }

<pre name="code" class="java"> case R.id.btn:

//<span style="white-space:pre">	</span>Toast.makeText(this, new MyJni().helleFromC(), 0).show();
<span style="white-space:pre">	</span>Toast.makeText(this, new MyJni().add(1, 2) + "", 0).show();
<span style="white-space:pre">	</span>break;

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值