现在的位置: 首页 > 综合 > 正文

Android JNI使用方法步驟(限windows)

2013年10月12日 ⁄ 综合 ⁄ 共 1574字 ⁄ 字号 评论关闭


1,

eclipse建立android工程(下面我建立在d:\android\workspace\)

projectname jni_hello

Applicationname: jni_helo

packagename practice.jni_hello

createactivity helloActivity

min sdk version 10

2,

helloActivity.java文件鍵入相應代碼,如下圖

3,cmd進入D:\Android\workspace\jni_hello\bin\practice\jni_hello,查看是否已經生成

helloActivity.classeclipse對保存的JAVA源文件會進行編譯,不像C需要手動)。。。

存在的話退回到bin目錄,當前目錄為D:\Android\workspace\jni_hello\bin\

使用javah命令生成接口頭文件

(

:javah出現“javah不是內部或外部命令”的情況,查看jdk目錄是否存在javah.exe,

X:\Java\jdk1.6.0_24\bin加入系統變量path裏面

)


4,

在工程目錄中建立一個jni目錄,并在jni目錄中建立一個Android.mk文件,內容如下

LOCAL_PATH:= $(call my-dir)

include$(CLEAR_VARS)

MY_LOCAL_PATH:=$(LOCAL_PATH)

LOCAL_PATH :=$(MY_LOCAL_PATH)/../../C_hello

LOCAL_MODULE :=gethello

$(evalinclude $(LOCAL_PATH)/inc_dictbase.mk)

include$(BUILD_SHARED_LIBRARY)

5

建立一與工程目錄jni_hello同級的目錄C_hello

C_hello分別建立下面文件

它們內容分別如下

jni_adapter.c//接口函數

#include <jni.h>
//#include "practice_jni_hello_helloActivity.h"
#include "_func_base.h"

JNIEXPORT jstring JNICALL Java_practice_jni_1hello_helloActivity_sayHello
(JNIEnv* env, jobject obj)
{
	char buf[30]= "none aaa";

	JGByt(buf);
	return (*env)->NewStringUTF(env,buf);
}

func_base.h//C函數聲明文件

voidJGByt(char* buf);

..........

hello.c//c
函數實現文件

#include "string.h"

void JGByt(char* buf)
{
    char Str[]="JIN GE BYE!hahah";
    int i=0;
    
    while(Str[i] != 0x00) {
    	buf[i] = Str[i];
    	i++;
    }
    buf[i] = 0x00;
}

inc_dictbase.mk//android makefile
文件

#LOCAL_LDLIBS := -L$(SYSROOT)/usr/lib -llog

LOCAL_SRC_FILES	:=\
_jni_adapter.c\
hello.c

LOCAL_LDLIBS := -lm

6,

cywin進入到項目jni目錄執行Android.mk腳本,生成libgethello.so

然後在eclipse項目資源管理器刷新一下,讓其加載libgethello.so文件,運行

效果如下:

DONE----------------------------

下面為網上一個例子的連接

(http://marakana.com/forums/android/examples/49.html)

抱歉!评论已关闭.