使用 Android NDK 的一般方法:


 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM