ndk-build指定生成目录
NDK_PROJECT_PATH:指定工程的路径,由于我们已经cd到了jni目录,这里就用.表示当前路径
NDK_APPLICATION_MK:表示application的配置
APP_BUILD_SCRIPT:表示构建脚本的路径
NDK_LIBS_OUT:表示最后生成动静态的位置
作者:蛋西
链接:https://www.jianshu.com/p/28e9c49dc43f
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
ndk-build NDK_PROJECT_PATH=. NDK_APPLICATION_MK=Application.mk APP_BUILD_SCRIPT=Android.mk NDK_LIBS_OUT=../output/libs
Makefile部分语法
$(call all-java-files-under, src) 查找当前目录下的src目录及子目录下的所有java文件
$(wildcard PATTERN...) --> Example: src := $(wildcard *.c) 查找当前目录下的所有.c文件 并展开
输出结果为 a.c b.c sub/a1.c sub/a2.c
$(nodir PATTERN...) nodir := $(notdir $(src))
输出结果为 a.c b.c a1.c a2.c
$(patsubst %.c,%.o,$(nodir)) 将.c文件替换为.o文件
TDC_XXX := AAC AAB AAD AAE AAF
$(foreach var text commond) --> Example: $(foreach i $(TDC_XXX) $(i)) $(i) 是对i的一种操作,整句代码的意思就是查找TDC_XXX宏对应的值并且给他列出来 可以用于过滤赋值操作
$(info xxxxxxxxxx) 编译LOG中 显示xxx信息
$(warning xxxxxxxxxx) 编译LOG中 显示警告xxx信息
$(error xxxxxxxxxx) 编译LOG中 显示错误信息 并且中止编译
$(strip $(XXXXX) ) 去空格函数——strip,空字符包括 空格,tab等不可显示的字符m去掉$(XXXXX)字串中开头和结尾的空字符,并将中间的多个连续空字符(如果有的话)合并为一个空字符。
$(shell grep -nr "") 使用shell脚本命令
PRODUCT_BOOT_JARS += homesecurity 生成framework.jar类似的jar包,需要在
build/core/tasks/check_boot_jars/package_whitelist.txt 加入对应包名
$(call inherit-product-if-exists, vendor/tdc/aab.mk) 如果存在vendor/tdc/aab.mk 则include
//如果定义的的CUSTOM_PROJECT_NAME 包含字符串WIFI
//$(findstring WIFI,$(CUSTOM_PROJECT_NAME)这里是查找出包含字符串WIFI的 意思
ifneq ($(strip $(findstring WIFI,$(CUSTOM_PROJECT_NAME))),)
endif
Android.mk的参数说明
LOCAL_PATH:= $(call my-dir) 当前目录
LOCAL_MODULE_NAME := TDCTest 当前模块名称
LOCAL_PACKAGE_NAME := TDCTest 编译有源码的app使用的模块名称
LOCAL_STATIC_JAVA_LIBRARIES := android-support-v7-appcompat 导入静态jar包
LOCAL_STATIC_ANDROID_LIBRARIES += \ 导入androidx相关的jar包可用该宏
androidx.recyclerview_recyclerview \
androidx.appcompat_appcompat
LOCAL_DEX_PREOPT := false 不生成odex文件
LOCAL_PROGUARD_ENABLED := disabled 关闭代码混淆
LOCAL_PRIVILEGED_MODULE := true 私有模块。编译将纳入priv-app
LOCAL_CERTIFICATE := platform 采用平台签名
LOCAL_FULL_MANIFEST_FILE 使用的配置清单文件
LOCAL_SRC_FILES := $(call all-java-files-under, src) 使用的编译文件
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res 使用的编译目录
LOCAL_PRIVATE_PLATFORM_APIS :=true 是否可以使用隐藏的API接口
LOCAL_SDK_VERSION := current 当前编译项的SDK版本
LOCAL_OVERRIDES_PACKAGES := XXX 覆盖的PACKAGE 覆盖编译(可以理解为移除)
LOCAL_AAPT_FLAGS += \
--rename-manifest-package com.tdc.settings 重命名AndroidManifest.xml中的包名为com.tdc.settings
include $(CLEAR_VARS) 清除刚才使用的编译配置
LOCAL_CFLAGS += -DTDC_XXX_XXX 定义Cflag TDC_XXX_XXX用于*.C文件中的宏开关定义 一定要-DXXX 才是定义XXX的宏开关,这个XXX可以在任意include的xxx中使用