1、 设置当前模块的编译路径为当前文件夹路径

LOCAL_PATH := $(call my-dir)

2、清理(可能由其他模块设置过的)编译环境中用到的变量

include $(CLEAR_VARS)

3、模块编译变量

变量                          用途LOCAL_SRC_FILES               当前模块包含的源代码文件LOCAL_MODULE                  当前模块的名称,这个名称应当是唯一的,模块间的依赖关系就是通过这个名称来引用的LOCAL_C_INCLUDES              C/C++ 语言需要的头文件的路径LOCAL_STATIC_LIBRARIES        当前模块在静态编译时,需要的静态库LOCAL_SHARED_LIBRARIES        当前模块在运行时依赖的动态库LOCAL_CFLAGS                  C/C++编译器的参数include $(BUILD_EXECUTABLE)# -I$(LOCAL_C_INCLUDES)       指定头文件搜索路径# -l$(LOCAL_SHARED_LIBRARIES) 指令链接的动态库gcc $(LOCAL_CFLAGS) $(LOCAL_SRC_FILES) -o $(LOCAL_MODULE) -I$(LOCAL_C_INCLUDES) $(LOCAL_STATIC_LIBRARIES) -l$(LOCAL_SHARED_LIBRARIES) LOCAL_JAVA_LIBRARIES          当前模块依赖的Java共享库LOCAL_STATIC_JAVA_LIBRARIES   当前模块依赖的Java静态库LOCAL_PACKAGE_NAME            当前模块的APK应用的名称LOCAL_CERTIFICATE             签署当前应用的证书名称LOCAL_PROPRIETARY_MODULE      为true时,其结果放在system/vendor目录下,为false时,其结果放在system目录下LOCAL_PRELINK_MODULE          是各种Linux架构上用于减少程序加载时间、缩短系统启动时间和加快应用程序启动的很受欢迎的一个工具LOCAL_MODULE_TAGS             当前模块所包含的标签,Android.mk的必选,一个模块可以包含多个标签标签的值可能是debug, eng, tests, samples 或 optionaluser: 指该模块只在user版本下才编译eng: 指该模块只在eng版本下才编译tests: 指该模块只在tests版本下才编译optional:指该模块在所有版本下都编译build/core/definitions.mk通常会用下面函数获取上面环境变量的值:提供配置编译需要的函数$(call my-dir)                        获取当前文件夹路径$(call all-subdir-java-files)         获取当前目录子目录下所有的java源代码文件$(call all-java-files-under, 目录)    获取指定目录下的所有Java文件$(call all-c-files-under, 目录)       获取指定目录下的所有C语言文件$(call all-Iaidl-files-under, 目录)   获取指定目录下的所有 AIDL 文件$(call all-makefiles-under, 目录)     获取指定目录下的所有Make文件

4、模块类型

BUILD_EXECUTABLE              编译目标机上的可执行文件(ELF)
BUILD_STATIC_LIBRARY          编译目标机上的静态库(*.a 编译时使用)
BUILD_SHARED_LIBRARY          编译目标机上的动态库文件(*.so)
BUILD_JAVA_LIBRARY            编译目标机上的java动态库
BUILD_STATIC_JAVA_LIBRARY     编译目标机上的java静态库
BUILD_PACKAGE                 编译目标机上的java包

5、几个常见的模板
①编译可执行程序的模板

LOCAL_PATH := $(call my-dir)
#include $(CLEAR_VARS)
LOCAL_SRC_FILES:= main.c
LOCAL_MODULE:= test_exe
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_EXECUTABLE)(菜鸟级别解释::=是赋值的意思,$是引用某变量的值)LOCAL_SRC_FILES中加入源文件路径,LOCAL_C_INCLUDES 中加入所需要包含的头文件路径,LOCAL_STATIC_LIBRARIES加入所需要链接的静态库(*.a)的名称,LOCAL_SHARED_LIBRARIES中加入所需要链接的动态库(*.so)的名称,LOCAL_MODULE表示模块最终的名称,BUILD_EXECUTABLE表示以一个可执行程序的方式进行编译。

