android底层开发android.mk语法规范

来源:互联网 发布:php判断时间的大小 编辑:程序博客网 时间:2024/06/04 19:10
      Android.mk是Android提供的一种makefile文件,用来指定诸如编译可执行文件 、各平台的动态库so 、静态库so 、打成jar包、apk等。要掌握jni,就必须熟练掌握Android.mk的语法规范。 






1.编译所生成的目标文件格式android.mk如下。


  • 分析一个最简单的Android.mk

    LOCAL_PATH := $(call my-dir)  //

    定义了当前模块的相对路径

    include $(CLEAR_VARS)    //

    清空当前环境变量

  • LOCAL_MODULE:= test    //

    编译生成的目标名称


    LOCAL_SRC_FILES := test.c   //

    编译该模块需要的源文件

    include $(BUILD_EXECUTABLE)  //

    编译所生成的目标文件格式




    2.多源码文件编译动态库和静态库。



    

    编译动态库:

    编译类型修改为 BUILD_SHARED_LIBRARY

    编译静态库:

    编译类型修改为 BUILD_STATIC_LIBRARY




    3.引用加载库方法。



    

     项目中引用系统的库:

        

               LOCAL_SHARED_LIBRARIES += libxxxx:

    将系统库文件名添加到Android.mk中

      引入第三方库文件:

               

               LOCAL_LDFLAGS := -L/Path -lxxx


     引入第三方头文件:


          

    LOCAL_C_INCLUDES:= path

    android.mk文件中指定头文件路径

    4.jar包的加载和编译,编译apk。


       


    

    (1)编译生成apk:

     

       

      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_SRC_FILES := $(call all-subdir-java-files)

      LOCAL_PACKAGE_NAME := LocalPackage

      include $(BUILD_PACKAGE)


       BUILD_PACKAGE:编译生成apk

      LOCAL_PACKAGE_NAME:编译生成apk名字


    (2)编译生成jar包:

      LOCAL_PATH := $(call my-dir)

      include $(CLEAR_VARS)

      LOCAL_SRC_FILES := $(call all-subdir-java-files)

      LOCAL_MODULE := com.test.myjar

      include $(BUILD_STATIC_JAVA_LIBRARY)

     include $(BUILD_JAVA_LIBRARY)


     include $(BUILD_STATIC_JAVA_LIBRARY):编译成静态jar包

     include $(BUILD_JAVA_LIBRARY):编译生成共享jar包



     jar包分类:


    静态jar包:include $(BUILD_STATIC_JAVA_LIBRARY)

    使用.class文件打包而成的JAR文件,可以在任何java虚拟机运行


    动态jar包:include $(BUILD_JAVA_LIBRARY)

    在静态jar包基础之上使用.dex打包而成的jar文件,.dex是android系统使用的文件格式。




    (3)APK依赖于jar包:


    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)


    LOCAL_STATIC_JAVA_LIBRARIES := static-library

    LOCAL_JAVA_LIBRARIES := share-library


    LOCAL_SRC_FILES := $(call all-subdir-java-files)

    LOCAL_PACKAGE_NAME := LocalPackage

    include $(BUILD_PACKAGE)


    LOCAL_STATIC_JAVA_LIBRARIES:静态jar包

    LOCAL_JAVA_LIBRARIES:动态jar包


    (4)预编译jar包:


    LOCAL_PATH := $(call my-dir)

    include $(CLEAR_VARS)

    LOCAL_MODULE_CLASS := JAVA_LIBRARIES

    LOCAL_MODULE := com.test.share

    LOCAL_SRC_FILES := com.test.static

    include $(BUILD_PREBUILT)


    BUILD_PREBUILT:预编译

    LOCAL_MODULE_CLASS:指定编译生成文件类型


    预编译生成文件类型:


    LOCAL_MODULE_CLASS:编译文件类型

    JAVA_LIBRARIES:dex归档文件

    APPS:APK文件

    SHARED_LIBRARIES:动态库文件

    EXECUTABLES:二进制文件

    ETC:其他文件格式


    (5)Android.mk添加判断语句:


    ifeq($(VALUE), x)#ifneq

      do_yes

    else

      do_no

    endif


    ifeq/ifneq:根据判断条件执行相关编译




    5. Android.mk示例 


    1. 编译静态库  
    2. LOCAL_PATH := $(call my-dir)  
    3. include $(CLEAR_VARS)  
    4. LOCAL_MODULE = libhellos  
    5. LOCAL_CFLAGS = $(L_CFLAGS)  
    6. LOCAL_SRC_FILES = hellos.c  
    7. LOCAL_C_INCLUDES = $(INCLUDES)  
    8. LOCAL_SHARED_LIBRARIES := libcutils  
    9. LOCAL_COPY_HEADERS_TO := libhellos  
    10. LOCAL_COPY_HEADERS := hellos.h  
    11. include $(BUILD_STATIC_LIBRARY)  
    12.   
    13. #编译动态库  
    14. LOCAL_PATH := $(call my-dir)  
    15. include $(CLEAR_VARS)  
    16. LOCAL_MODULE = libhellod  
    17. LOCAL_CFLAGS = $(L_CFLAGS)  
    18. LOCAL_SRC_FILES = hellod.c  
    19. LOCAL_C_INCLUDES = $(INCLUDES)  
    20. LOCAL_SHARED_LIBRARIES := libcutils  
    21. LOCAL_COPY_HEADERS_TO := libhellod  
    22. LOCAL_COPY_HEADERS := hellod.h  
    23. include $(BUILD_SHARED_LIBRARY)  
    24.   
    25. #使用静态库  
    26. LOCAL_PATH := $(call my-dir)  
    27. include $(CLEAR_VARS)  
    28. LOCAL_MODULE := hellos  
    29. LOCAL_STATIC_LIBRARIES := libhellos  
    30. LOCAL_SHARED_LIBRARIES :=  
    31. LOCAL_LDLIBS += -ldl  
    32. LOCAL_CFLAGS := $(L_CFLAGS)  
    33. LOCAL_SRC_FILES := mains.c  
    34. LOCAL_C_INCLUDES := $(INCLUDES)  
    35. include $(BUILD_EXECUTABLE)  
    36.   
    37. #使用动态库  
    38. LOCAL_PATH := $(call my-dir)  
    39. include $(CLEAR_VARS)  
    40. LOCAL_MODULE := hellod  
    41. LOCAL_MODULE_TAGS := debug  
    42. LOCAL_SHARED_LIBRARIES := libc libcutils libhellod  
    43. LOCAL_LDLIBS += -ldl  
    44. LOCAL_CFLAGS := $(L_CFLAGS)  
    45. LOCAL_SRC_FILES := maind.c  
    46. LOCAL_C_INCLUDES := $(INCLUDES)  
    47. include $(BUILD_EXECUTABLE) 
    48.  
    49. 加裁静态jar

    50. LOCAL_PATH:= $(call my-dir)



    51. include $(CLEAR_VARS)



    52. LOCAL_MODULE_TAGS := optional



    53. LOCAL_SRC_FILES := $(call all-java-files-under, src)



    54. LOCAL_STATIC_JAVA_LIBRARIES := libarity



    55. LOCAL_PACKAGE_NAME := NotificationLog

    56. LOCAL_CERTIFICATE := platform

    57. include $(BUILD_PACKAGE)



    58. include $(CLEAR_VARS)



    59. LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := libarity:jack



    60. include $(BUILD_MULTI_PREBUILT)





    61. include $(call all-makefiles-under,$(LOCAL_PATH))






    















       

    

       

          



       









                   



    原创粉丝点击