Android framwork 之Android makefile编写

Android build system是一个非常庞大的系统,要编译android工程、修改或新增Android模块都需要对这个编译系统有一定的了解。但是由于它实在是太庞大了,大家往往是不知道从哪里切入进去,对Android的编译系统进行一个系统的学习。

二、Rild  Android.mk初探
Rild  的Android.mk比较简单,去掉的无用代码后,如下面所示:

# Copyright 2006 The Android Open Source Project

# XXX using libutils for simulator build only...
#
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)

LOCAL_SRC_FILES:= \
    reference-ril.c \
    atchannel.c \
    misc.c \
    at_tok.c

LOCAL_SHARED_LIBRARIES := \
    liblog libcutils libutils libril librilutils

# for asprinf
LOCAL_CFLAGS := -D_GNU_SOURCE

LOCAL_C_INCLUDES := $(KERNEL_HEADERS)

  #build executable
  LOCAL_SHARED_LIBRARIES += \
      libril
  LOCAL_MODULE:= reference-ril
  include $(BUILD_EXECUTABLE)
endif

三、 Android.mk基本组成

  1. LOCAL_PATH 定义了当前模块的相对路径,必须出现在所有的编译模块之前
  2. 每个编译模块由include $(CLEAR_VARS) 开始,由include $(BUILD_XXX) 结束
  3. include $(CLEAR_VARS) 是一个编译模块的开始,它会清空除LOCAL_PATH之外的所有LOCA_XXX变量
  4. include $(BUILD_XXX) 描述了编译目标
  5. LOCAL_SRC_FILES 定义了本模块编译使用的源文件,采用的是基于LOCAL_PATH的相对路径
  6. LOCAL_MODULE 定义了本模块的模块名

编译acp还需要了几个可选的变量:

  • LOCAL_STATIC_LIBRARIES 表示编译本模块时需要链接的静态库
  • LOCAL_C_INCLUDES 表示了本模块需要引用的include文件
  • LOCAL_ACP_UNAVAILABLE 表示是否支持acp,如果支持acp,则使用acp进行拷贝,否则使用linux cp拷贝,本模块编译acp,当然是不支持acp了

四、编译目标

上面我们用到include  $(CLEAR_VARS)和include  $(BUILD_HOST_EXECUTABLE),那么他们是在哪里定义的呢?除了BUILD_HOST_EXECUTABLE还有哪些BUILD_XXX目标呢?
它们的定义位于build/core/config.mk文件,当然config.mk文件定义的编译目标也很多,下面列举几个常用的目标:
编译目标说明
BUILD_HOST_STATIC_LIBRARY主机上的静态库
BUILD_HOST_SHARED_LIBRARY主机上的动态库
BUILD_HOST_EXECUTABLE主机上的可执行文件
BUILD_STATIC_LIBRARY目标设备上的静态库
BUILD_SHARED_LIBRARY目标设备上的动态库
BUILD_EXECUTABLE目标设备上的可执行文件
BUILD_JAVA_LIBRARYJAVA库
BUILD_STATIC_JAVA_LIBRARY静态JAVA库
BUILD_HOST_JAVA_LIBRARY主机上的JAVA库
BUILD_PACKAGEAPK程序
具体的每一个目标,等我们遇到的时候我们再详细进行讲解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值