1、LOCAL_PATH:= $(callmy-dir)

‘:=’是赋值的意思,LOCAL_PATH 定义了当前模块的相对路径,必须出现在所有的编译模块之前。它用于在开发树中查找源文件。在这个例子中,宏函数’my-dir’, 由编译系统提供,用于返回当前路径(即包含Android.mk file文件的目录)。

2、include $( CLEAR_VARS)

CLEAR_VARS由编译系统提供,指定让GNU MAKEFILE为你清除许多LOCAL_XXX变量(例如 LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES, 等等...),

除LOCAL_PATH 。这是必要的,因为所有的编译控制文件都在同一个GNU MAKE执行环境中,所有的变量都是全局的。

每个编译模块由include $(CLEAR_VARS) 开始,由include $(BUILD_XXX) 结束

3、LOCAL_JACK_ENABLED:=disabled

LOCAL_JACK_ENABLED有三种模式,即分别是disabled,full和incremental。disabled是指关闭JACK编译,使用android old toolchain。full是指全部编译,即每次编译,都会将所有的code全部编译。incremental是指增量编译,即只会编译修改的代码。incremental模式默认是关闭的,需要设置。

不加本行会生成clasess.jack而非clasess.jar。

4、LOCAL_MODULE := helloworld

LOCAL_MODULE变量必须定义,以标识你在Android.mk文件中描述的每个模块。名称必须是唯一的,而且不包含任何空格。注意编译系统会自动产生合适的前缀和后缀,换句话说,一个被命名为'foo'的共享库模块,将会生成'libfoo.so'文件。

5、LOCAL_SRC_FILES := $(call all-subdir-java-files)

定义了本模块编译使用的源文件,采用的是基于LOCAL_PATH的相对路径

6、LOCAL_MODULE_TAGS := optional

LOCAL_MODULE_TAGS :=user eng tests optional

- user: 指该模块只在user版本下才编译

- eng: 指该模块只在eng版本下才编译

- tests: 指该模块只在tests版本下才编译

- optional:指该模块在所有版本下都编译

7、LOCAL_PRIVILEGED_MODULE :=true

LOCAL_PRIVILEGED_MODULE := true 表示app应用在目录/system/priv-app/下

LOCAL_PRIVILEGED_MODULE := false 表示app应用在目录/system/app/下

8、DEVICE_PACKAGE_OVERLAYS := \

device/samsung/avl7580/overlay

‘\’表示连接符,DEVICE_PACKAGE_OVERLAYS可以设定路径,起到的作用就是替换掉原来的目录中的资源,比如图片等等,惟一的要求就是必须建立和原来图片位置相同的路径

有两种不同的overaly目录定义,来影响最终的效果:

PRODUCT_PACKAGE_OVERLAYS: used by a particular product

DEVICE_PACKAGE_OVERLAYS: used several products that share a common device model

如果包含同一资源,那么 PRODUCT_PACKAGE_OVERLAYS 将覆盖 DEVICE_PACKAGE_OVERLAYS

9、LOCAL_STATIC_JAVA_LIBRARIES := android-support-v4 android-support-v13

当前模块依赖的java静态库,这项不是必须的。

include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES := aa
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := aa:libs/aa.jar
include $(BUILD_MULTI_PREBUILT)

10、LOCAL_CERTIFICATE := platform

(1)AndroidManifest.xml的manifest节点中添加 android:sharedUserId=”android.uid.system”,

Android.mk中增加  LOCAL_CERTIFICATE := platform

(2)shared签名:

AndroidManifest.xml的manifest节点中增加android:sharedUserId=”android.uid.shared”,

Android.mk中增加LOCAL_CERTIFICATE := shared

(3)media签名:

AndroidManifest.xml的manifest节点中增加 android:sharedUserId=”android.media”,

Android.mk中增加 LOCAL_CERTIFICATE := media

11、LOCAL_RESOURCE_DIR += \

$(LOCAL_PATH)/res \

$(LOCAL_PATH)/res_p

资源目录

12、include $(BUILD_STATIC_JAVA_LIBRARY)

编译目标 说明
BUILD_HOST_STATIC_LIBRARY 主机上的静态库
BUILD_HOST_SHARED_LIBRARY 主机上的动态库
BUILD_HOST_EXECUTABLE 主机上的可执行文件
BUILD_STATIC_LIBRARY 目标设备上的静态库
BUILD_SHARED_LIBRARY 目标设备上的动态库
BUILD_EXECUTABLE 目标设备上的可执行文件
BUILD_JAVA_LIBRARY JAVA库
BUILD_STATIC_JAVA_LIBRARY 静态JAVA库
BUILD_HOST_JAVA_LIBRARY 主机上的JAVA库
BUILD_PACKAGE APK程序

参考:

Android.mk

Android.mk文件学习相关推荐

  1. Android.mk文件语法规范

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

  2. 安卓编译android.mk,详解安卓系统中的Android.mk文件

    概述    Android.mk文件用来向编译系统描述如何编译你的源代码.更确切地说,该文件其实就是一个小型的Makefile.由于该文件会被NDK的编译工具解析多次,因此应该尽量减少源码中声明变量, ...

  3. Android.mk 入门学习

    我们还是采用RK3399的开发板来学习Android.mk NOTED: 在编译之前,我们需要source & lunch source build/envsetup.sh lunch rk3 ...

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

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

  5. Android.mk 文件语法详解

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

  6. Android.mk文件编写

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

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

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

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

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

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

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

最新文章

  1. tl r402路由器设置_家里新安装宽带如何连接路由器 家里新安装宽带连接路由器方法【详解】...
  2. java二维矩阵怎么进行转置_矩阵求导的本质与分子布局、分母布局的本质(矩阵求导——本质篇)...
  3. CodeForces - 1304D Shortest and Longest LIS(构造+贪心)
  4. 升级鸿蒙系统照片,华为鸿蒙系统照片出炉,神似EMUI,海内外花粉沸腾了
  5. xcode8 升级后注释快捷键不能使用的解决方法
  6. jQuery 属性选择器
  7. 关于Java List 的remove(index)方法
  8. 开发一款高端大气上档次的android应用需要必备的知识——记于2013年末
  9. 三维点云学习(3)4-Expectation-Maximization (EM)
  10. 前缀列表技术原理和实验(华为设备)
  11. 全表行转列——动态SQL
  12. 麦肯锡:数字化转型四步法!
  13. 数据库左连接、右连接
  14. Excel 常用函数
  15. warcraft3Viewer模型导入到3dsmax到Unity
  16. matlab命令行运行,命令行运行matlab
  17. 倒计时 妙味课堂_妙味课堂——JavaScript基础课程笔记
  18. excel只显示公式,不显示结果
  19. CocosCreator接入穿山甲广告2-插屏广告
  20. 【光耦 Normalized...和 CTR 测试条件及测试曲线 解读 : PC817和LTV-1007-TP1-G】

热门文章

  1. 视图类中CMyDoc* GetDocument() const编译时错误:缺少“;”(在“*”的前面)
  2. 【forward方法--深度学习】
  3. 怎么看懂linux命令
  4. NOIP2018提高组游记
  5. Vue超好玩的新特性:在CSS中使用JS变量
  6. SpringBoot - 定时任务入门(@Scheduled )详解
  7. 人生苦短我用python
  8. SilverLight教程
  9. 《P2P网贷》导图笔记
  10. !false==fasle