Android NDK是一款提供給安卓應用開發人員使用的NDK開發工具集,我們可以通過Android NDK免費版提供的多種開發和編譯器來完成安卓應用和游戲的開發工作。而且我們還可以使用這款軟件來對so和Java應用進行打包,提升了用戶們的應用打包效率。
在此之前,Android平臺的第三方應用程序均是依靠基于Java的Dalvik特制虛擬機進行開發的。原生SDK的公布可以讓開發者更加直接的接觸Android系統資源,并使用傳統的C或C++語言編寫程序,并在程序封包文件(.apks)中直接嵌入原生庫文件。
不過,Google也表示,使用原生SDK編程相比Dalvik虛擬機也有一些劣勢,比如程序更加復雜,兼容性難以保障,無法訪問Framework API,Debug難度更大等。開發者需要自行斟酌使用。
眾所周知,Android程序運行在Dalvik虛擬機中,NDK允許用戶使用類似C / C++之類的原生代碼語言執行部分程序。
NDK包括了:
從C / C++生成原生代碼庫所需要的工具和build files。
將一致的原生庫嵌入可以在Android設備上部署的應用程序包文件(application packages files ,即.apk文件)中。
支持所有未來Android平臺的一些列原生系統頭文件和庫
Android NDK是在SDK前面又加上了原生二字,即Native Development Kit,因此又被Google稱為NDK。
Android NDK全稱:Native Development Kit,即本地開發包。
1、NDK是一系列工具的集合。
NDK提供了一系列的工具,這些工具對開發者的幫助是巨大的。它們能幫助開發者快速開發C(或C++)的動態庫,并能自動將so庫和java應用一起打包成apk。
NDK集成了交叉編譯器,并提供了相應的mk文件隔離CPU、平臺、ABI等差異,開發人員只需要簡單修改mk文件(指出“哪些文件需要編譯”、“編譯特性要求”等),就可以創建出so庫。NDK可以自動地將so和Java應用一起打包,極大地減輕了開發人員的打包工作。
2、 NDK提供了一份穩定、功能有限的API頭文件聲明。Google明確聲明該API是穩定的,在后續所有版本中都穩定支持當前發布的API。從該版本的 NDK中看出,這些API支持的功能非常有限,包含有:C標準庫(libc)、標準數學庫(libm)、壓縮庫(libz)、Log庫(liblog)。
打開Eclipse,點Window->Preferences->Android->NDK,設置NDK路徑,例如Shamoo的是E:\android-ndk-r9c
新建一個Android工程,在工程上右鍵點擊Android Tools->Add Native Support...,然后給我們的.so文件取個名字,例如:my-ndk
這時候工程就會多一個jni的文件夾,jni下有Android.mk和my-ndk.cpp文件。Android.mk是NDK工程的Makefile,my-ndk.cpp就是NDK的源文件。
接下來仿著NDK的demo,Hello-JNI工程寫一下。使用Alt + '/'可以代碼提示!很爽!有木有?之前用CDT時候死活都按不出代碼提示,郁悶...
JNI接口的命名規范是:Java_ + 調用該方法的包名(包名的點用_代替) + _ + 調用該接口的類名 + _ + 方法名,對于實例方法,有兩個參數是必要的,一個JNI的環境指針JNIEnv *
完成了,然后運行。運行之前先編譯NDK,然后在編譯JAVA代碼。編譯也許會遇到Unable to launch cygpath. Is Cygwin on the path?如何解決?如下
工程右鍵,點Properties->C/C++ Build的Building Settings中去掉Use default build command,然后輸入${NDKRoot}/ndk-build.cmd
在C/C++ Build中點擊Environment,點Add...添加環境變量NDKROOT,值為NDK的根目錄