Android.mk 介绍

一个最简单的Android.mk:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := hello_exe
LOCAL_SRC_FILES := main.c
include $(BUILD_EXECUTABLE)
注释:
LOCAL_PATH变量用于在开发树中查找源文件,宏函数‘my-dir’,由编译系统提供,用于返回当前源码路经
CLEAR_VARS: 由编译系统提供,表示清楚许多LOCAL_XXX变量
LOCAL_MODULE:变量必须定义,以标识你在Android.mk文件中描述的每个模块,也可以理解为编译后的目标文件的名字,即main.c会编译成可执行程序hello_exe
LOCAL_SRC_FILES: 变量指定需要编译的源文件 
如果要静态编译可执行程序,那么可以加如下:
LOCAL_FORCE_STATIC_EXECUTABLE  := true



编译链接库:
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := libhello
LOCAL_SRC_FILES := main.c
TARGET_PRELINK_MODULES := false
LOCAL_C_INCLUDES := $(INCLUDES)
include $(BUILD_SHARED_LIBRARY)
如果想编译成静态库,只需把
BUILD_SHARED_LIBRARY 替换成
BUILD_STATIC_LIBRARY


prebuilt(预编译):将已经编译好的文件编译进目标文件系统中,文件内容不会发生改变,只是存放路径发生改变。
方法:
include $(BUILD_PREBUILT)
ACP方法
1, include $(BUILD_PREBUILT)
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := src_path/XXX
LOCAL_MODULE := dst_path/XXX
LOCAL_MODULE_TAGS := eng
include $(BUILD_PREBUILT)



#prebuilt example
#install a apk to system/apps
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := GfanMobile.apk
LOCAL_MODULE_TAGS := user
LOCAL_MODULE_CLASS := APPS
LOCAL_SRC_FILES := $(LOCAL_MODULE)
include $(BUILD_PREBUILT)

2, ACP
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
file := $(TARGET_OUT_KEYLAYOUT)/s3c-button.kl
ALL_PREBUILT += $(file) <==这个必须,可以放在下面统一管理预处理,user to make the dependency on acp
$(file): $(LOCAL_PATH)/s3c-button.kl | $(ACP)
$(transform-prebuilt-to-target)
$(transform-prebuilt-to-target)之前要有个TAB键

example;
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := bcm4330.ko
file := $(TARGET_OUT)/lib/modules/$(LOCAL_MODULE)
ALL_PREBUILT += $(file)
$(file) : $(LOCAL_PATH)/$(LOCAL_MODULE) | $(ACP)
$(transform-prebuilt-to-target)



编译产生的中间文件
 可执行程序,动态库和静态库生成的文件分别再:
out/target/product/*/obj/EXECUTABLE
out/target/product/*/obj/STATIC_LIBRARY
out/target/product/*/obj/SHARED_LIBRARY
其目标的文件夹分别为:
XXX_intermediates
XXX_shared_intermediates
XXX_static_intermediates
XXX为模块 LOCAL_MODULE定义的名字
以上使用了大量的宏,实际android系统中还有很多类似的宏
LOCAL_MODULE    → 编译的目标对象
LOCAL_SRC_FILES → 编译的源文件
LOCAL_C_INCLUDES →  需要包含的头文件目录
LOCAL_SHARED_LIBRARIES → 链接时需要的外部库
LOCAL_PRELINK_MODULE → 是否需要prelink处理
LOCAL_JAVA_LIBRARIES → 加入jar包
LOCAL_PACKAGE_NAME → java 应用程序的名字用改变量定义
LOCAL_PATH → 编译时的目录
include $(CLEAR_VARS) → 清楚之前的一些系统变量
BUILD_SHARED_LIBRARY → 指明要编译成动态库
BUILD_HOST_STATIC_LIBRARY → 指明要编译成主机端静态库
BUILD_STATIC_LIBRARY → 指明要编译成静态库
BUILD_HOST_SHARED_LIBRARY → 指明要编译成主机端动态库
BUILD_EXECUTABLE → 指明要编译成可执行文件
BUILD_HOST_EXECUTABLE → 指明要编译成主机端可执行文件
BUILD_PACKAGE → 指明要编译成apk
BUILD_HOST_PREBUILT → 指明要编译成主机端预编译文件
BUILD_PREBUILT → 指明要编译成预编译文件
BUILD_JAVA_LIBRARY -->指明要编译成动态jar包
BUILD_STATIC_JAVA_LIBRARY → 指明要编译成静态jar包
BUILD_HOST_JAVA_LIBRARY → 指明要编译成主机端jar包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值