1、SDK
(software development kit)軟件開發工具包。被軟件開發工程師用于為特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件的開發工具的集合。因此!Android SDk 指的既是Android專屬的軟件開發工具包
2、JNIJava Native Interface (JNI)標準是java平臺的一部分,它允許Java代碼和其他語言寫的代碼進行交互。JNI 是本地編程接口,它使得在 Java 虛擬機 (VM) 內部運行的 Java 代碼能夠與用其它編程語言(如 C、C++ 和匯編語言)編寫的應用程序和庫進行交互操作當然一般需要進行如下操作流程:1) 編寫java程序:這里以HelloWorld為例。為了實現在 java代碼中調用c函數printf。 代碼1:class HelloWorld {
public native void testHelloWorld();
static {
System.loadLibrary("hello");
}
public static void main(String[] args) {
new HelloWorld().testHelloWorld();
}
}聲明native方法:如果你想將一個方法做為一個本地方法的話,那么你就必須聲明改方法為native的,并且不能實現。Load動態庫:System.loadLibrary("hello");這里一般是以static塊進行加載的。同時需要注意的是System.loadLibrary()的參數“hello”是動態庫的名字。2) 編譯javac HelloWorld.java3) 生成擴展名為h的頭文件 javah ?JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld (JNIEnv *, jobject);這 個h文件相當于我們在java里面的接口,這里聲明了一個 Java_HelloWorld_testHelloWorld (JNIEnv *, jobject)方法,然后在我們 的本地方法里面實現這個方法,也就是說我們在編寫C/C++程序的時候所使用的方法名必須和這里的一致)。4) 編寫本地方法實現和由javah命令生成的頭文件里面聲明的方法名相同的方法 代碼2:#include "jni.h"
#include "HelloWorld.h"
#include other headers
JNIEXPORT void JNICALL Java_HelloWorld_testHelloWorld(JNIEnv *env, jobject obj)
{
printf("Hello world!\n");
return;
}
注 意代碼2中的第1行,需要將jni.h(該文件可以在%JAVA_HOME%/include文件夾下面找到)文件引入,因為在程序中的JNIEnv、 jobject等類型都是在該頭文件中定義的;另外在第2行需要將HelloWorld.h頭文件引入。然后保存為 HelloWorldImpl.c就ok了。5) 生成動態庫 這里以在Windows中為例,需要生成dll文件。在保存 HelloWorldImpl.c文件夾下面,使用VC的編譯器cl成。 cl -I%java_home%\include -I%java_home%\include\win32 -LD HelloWorldImp.c -Fehello.dll 注意:生成的dll文件名在選項-Fe后面配置,這里是hello,因為在HelloWorld.java文件中我們loadLibary的時候使用的名 字是hello。另外需要將-I%java_home%\include -I%java_home%\include\win32參數加上,因為在第四步里面編寫本地方法的時候引入了jni.h文件。3、NDKNDK全稱:Native Development Kit。NDK是一系列工具的集合。* NDK提供了一系列的工具,幫助開發者快速開發C(或C++)的動態庫,并能自動將so和java應用一起打包成apk。這些工具對開發者的幫助是巨大的。* NDK集成了交叉編譯器,并提供了相應的mk文件隔離CPU、平臺、ABI等差異,開發人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so。* NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。其實:NDK就是能夠方便快捷開發.so文件的工具。JNI的過程比較復雜,生成.so需要大量操作,而NDK就是簡化了這個過程。打個不恰當比方:JNI 需要自己買菜、洗菜、炒菜、煮飯,很麻煩;NDK就是宅急送,一個電話。本文轉自http://dev.10086.cn/cmdn/bbs/thread-38855-1-11.html
posted on 2012-04-23 17:25
Bluesea 閱讀(3298)
評論(0) 編輯 收藏 引用