②编译静态库的模板

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \helloworld.c
LOCAL_MODULE:= libtest_static
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_STATIC_LIBRARY)
一般的和上面相似,BUILD_STATIC_LIBRARY表示编译一个静态库。

③编译动态库的模板

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES:= \helloworld.c
LOCAL_MODULE:= libtest_shared
TARGET_PRELINK_MODULES := false
#LOCAL_C_INCLUDES :=
#LOCAL_STATIC_LIBRARIES :=
#LOCAL_SHARED_LIBRARIES :=
include $(BUILD_SHARED_LIBRARY)一般的和上面相似,BUILD_SHARED_LIBRARY表示编译一个共享库。
以上三者的生成结果分别在如下,generic依具体target会变:
out/target/product/xxxx/obj/EXECUTABLE
out/target/product/xxxxx/obj/STATIC_LIBRARY
out/target/product/xxxx/obj/SHARED_LIBRARY 每个模块的目标文件夹分别为:1.可执行程序:XXX_intermediates2.静态库:XXX_static_intermediates3.动态库:XXX_shared_intermediates

④编译一个简单apk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_SRC_FILES := $(call all-subdir-java-files)
LOCAL_PACKAGE_NAME := LocalPackage
include $(BUILD_PACKAGE)

⑤Android Studio项目在源码中Android.mk

LOCAL_PATH := $(call my-dir)include $(CLEAR_VARS)
LOCAL_MODULE_TAGS := optional
LOCAL_CERTIFICATE := platform
LOCAL_PACKAGE_NAME := Demo
LOCAL_DEX_PREOPT = true
LOCAL_MULTILIB :=bothsrc_dir = app/src/main/java
res_dir = app/src/main/res
libs_dir = app/libsLOCAL_MANIFEST_FILE := app/src/main/AndroidManifest.xml  LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dir))
#LOCAL_SRC_FILES := $(call all-subdir-java-files)LOCAL_STATIC_JAVA_LIBRARIES := \android-support-v4 \android-support-v7-appcompat \android-support-v7-cardview \gson \okio \okhttp \android-support-v7-recyclerview \android-support-v7-paletteLOCAL_RESOURCE_DIR := \$(LOCAL_PATH)/$(res_dir) \frameworks/support/v7/appcompat/res \frameworks/support/v7/cardview/res \frameworks/support/v7/recyclerview/res LOCAL_AAPT_FLAGS := \--auto-add-overlay \--extra-packages android.support.v7.appcompat \--extra-packages android.support.v7.cardview \--extra-packages android.support.v7.recyclerviewinclude $(BUILD_PACKAGE)include $(CLEAR_VARS)
# Use the folloing include to make our test apk.
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := gson:app/libs/gson-2.7.jar \okio:app/libs/okio-1.6.0.jar \okhttp:app/libs/okhttp-3.2.0.jar
include $(BUILD_MULTI_PREBUILT)##################################################
include $(call all-makefiles-under,$(LOCAL_PATH))

