读一个android.mk

本文解析了Android.mk文件中关键配置项的作用,包括LOCAL_PATH定义、变量清理、模块标签设定、库文件及源文件指定等,为理解Android项目构建流程提供了指南。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

LOCAL_PATH:= $(call my-dir)

android.mk的第一行一般都是它,用来表面当前的路径是my-dir,也就是android.mk所在路径,它有一个硬性规定:必须放在include $(CLEAR_VARS)之前,当然了它都是第一行,肯定在include $(CLEAR_VARS)之前了;

include $(CLEAR_VARS)

CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.

例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH.

这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。

LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_TAGS :=user eng tests optional

user: 指该模块只在user版本下才编译;

eng: 指该模块只在eng版本下才编译;

tests: 指该模块只在tests版本下才编译;

optional:指该模块在所有版本下都编译;

LOCAL_STATIC_ANDROID_LIBRARIES := \
    android-support-v13 \
    android-support-v4 \
    android-support-compat

加入Android库;

LOCAL_STATIC_JAVA_LIBRARIES := android-ex-camera2-portability
LOCAL_STATIC_JAVA_LIBRARIES += xmp_toolkit
LOCAL_STATIC_JAVA_LIBRARIES += glide
LOCAL_STATIC_JAVA_LIBRARIES += guava
LOCAL_STATIC_JAVA_LIBRARIES += jsr305

当前模块依赖的 Java 静态库;

LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd)
LOCAL_SRC_FILES += $(call all-java-files-under, src_pd_gcam)

标记源文件,这里是src、src_pd、src_pd_gcam文件夹下的所有java文件,如果有C/C++也需要加到LOCAL_SRC_FILES 下;

LOCAL_RESOURCE_DIR += \
	$(LOCAL_PATH)/res \
	$(LOCAL_PATH)/res_p

资源文件目录

include $(LOCAL_PATH)/version.mk

引入version.mk;

LOCAL_AAPT_FLAGS := \
        --auto-add-overlay \
        --version-name "$(version_name_package)" \
        --version-code $(version_code_package) \

AAPT即Android Asset Packaging Tool的标志位;

LOCAL_USE_AAPT2 := true

使用AAPT2打包;

LOCAL_PACKAGE_NAME := Camera2

包名;

LOCAL_SDK_VERSION := current

这句话,貌似是指定SDK版本,然而网上都说加了它就不能访问Hide的API了;

LOCAL_PROGUARD_FLAG_FILES := proguard.flags

proguard.flags是一个代码混淆的文件;

LOCAL_JAVA_LIBRARIES += org.apache.http.legacy

当前模块依赖的java库;

LOCAL_JNI_SHARED_LIBRARIES := libjni_tinyplanet libjni_jpegutil

表示模块在运行时要依赖的共享库(动态库),在链接时就需要,以便在生成文件时嵌入其相应的信息;

include $(BUILD_PACKAGE)

这句话就一个执行语句,把上面的设置好的变量开始执行,BUTLD_PACKAGE这个就是表示编译成一个APK

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

include目录下所有的mk文件,这里面有两个坑,

  • 只include Android.mk文件,叫其他名字的mk文件,不include;
  • 只include这个$(LOCAL_PATH)一级目录下的Android.mk文件,而不是所有子目录以及子目录下的Android.mk文件;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值