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/

 

相关文章
相关标签/搜索