Android.mk 常用常量总结

LOCAL_PATH := $(call my-dir) 此变量表示源码所在目录,写法固定

include $(CLEAR_VARS) 清除 除LOCAL_PATH变量外其它缓存变量

LOCAL_MODULE 此变量表示模块名称

LOCAL_SRC_FILES 此变量包含构建系统生成模块时所用的源文件列表

LOCAL_MODULE_SUFFIX 此变量表示后缀名

LOCAL_PREBUILT_JNI_LIBS 只适用编译第三方app,且app依赖了so库 *

LOCAL_MULTILIB 此变量表示编译32位还是64位架构

LOCAL_MANIFEST_PACKAGE_NAME 本地清单包名

LOCAL_REQUIRED_MODULES 指定模块运行所依赖的模块

LOCAL_SDK_VERSION 指定编译sdk版本

include $(BUILD_PREBUILT) 该指令编译目标apk

include ( c a l l a l l − m a k e f i l e s − u n d e r , (call all-makefiles-under, (callallmakefilesunder,(LOCAL_PATH))搜索编译该源码目录下所有mk文件

LOCAL_PACKAGE_NAME 此常量表示App应用名称

LOCAL_OVERRIDES_PACKAGES 此常量可以使其它模块不加入编译

LOCAL_PRIVATE_PLATFORM_APIS 设置后,会使用sdk的hide的api来编译,不可以跟LOCAL_SDK_VERSION常量一起,会导致不能访问hide的api而报错

LOCAL_USE_AAPT2 此常量为是否使用aapt2

LOCAL_RESOURCE_DIR 此常量表示Res的路径

LOCAL_STATIC_ANDROID_LIBRARIES 指定依赖的android类库

LOCAL_JAVA_LIBRARIES 指定依赖的共享java类库,只是在编译的时候引用

LOCAL_STATIC_JAVA_LIBRARIES 指定依赖的静态java类库,最终会打包到Apk里

LOCAL_PROGUARD_FLAG_FILES 指定混淆配置

LOCAL_JNI_SHARED_LIBRARIES 编译jni

LOCAL_DEX_PREOPT 此变量设置为false 可以 使整个系统使用提前优化的时候,某个app不使用提前优化

LOCAL_REPLACE_PREBUILT_APK_INSTALLED apk路径

LOCAL_CERTIFICATE 此常量为设置签名
签名的方式:
testkey 普通apk,默认情况下使用,默认为使用apk自己的签名
platform 使用平台签名
shared 使用共享签名,该apk需要和home/contacts进行共享数据
media 使用媒体签名,该apk是media/download系统中的一环

LOCAL_MODULE_PATH 指定最后安装位置,默认等于TARGET_OUT_$(LOCAL_MODULE_CLASS),
可以手动指定,如:
$$(TARGET_OUT)/preload-app 存放位置为 system/preload-app
其中含有几个固定路径写法
TARGET_ROOT_OUT 表示根文件系统
TARGET_OUT 表示system文件系统
TARGET_OUT_DATA 表示data文件系统

LOCAL_MODULE_CLASS 此变量表示 指定模块的类型
一般可以不用定义,如果不定义则 不存放到系统中,会放到obj目录下对应目录中
如果 include $()里的值为BUILD_PREBUILT 则必须定义MODULE_CLASS
其中常用的几种参数及含义与 默认下的LOCAL_MODULE_PATH 配合后存放的位置
ETC ,存放于system/etc
EXECUTABLES 编译可执行文件,存放于system/bin
SHARED_LIBRARIES 定义动态库文件,放于system/lib
JAVA_LIBRARIES 编译jar包,
APPS 编译apk文件,存放于system/app

LOCAL_MODULE_TAGS 此变量表示模块编译模式,一般默认为optional
包含模式有:
optional 该模块所有编译版本下都编译
user 该模块只在user编译版本下才编译
eng 该模块只在eng编译版本下才编译
tests 该模块只在tests编译版本下才编译
项目remake时如果监测到非该编译版本下的编译模式,会报错停止

LOCAL_PROPRIETARY_MODULE 控制生成路径到system/vendor/lib,否则就是system/lib

LOCAL_PRIVILEGED_MODULE 此常量决定了其编译后在的安装位置
设置为true,安装位置为system/priv-app,不设置或设置为false,安装位置为system/app
跟LOCAL_MODULE_PATH一起使用的时候,如果设置true,则LOCAL_PRIVILEGED_MODULE 优先级高,如果设置为false 则LOCAL_MODULE_PATH优先级高

引用第三方java类库

使用方法:
项目下创建libs目录,放入需要导入的jar包
在Android.mk中添加
include $(CLEAR_VARS)

LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := aaa:libs/xxxx.jar

include $(BUILD_MULTI_PREBUILT)

LOCAL_STATIC_JAVA_LIBRARIES := aaaa

BUILD_MULTI_PREBUILT 指令的作用是将静态java类库压缩到.dex文件中

问题一
error: X (java:sdk) should not link to Y (java:platform)
解决办法:
LOCAL_SDK_VERSION 替换成 LOCAL_PRIVATE_PLATFORM_APIS := true

问题二
代码里java文件找不到jar包里的类
解决办法:暂无

android 源码中添加第三方APK Android.mk内容
LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := TestDemo
LOCAL_MODULE_CLASS := APPS
LOCAL_CERTIFICATE := PRESIGNED
LOCAL_SRC_FILES := $(LOCAL_MODULE).apk
include $(BUILD_PREBUILT)

android 源码中以源码形式添加第三方app Android.mk内容

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_PACKAGE_NAME := TestDemo
LOCAL_SDK_VERSION := current
LOCAL_CERTIFICATE := platform
LOCAL_SRC_FILES := $(call all-java-files-under,src)
LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
LOCAL_MODULE_TAGS := optional
LOCAL_USE_AAPT2 := true
LOCAL_STATIC_ANDROID_LIBRARIES :=  \
	androidx.appcompat_appcompat \
	com.google.android.material_material \
	androidx-constraintlayout_constraintlayout 
include $(BUILD_PACKAGE)
include $(call all-makefiles-under,$(LOCAL_PATH))

编译条件语句
ifeq 当条件成立后执行
例:
ifeq($(strip $(TEST)),yes)
xxxx
endif
当TEST 为 yes后才执行xxx代码

ifneq 当条件不成立后执行
例:
ifeq($(strip $(TEST)),yes)
xxxx
endif
当TEST 为 no后才执行xxx代码

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值