1、假如想要使用foo這個模塊,先要 #include <foo.h>, 然后鏈接 /system/lib/libfoo.so 。
(在 Android.mk 文件中加入 LOCAL_LDLIBS := -lfoo)
ndk-build 會自動鏈接 C庫、數學庫、C++庫
android-3 -> Official Android 1.5 system images
android-4 -> Official Android 1.6 system images
android-5 -> Official Android 2.0 system images
android-6 -> Official Android 2.0.1 system images
android-7 -> Official Android 2.1 system images
android-8 -> Official Android 2.2 system images
android-9 -> Official Android 2.3 system images
Android 1.5 以上的系統,下面這些庫可用:
1、C庫(這個C庫包含多線程支持,所以不需要指定 -lpthread,也不需要指定 -lrt )
注意:內核頭文件很沒有穩定下來(今后可能變動),這些頭文件是 <linux/*.h> 和 <asm/*.h>
2、數學庫(也不需要指定 -lm)
3、C++庫: 目前只有這些頭文件可用。(不需要指定 -lstdc++ ,是自動鏈接的)
<cstddef> <new> <utility> <stl_pair.h>
4、Android log:
<android/log.h> android系統的log功能
要用這個API,需要指定 LOCAL_LDLIBS := -llog
5、zlib庫:
<zlib.h> 和 <zconf.h>
鏈接: -lz ( /system/lib/libz.so)
http://www.zlib.net/manual.html
6、動態連接器庫:
<dlfcn.h>
這個庫提供的函數例如: dlopen()/dlsym()/dlclose()
LOCAL_LDLIBS := -ldl ( /system/lib/libdl.so)
----------------------- 以上由 android-3提供 ---------------------------------
1、OpenGL ES 1.x 庫
<GLES/gl.h> 和 <GLES/glext.h>
LOCAL_LDLIBS := -lGLESv1_CM.so( /system/lib/libGLESv1_CM.so)
<uses-feature> ( http://developer.android.com/guide/topics/manifest/uses-feature-element.html)
----------------------- 以上是 android-4 新增的NDK API -------------------------
1、OpenGL ES 2.0
<GLES2/gl2.h> 和 <GLES2/gl2ext.h>
LOCAL_LDLIBS := -lGLESv2.so ( /system/lib/libGLESv2.so)
<uses-feature>
注意: 目前模擬器還不支持這個庫
--------------------------以上是 android-5 新增的內容 ------------------------------
1、jnigraphics 庫
一個小型的C語言庫,提供對Java中的 bitmap 對象的操作。
包含: <android/bitmap.h>
鏈接: LOCAL_LDLIBS += -ljnigraphics
典型用法:
a) 用 AndroidBitmap_getInfo() 函數從位圖句柄(從JNI得到)獲得信息(寬度、高度、像素格式)
b) 用 AndroidBitmap_lockPixels() 對像素緩存上鎖,即獲得該緩存的指針。
c) 用C/C++ 對這個緩沖區進行讀寫
d) 用 AndroidBitmap_unlockPixels() 解鎖
------------------------ 以上是 android-8 新增 -----------------------------
1、OpenSL ES 本地音頻庫
頭文件: <SLES/OpenSLES.h> 和 <SLES/OpenSLES_Platform.h>
鏈接: LOCAL_LDLIBS += -lOpenSLES (libOpenSLES.so)
----------------------- 以上是 android-9 新增的 -------------------------------
從android-9 開始,就可以完全用C/C++來寫android程序了(完全脫離java)
但是,仍然沒有脫離java虛擬機,許多東西還是需要通過jni來訪問 (參考 docs/NATIVE-ACTIVITY.html )
頭文件:
<android/native_activity.h>
1、活動(Activity)生命期的管理
頭文件: <android/looper.h> <android/input.h> <android/keycodes.h> <android/sensor.h>
2、監聽事件和傳感器
頭文件: <android/rect.h> <android/window.h> <android/native_window.h> <android/native_window_jni.h>
3、窗口管理(包括對像素緩存加鎖、解鎖)
頭文件: <android/configuration.h> <android/asset_manager.h> <android/storage_manager.h>
<android/obb.h> 對嵌入 apk中的資源(或OBB文件)進行只讀的、直接訪問。
OBB(Opaque Binary Blob)文件,新特性,允許把較大的數據放在apk之外(對於游戲程序有用)
上面提到的頭文件在 "libandroid.so" 共享庫中。
鏈接方法: LOCAL_LDLIBS += -landroid