Android.mk文件总结相关推荐

  1. Android.mk文件语法规范

    序言: ------------- 此文档旨在描述Android.mk文件的语法,Android.mk文件为Android NDK(原生开发)描述了你C/C++源文件. 为了明白下面的内容,你必须已经 ...

  2. Android.mk文件语法规范及使用模板 (转载)

    2019独角兽企业重金招聘Python工程师标准>>> http://blogold.chinaunix.net/u3/99423/showart_2206760.html Andr ...

  3. Android.mk 文件语法详解

    0. Android.mk简介: Android.mk文件用来告知NDK Build 系统关于Source的信息. Android.mk将是GNU Makefile的一部分,且将被Build Syst ...

  4. Android.mk文件编写

    Android.mk文件编写的例子: LOCAL_PATH := $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := hello LOCAL_SR ...

  5. 02_JNI中Java代码调用C代码,Android中使用log库打印日志,javah命令的使用,Android.mk文件的编写,交叉编译

     1  编写以下案例(下面的三个按钮都调用了底层的C语言): 项目案例的代码结构如下: 2 编写DataProvider的代码: package com.example.ndkpassdata; ...

  6. android ndk 多线程mk,NDK开发之Android.mk文件编写

    8种机械键盘轴体对比 本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选? 现在我们把android稍微写复杂些.在项目根目录下创建一个lib1文件夹 结构如图: test10.h和test11. ...

  7. android ndk 文件管理,Android NDK开发指南(二)Android.mk文件

    http://www.cnblogs.com/yaozhongxiao/archive/2012/03/06/2382225.html 1.  概述 Android.mk文件是用来描述build sy ...

  8. android.mk 强制编译,android.mk文件的编译

    android编译系统的makefile文件Android.mk写法如下 (1)   Android.mk文件首先需要指定LOCAL_PATH变量,用于查找源文件.由于一般情况下 Android.mk ...

  9. android.mk if else,gradle - 如何在Android Studio中使用我自己的Android.mk文件 - SO中文参考 - www.soinside.com...

    [我正在Android.mk文件中定义一些变量(我正在为编译器传递一些标志),但是每次构建项目时,Android.mk都会被覆盖.我假设Gradle是负责任的,我应该去那里看看吗? 如何使用我自己的A ...

  10. Android.mk文件官方使用说明

    本页介绍了 ndk-build 所使用的 Android.mk 编译文件的语法. 概览 Android.mk 文件位于项目 jni/ 目录的子目录中,用于向编译系统描述源文件和共享库.它实际上是编译系 ...

最新文章

  1. OpenCV 笔记(01)— OpenCV 概念、整体架构、各模块主要功能
  2. 如何手动重启Jenkins?
  3. 用一维数组统计五个人的成绩中的最大值最小值平均值_昨天为了整理这份教程,我放弃了参加一个几亿人的大项目。...
  4. NYOJ 士兵杀敌(二) 树状数组
  5. 1、虚拟机内存管理、运行时数据区、线程共享区、Java堆、新生代、老年代、Eden区域分配、方法区、线程独占区、虚拟机栈
  6. Qt应用程序发布:Qt应用程序添加版本版权生产商等信息
  7. _int64_在Linux对应对文件,linux下32位机与64位机基本数据类型长度对比
  8. Asp.Net 控件生命周期
  9. 看完Mate 10拍下的精美空中照片后,你是否也想坐次飞机试拍下?
  10. H5安卓下载以及IOS跳转AppStore下载App
  11. 世嘉MD游戏开发进阶篇【二】:C语言实现有限状态机
  12. TP50 TP90 TP99 TP999 详细说明
  13. base64上传文件,后端接受处理(四)
  14. 反斗联盟不显示服务器,《反斗联盟》关服公告
  15. [gdc13]古墓丽影DirectX11技术
  16. swoole开启了守护进程如何关掉
  17. 手指静脉图像分类识别
  18. XMind (2022)新版思维导图新增功能介绍
  19. make错误 redis6_redis安装make失败,make[1]: *** [adlist.o] Error 127....
  20. html只选择年份,ant design vue 日期选择器只选择年份

热门文章

  1. 【北京】VMware vForum 2012 开发者盛会(11月20-21日)
  2. Gartner 2020 战略技术趋势- Hyper 自动化
  3. 显示器是计算机系统的什么设备,显示设备
  4. linux 内核 fuzz,fuzz技术和漏洞挖掘
  5. NUnit基本使用方法
  6. 【论文阅读】Federated Learning on Non-IID Data Silos: An Experimental Study
  7. 利用Python递归下载文件夹下所有文件
  8. 社区发现评价指标Q和NMI讲解、代码实现
  9. linux看门狗脚本,linux 看门狗
  10. linux文件内上下移动,Linux有3个查看文件的命令,如果希望再查看文件内容过程中用光标可以上下移动来查看文件内容,则符合要求的命令是( )?...