AOSP——Android.mk解析

这篇具有很好参考价值的文章主要介绍了AOSP——Android.mk解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Android.mk是什么?

Android.mk是用于控制Android代码的编译流程,用shell编写

Android.mk结构

设置当前路径

除带#的注释,Android.mk第一句话都是

LOCAL_PATH := $(call my-dir)

即将my-dir方法的返回值赋值给LOCAL_PATH,让其等于当前目录,其中的my-dir方法在build/core/defintions.mk中定义,源码如下

###########################################################
## Retrieve the directory of the current makefile
## Must be called before including any other makefile!!
###########################################################

# Figure out where we are.
define my-dir
$(strip \
  $(eval LOCAL_MODULE_MAKEFILE := $$(lastword $$(MAKEFILE_LIST))) \
  $(if $(filter $(BUILD_SYSTEM)/% $(OUT_DIR)/%,$(LOCAL_MODULE_MAKEFILE)), \
    $(error my-dir must be called before including any other makefile.) \
   , \
    $(patsubst %/,%,$(dir $(LOCAL_MODULE_MAKEFILE))) \
   ) \
 )
endef

清空所有LOCAL变量

接下来是

include $(CLEAR_VARS)

CLEAR_VARS的值在/build/core/config.mk,源码如下:

CLEAR_VARS := $(BUILD_SYSTEM)/clear_vars.mk

BUILD_SYSTEM在/build/core/cleanbuild.mk及/build/core/config.mk中均有定义,源码如下:

BUILD_SYSTEM := $(TOPDIR)build/core

TOPDIR为空,所以BUILD_SYSTEM:=build/core,故CLEAR_VARS=build/core/clear_vars.mk,其内容为清空所有LOCAL变量,部分源码如下:

###########################################################
## Clear out values of all variables used by rule templates.
###########################################################

# '',true
LOCAL_2ND_ARCH_VAR_PREFIX:=
LOCAL_32_BIT_ONLY:=
LOCAL_AAPT2_ONLY:=
LOCAL_AAPT_FLAGS:=
LOCAL_AAPT_INCLUDE_ALL_RESOURCES:=
LOCAL_AAPT_NAMESPACES:=
LOCAL_ADDITIONAL_CERTIFICATES:=
LOCAL_ADDITIONAL_CHECKED_MODULE:=
LOCAL_ADDITIONAL_DEPENDENCIES:=
LOCAL_ADDITIONAL_HTML_DIR:=
LOCAL_ADDITIONAL_JAVA_DIR:=

重新设置LOCAL变量

接下来是为自己的代码设置编译流程,常用的变量及取值有

变量 取值及意义
LOCAL_PACKAGE_NAME 包名,自定义
LOCAL_MODULE_TAGS optional
LOCAL_SRC_FILES $(call all-java-files-under, src)
LOCAL_STATIC_JAVA_LIBRARIES android-support-v4
LOCAL_JAVA_LIBRARIES
LOCAL_CERTIFICATE platform
LOCAL_SDK_VERSION current
LOCAL_PRODUCT_MODULE true
LOCAL_OVERRIDES_PACKAGES
LOCAL_STATIC_ANDROID_LIBRARIES \
android-support-v7-appcompat \
android-support-v7-recyclerview

选择构建方式

接下来是为自己的代码设置构建方法,常用的构建方式及意义有

构建方式 意义
include $(BUILD_PACKAGE) 构建为app
BUILD_PACKAGE的值在/build/core/config.mk
BUILD_PACKAGE := $(BUILD_SYSTEM)/package.mk
意为引进build/core/package.mk为程序打包

调用当前目录下的所有mk文件

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

all-makefiles-under方法在在build/core/defintions.mk中定义,源码如下文章来源地址https://www.toymoban.com/news/detail-704479.html

