Android.mk文件简单分析

一个Android.mk文件用来向编译系统描写叙述须要编译的源码。详细来说:该文件是GNUMakefile的一小部分。会被编译系统解析一次或多次。

能够在每个Android.mk中定义一个或多个模块,也能够在几个模块中使用同一个源码文件。

每一个模块属下列类型之中的一个:

1)APK程序。一般的Android程序,编译打包生成apk文件

2)JAVA库,java类库,编译打包生成jar文件

3)  C\C++应用程序,可运行的C\C++应用程序

4)C\C++静态库,编译生成C\C++静态库,并打包成.a文件

5)C\C++共享库, 编译生成共享库(动态链接库),并打包成.so, 有且仅仅有共享库才干被安装/拷贝到应用软件(APK)包中。

一个简单的样例



一个简单的"hello world",比方以下的文件:

sources/helloworld/helloworld.c

sources/helloworld/Android.mk

对应的Android.mk文件会像以下这样:

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := helloworld
LOCAL_SRC_FILES := helloworld.c
include $(BUILD_SHARED_LIBRARY)



简单说明:

1。LOCAL_PATH := $(call my-dir)。一个Android.mk
file首先必须定义好LOCAL_PATH变量。它用于在开发树中查找源文件。在这个样例中,宏函数‘my-dir’,由编译系统提供。用于返回当前路径(即包括Android.mk文件的文件夹)。

2,include $( CLEAR_VARS)。CLEAR_VARS由编译系统提供((能够在
android 安装文件夹下的/build/core/config.mk文件看到其定义,为 CLEAR_VARS:=$(BUILD_SYSTEM)/clear_vars.mk)),指定让GNU
MAKEFILE为你清除很多LOCAL_XXX变量(比如 LOCAL_MODULE,LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES,
等等...),除LOCAL_PATH。这是必要的,由于全部的编译控制文件都在同一个GNU MAKE运行环境中。全部的变量都是全局的。

3,LOCAL_MODULE := helloworld,LOCAL_MODULE变量必须定义,以标识你在Android.mk文件里描写叙述的每一个模块。名称必须是唯一的,并且不包括不论什么空格。

注意编译系统会自己主动产生合适的前缀和后缀,换句话说。一个被命名为'foo'的共享库模块。将会生成'libfoo.so'文件。

4,LOCAL_SRC_FILES := helloworld.c。LOCAL_SRC_FILES变量必须包括将要编译打包进模块中的C或C++源码文件。注意,你不用在这里列出头文件和包括文件,由于编译系统将会自己主动为你找出依赖型的文件;只列出直接传递给编译器的源码文件就好。

其它经常使用的还有:



5,LOCAL_C_INCLUDES:可选变量,表示头文件的搜索路径。

默认的头文件的搜索路径是LOCAL_PATH文件夹。

演示样例:LOCAL_C_INCLUDES
:= sources/foo或LOCAL_C_INCLUDES := $(LOCAL_PATH)/../foo

6,TARGET_ARCH:目标 CPU平台的名字;TARGET_PLATFORM:Android.mk解析的时候,目标
Android平台的名字。ARGET_ARCH_ABI:临时仅仅支持两个 value,armeabi和
armeabi-v7a

7。LOCAL_STATIC_LIBRARIES:表示该模块须要使用哪些静态库。以便在编译时进行链接。

8,LOCAL_SHARED_LIBRARIES:  表示模块在执行时要依赖的共享库(动态库),在链接时就须要,以便在生成文件时嵌入其对应的信息。

9,LOCAL_LDLIBS:  编译模块时要使用的附加的链接器选项。

10。LOCAL_ARM_MODE:默认情况下,
arm目标二进制会以 thumb的形式生成(16
位)。你能够通过设置这个变量为 arm假设你希望你的 module是以
32 位指令的形式

11,LOCAL_CFLAGS:  可选的编译器选项,在编译
C 代码文件的时候使用

12,include $(call all-subdir-makefiles):返回一个位于当前'my-dir'路径的子文件夹中的全部Android.mk的列表。

----------------------

       另外:

在Android.mk文件里,还能够指定最后的目标安装路径,用LOCAL_MODULE_PATH和LOCAL_UNSTRIPPED_PATH来指定。不同的文件系统路径用下面的宏进行选择:

TARGET_ROOT_OUT:表示根文件系统out/target/product/generic/root。

TARGET_OUT:表示system文件系统out/target/product/generic/system。

TARGET_OUT_DATA:表示data文件系统out/target/product/generic/data。

OUT_DIR:代码project编译时的out生成文件夹

