mk文件内容介绍

#代表mk当前文档路径
LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_PACKAGE_NAME := HQ_DevSet

#指该模块在所有版本下都编译
LOCAL_MODULE_TAGS := optional

#混淆配置
LOCAL_PROGUARD_ENABLED := full obfuscation
LOCAL_PROGUARD_FLAG_FILES := ../../proguard-rules.pro

#设置不打odex包
LOCAL_DEX_PREOPT := false
DONT_DEXPREOPT_PREBUILTS := true

#apk路径
LOCAL_MODULE_PATH := $(TARGET_OUT)/app

#签名配置
LOCAL_CERTIFICATE := platform

LOCAL_MULTILIB := 32

#源码文件
#引用当前app的资源
LOCAL_RESOURCE_DIR += $(LOCAL_PATH)/res

#声明当前app的代码目录
src_dirs := java/

#引用当前app的代码
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))

#添加aidl源码文件
LOCAL_SRC_FILES += \
src/xx/xx/xx/XxxOne.aidl \
src/xx/xx/xx/XxxTwo.aidl

# jar包
#声明多个 jar 包的位置 ----其中\代表换行,后面不能跟任何字符,路径为相对路径
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := \
../../../xxx/libName:jar
# eg:libName:../../../libs/libName.jar

#引用我们声明的多个 jar 包的变量
LOCAL_STATIC_JAVA_LIBRARIES += libName \
android-support-v4

#aar包
#声明aar包
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += aarName:../../../xxx/aarName.aar\
aarName2:../../../libs/aarName2.aar

#引用aar包
LOCAL_STATIC_JAVA_AAR_LIBRARIES += Name1 \
Name2

#引入使用的资源 添加包名
LOCAL_AAPT_FLAGS += --auto-add-overlay \
--extra-packages com.xxxx.xxxx.xxxx \
--extra-packages xxx.xxx

#设置version版本
#设置版本号和名字,如果不写会默认使用系统api的版本号
version_code = 24
version_name := 1.0.0.0

LOCAL_AAPT_FLAGS += --version-code $(version_code)
LOCAL_AAPT_FLAGS += --version-name $(version_name)

# 打出来的minSDK和targetSDK version都是19
LOCAL_SDK_VERSION := 19
# 如果有特殊情况可在清单文件中添加
# AndroidManifest.xml清单文件添加sdk版本,优先使用清单文件中的版本号
# <uses-sdk android:minSdkVersion="19"
# android:targetSdkVersion="25"/>

#打apk包
include $(BUILD_PACKAGE)

#调用子目录的mk文件
include $(call all-makefiles-under,$(LOCAL_PATH))

如果使用的系统的包,需要引入他们使用的资源文件,否则会提示编译资源找不到的错误

#RecyclerView例子
LOCAL_RESOURCE_DIR += frameworks/support/v7/recyclerview/res
LOCAL_STATIC_JAVA_LIBRARIES += android-support-v7-recyclerview
LOCAL_AAPT_FLAGS += --auto-add-overlay \
--extra-packages android.support.v7.recyclerview

编译指令

  1. 执行模块的编译前需要先将源码环境构建
    进入源码根目录执行如下命令,envsetup.sh脚本文件里包含lunch m mm mmm等指令的定义,lunch后是对应型号
    source build/envsetup.sh
    lunch xxxx

2.编译模块

  • 使用mmmma编译当前目录
    mmmma会编译当前目录下的模块,目录目录下需要有Android.mk这个makefile文件,否则就往上找最近的Android.mk文件
    mma会完全重新编译当前目录和编译当前模块所需要的依赖
    mm只会编译当前目录,在缺少依赖时会失败,一般在源码整编后使用

  • 使用mmmmmma编译指定目录
    mmmmmma可以在任意目录下指定对应路径下的模块编译,加a时会同时编译所需依赖

一次性编译某目录下的所有的模块

在改目录创建Android.mk文件,添加以下内容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
include $(call all-makefiles-under,$(LOCAL_PATH))

在该目录下执行编译指令或指向该目录编译即可编译目录下所有包含Android.mk的模块