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.class(eclipse對保存的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)