PRODUCT_OUT:映象生成文件夹

Android.mk文件简单分析的更多相关文章

  1. Android JNI入门第四篇——Android.mk文件分析

    ndroid.mk文件是在使用NDK编译C代码时必须的文件,Android.mk文件中描述了哪些C文件将被编译且指明了如何编译.掌握Android.mk文件的编写主要是掌握其里头将要使用的一些关键字, ...

  2. NDK中android.mk文件的简单介绍和第三方库的调用

    先贴一个样例,然后解释一下: LOCAL_PATH:= $(call my-dir) include $(CLEAR_VARS) LOCAL_MODULE := mydjvuapi SRC_FILE_ ...

  3. Android.mk 文件语法详解

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

  4. Android.mk 文件语法详解 转:http://blog.sina.com.cn/s/blog_602f8770010148ce.html

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

  5. Android JNI的Android.mk文件语法详解

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

  6. Android编译系统(Android.mk文件详解)

    [Android-NDK(Native Development Kit)  docs文档] NDK提供了一系列的工具,帮助开发者快速开发C(或C++)的动态库,并能自动将so和java应用一起打包成a ...

  7. Android.mk文件语法规范 原文

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

  8. Android NDK开发之Android.mk文件

    Android NDK开发指南---Android.mk文件 博客分类: Android NDK开发指南   Android.mk文件语法详述 介绍: ------------ 这篇文档是用来描述你的 ...

  9. 【转】Android.mk文件语法规范(Android.mk File)

    原文网址:http://blog.csdn.net/smfwuxiao/article/details/8530742 1.Android.mk文件概述 Android.mk文件用来告诉NDK编译系统 ...

随机推荐

  1. C语言:奇偶归一猜想

    1.奇偶归一猜想——求多少步归一.(10分) 题目内容: 奇偶归一猜想——对于每一个正整数,如果它是奇数,则对它乘3再加1,如果它是偶数,则对它除以2,如此循环,最终都能够得到1. 如n = 11,得 ...

  2. 两种方法设置nginx并发限制下面的白名单策略

    前言: 今天,公司主站突然出现IDE创建应用没反应的问题,经过预发布环境.非代理环境下面的服务测试,均没有问题,定位问题出现在前端.而我们前端有两层代理,一是青松抗D系统,一是我们自己的nginx代理 ...

  3. MVC图片上传并显示缩略图

    前面已经说了怎么通过MVC来上传文件,那么这次就说说如何上传图片然后显示缩略图,这个的实用性还是比较大.用UpLoad文件夹来保存上传的图片,而Temp文件夹来保存缩略图,前面文件上传部分就不再重复了 ...

  4. 【LOJ】#2065. 「SDOI2016」模式字符串

    题解 按秩合并怎么清数组对我来说真是世纪性难题 我们很熟练地想到点分,如果我们认为某个点到重心是正着读的,由于它的深度固定,它的串也是固定的,我们只要预处理出所有长度正着重复的串,反着重复的串,和它们 ...

  5. 码云Android项目构建注意事项(转载)

    1.ant项目 build.xml必须位于项目根目录. 2.maven项目 pom.xml必须位于项目根目录. 3.gradle项目 由于gradle的配置灵活,我们做了一些规范,并且增加了一下机制来 ...

  6. 20169211《Linux内核原理与分析》第五周作业

    1.在自己的linux系统中搭建实验环境: 2.使用GDB调试内核跟踪启动过程: 3.分析start_kernel的代码. 1.在自己的linux系统中搭建实验环境 1.1 下载linux-3.18. ...

  7. Python之路【第九篇】:面向对象进阶

    阅读目录 一. isinstance(obj,cls)和issubclass(sub,super)二. 反射三. __setattr__,__delattr__,__getattr__四. 二次加工标 ...

  8. MSTP多生成树的配置

    STP的不足 STP协议虽然能够解决环路问题,但是由于网络拓扑收敛较慢,影响了用户通信质量 而且如果网络中的拓扑结构频繁变化,网络也会随之频繁失去连通性,从而导致用户通信频繁中断 RSTP对STP的改 ...

  9. iOS 11开发教程(五)iOS11模拟器介绍二

    iOS 11开发教程(五)iOS11模拟器介绍二 3.iOS11模拟器中设置语言 对于不同国家的人来说,使用到的语言是不一样的.一般情况下iOS11模拟器默认使用的English(英语).对于英文不好 ...

  10. #pragma region、{}

    定义一个region,这个region内部的代码你可以把它折叠起来是用于组织代码的,没有其他特别重要的意义. 而{}定义了作用域 { int a = 0; } { int a = 0; }