rk3288 編譯應用程序

 一. Android.mklinux

    1.1. 什麼是.mkandroid

        Android.mk是Android提供的一個makefile文件,能夠將源文件分組爲模塊。用來引用的頭文件目錄、須要編譯的*.c/*.cpp文件、jni源文件、指定編譯生成*.so共享庫文件或者*.a靜態庫文件,能夠定義一個或多個模塊,也能夠多個模塊中使用同一個源文件app

    1.2. .mk語法ide

        1.2.1.  LOCAL_PATH := $(call my-dir)函數

             每一個Android.mk文件都以LOCAL_PATH開始,Build System提供的宏函數 my-dir,此變量返回包含的makefile的路徑;工具

        1.2.2. include $(CLEAR_VARS):oop

            CLEAR_VARS變量由Build System提供,並指向一個特定的GNU Makefile,可爲你清除LOCAL_xxx變量,但不會清除LOCAL_PATH變量;ui

            因系統在單一GNU Make執行環境中解析全部構建控制文件,LOCAL_xxx變量是全局的,因此描述每一個模塊以前,聲明此變量,能夠清除全部了LOCAL_xxx,這樣清理後避免相互影響;spa

       1.2.3. LOCAL_MODULE日誌

           此變量聲明模塊名稱,名稱必須惟一且不含任何空格;

            Build System在生成最終共享庫文件時,會將"lib"做爲前綴+模塊名稱+".so"做爲共享庫文件名稱;

            eg:LOCAL_MODULE    := ffmpeg-decoder

                模塊名稱爲ffmpeg-decoder生成共享庫爲libffmpeg-decoder.so;

        1.2.4. LOCAL_SRC_FILES := FFmpegDecoder.cpp FFmpegConfigure.cpp

               此變量必須包含要構建到模塊中的C/C++源文件列表,不須要列出頭文件和包含文件,系統會自動導入依賴;

              eg: LOCAL_SRC_FILES := FFmpegDecoder.cpp FFmpegConfigure.cpp

        1.2.5. LOCAL_C_INCLUDES 

            變量設置頭文件的include目錄列表;

            eg: LOCAL_C_INCLUDES += $(LOCAL_PATH)/include

        1.2.6. LOCAL_LDLIBS

            此變量包含構建共享庫或可執行文件時連接庫,使用-l前綴傳遞特定系統庫的名稱,多個連接庫之間使用空格做爲分隔符;

            NDK爲Android版本提供新的頭文件和庫,文件路徑:$NDK/platforms/android-<level>/<abi>/usr/include下;

           -llog連接到系統的liblog.so文件,應用能夠定義從原生代碼向內核發送日誌消息,路徑:/system/lib/liblog.so,實際上是導入<android/log.h>頭文件,路徑:$NDK/platforms/android-3/arch-arm/usr/include/android/log.h

           變量列表:

                           -llog(日誌庫):導入log.h頭文件

                           -lz(ZLib壓縮庫):添加zlib.h和zconf.h頭文件;

                          -ldl(動態連接器庫):添加dlfcn.h頭文件,能夠訪問Android動態連接器的dlopen()、dlsym()和dlclose()函數;

                         -lGLESv3(OpenGL ES3.1庫):此變量API 21開始,添加gl31.h和gl3ext.h頭文件,提供了渲染機制,參考EGL原平生臺接口;從API 9開始提供EGL API,能夠使用GLSurfaceView;

                        -ljnigraphics:容許C/C++以可靠方式訪問Java位圖對象的像素緩衝區,導入bitmap.h頭文件,jnigraphics工做流程參考:NDK API中的jnigraphics;

                          -lOpenMAXAL(多媒體庫):導入OMXAL/OpenMAXAL.h和
                                                                       OMXAL/OpenMAXAL_Platform.h頭文件,提供原生多媒體處
                                                                       理庫;

                      -landroid(android原生頭文件庫): 原生頭文件列表包括native_activity.h、looper.h、input.h、keycodes.h等等,如需瞭解頭文件詳情參考:NDK API參考文檔;

         eg:LOCAL_LDLIBS := -llog -lz

    1.3. .mk實例

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := ./oled_test.c 
LOCAL_SHARED_LIBRARIES := liblog libcutils
LOCAL_MODULE := oled_test
LOCAL_MODULE_TAGS := optional
LOCAL_MODULE_PATH := /home/network_share/test/oled
include $(BUILD_EXECUTABLE) 
View Code

二. 編譯

    2.1. 早期的linux編譯app是須要設置交叉編譯鏈工具,如今安卓開發中,再也不須要配置gcc,而是直接使用安卓編譯環境

    2.2. source ./build/envsetup.sh

 

    2.3. lunch 如今相應版本

 

    2.4. mmm external/yf_test/

 

相關文章
相關標籤/搜索