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

       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))




















   

   

      



   









               



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值