到了这里,关于AOSP——Android.mk解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Android.mk文件编写

    Android.mk 是Android 提供的一种makefile 文件,注意用来编译生成 exe(二进制可执行文件)、so(动态库文件)、a(静态库文件)、jar(jar包) 和 apk 等文件。Android.mk和一个或多个.c的源文件放在同一目录下做为一个模块,通过mm或者mmm命令来编译该模块,生成自己所需的文件,如:二进制的

    2024年02月01日
    浏览(64)
  • Android mk文件

    apk文件和mk文件在同级目录

    2024年01月16日
    浏览(41)
  • Android.mk开发模板

    今天简单写了一个 Android.mk 的示例模板,供初学者参考。 本模板主要给大家示例 Android NDK 开发中的如下几个问题: 如何自动添加需要编译的源文件列表 如何添加第三方静态库、动态库的依赖 如何构造一个完整的NDK工程框架 假设我们的项目依赖 libmath.a, libjson.a, libffmpeg.so 这

    2024年02月11日
    浏览(28)
  • Android AOSP源码编译——AOSP下载(一)

    一、电脑配置 Ubuntu16.04 + 16G,硬盘的大小最好大于300G (我这边是找了个win电脑装了双系统 没有使用虚拟机的方式) 二、基础环境配置 1、安装git 配置git email和name 2、安装依赖工具(需要确认的就一直y就好) 3、安装python 执行 python --version 可以看到ubuntu自带的python版本是Python 2.

    2024年02月13日
    浏览(37)
  • Android AOSP源码编译——AOSP整编(二)

    切换到源码目录下执行下面命令 1、初始化环境 2、选择编译目标 AOSP 预制了很多 Product。这里为了简单我们先不用真机,而是选择模拟器的方式,对于 x86_64 模拟器,我们选择的是 aosp_x86_64-eng。 lunch命令回车后会让你选择编译目标,我们选31(aosp_x86_64-eng) 3、编译 选择好编

    2024年02月13日
    浏览(28)
  • Android.mk 常用模块类型

    生成的是动态库(.so 文件) 生成的是静态库(.a 文件) 用于编译 Java 代码并生成可执行的 Java 程序(.jar 文件) 用于编译 C/C++ 代码并生成可执行的 C/C++ 程序

    2024年02月02日
    浏览(26)
  • Android studio导入Android源码(AOSP Android 14)

    1. 完整编译AOSP源码 有些java文件是在编译过程中动态生成的,需要完整编译一遍,源码的依赖才能完整。 2. 生成IDE导入的工程文件 执行完成后,在AOSP根目录下生成文件: 3. 导入前,编辑工程文件 (这步很重要,影响代码的加载速度和跳转) 编辑android.iml文件,需要修改2部

    2024年02月10日
    浏览(32)
  • Android.mk和Android.bp的区别和转换详解

    简单的说: Android.mk和Android.bp都是用来编译出类库.jar,应用文件.apk,动态库.so,静态库.a等等作用。 Android.mk就是一个GNU make语法的脚本文件。 Android.bp文件是Android 7.0及更高版本中引入的一种构建脚本文件,是使用Starlark语法编写的,它是一种基于Python的轻量级脚本语言。 他们

    2024年04月28日
    浏览(44)
  • AOSP 源码编译android 12

    目录 一、python安装      a. python2安装     b. python3安装 二、repo管理多个git    a.第一步,   新建一个空白文件夹保存repo引导文件,并包含你的路径    b.下载启动器  c.将git-repo中的repo文件复制到 1 创建的.bin目录中  d.修改权限 e. 执行版本检查 三、初始化工程   a.执行创建文

    2024年01月16日
    浏览(36)
  • AndroidStudio导入Android AOSP源码

    编译完成后,就可以在Android源码的根目录下看到android.iml和android.ipr文件了。 打开android.iml文件看看,默认把几乎所有的源码都导入了,只有几个文件夹被排除在外,工程将会非常大,而且会很耗时间。 然而我们并不关心这么多的源码,我们可以自己加excludeFolder标签,把自己

    2024年02月01日
    浏览(79)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包