Android MK 简介(一)

news/2024/8/26 10:08:40

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

Android.mk简介:

Android.mk文件用来告知NDK Build 系统关于Source的信息。 Android.mk将是GNU Makefile的一部分,且将被Build System解析一次或多次。所以,请尽量少的在Android.mk中声明变量,也不要假定任何东西不会在解析过程中定义。

Android.mk文件语法允许我们将Source打包成一个"modules". modules可以是:
静态库
动态库。

只有动态库可以被 install/copy到应用程序包(APK). 静态库则可以被链接入动态库。
可以在一个Android.mk中定义一个或多个modules. 也可以将同一份source 加进多个modules.

Build System帮我们处理了很多细节而不需要我们再关心。例如:你不需要在Android.mk中列出头文件和外部依赖文件。NDK Build System自动帮我们提供这些信息。这也意味着,当用户升级NDK后,你将可以受益于新的toolchain/platform而不必再去修改Android.mk.

Android.mk语法:

首先看一个最简单的Android.mk的例子:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES := hello-jni.c

include $(BUILD_SHARED_LIBRARY)

讲解如下:

LOCAL_PATH := $(call my-dir) 
每个Android.mk文件必须以定义LOCAL_PATH为开始。它用于在开发tree中查找源文件。
宏my-dir 则由Build System提供。返回包含Android.mk的目录路径。

include $(CLEAR_VARS) 
CLEAR_VARS 变量由Build System提供。并指向一个指定的GNU Makefile,由它负责清理很多LOCAL_xxx.
例如:LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等。但不清理LOCAL_PATH. 这个清理动作是必须的,因为所有的编译控制文件由同一个GNU Make解析和执行,其变量是全局的。所以清理后才能避免相互影响。


LOCAL_MODULE    := hello-jni 
LOCAL_MODULE模块必须定义,以表示Android.mk中的每一个模块。名字必须唯一且不包含空格。Build System会自动添加适当的前缀和后缀。例如,foo,要产生动态库,则生成libfoo.so.
但请注意:如果模块名被定为:libfoo.则生成libfoo.so. 不再加前缀。

LOCAL_SRC_FILES := hello-jni.c 
LOCAL_SRC_FILES变量必须包含将要打包如模块的C/C++ 源码。不必列出头文件,build System 会自动帮我们找出依赖文件。
缺省的C++源码的扩展名为.cpp. 也可以修改,通过LOCAL_CPP_EXTENSION。


include $(BUILD_SHARED_LIBRARY) 
BUILD_SHARED_LIBRARY:是Build System提供的一个变量,指向一个GNU Makefile Script。它负责收集自从上次调用 include $(CLEAR_VARS)  后的所有LOCAL_XXX信息。并决定编译为什么。

BUILD_STATIC_LIBRARY:编译为静态库。
BUILD_SHARED_LIBRARY :编译为动态库
BUILD_EXECUTABLE:编译为Native C可执行程序

未完 下篇将介绍NDK Build System

转载于:https://my.oschina.net/caipeng/blog/1827892


http://www.niftyadmin.cn/n/3723647.html

相关文章

springmvc基础(一)

1、创建动态的web项目 2、导入springmvc需要的jar包 3、配置web.xml文件 4、写springmvc的配置文件 5、创建一个类(控制层) 6、简化web.xml配置文件的写法 <!-- 配置 DispatcherServlet --> <servlet> <servlet-name>dispatcherServlet</servlet-name>…

小将的逆袭:一个90后谈脑残体

编者按&#xff1a;在批驳脑残体运动中&#xff0c;不妨也听听90后的声音。关于“脑残体”&#xff0c;我忍无可忍。为什么这么快删&#xff1f;心虚吗&#xff1f;搞清楚&#xff0c;你们发明的orz otl 囧rz这样的符号在70后、60后眼里才是真正的火星文&#xff0c;才是真正的…

ES6与CommonJS中的模块处理

ES6和CommonJS都有自己的一套处理模块化代码的措施&#xff0c;即JS文件之间的相互引用。 为了方便两种方式的测试&#xff0c;使用nodejs的环境进行测试 CommonJS的模块处理 使用require来引入其他模块的代码&#xff0c;使用module.exports来引出 // exportDemo.js count 1;…

通汇手机为何卖得那么红火

通汇手机连锁去年销量又高居粤西地区榜首 通汇手机为何卖得那么红火 今年1月&#xff0c;国内权威调查机构赛诺公司发布国内各地级市去年行货手机销售相关数据&#xff0c;茂名地区2005年10月份的行货手机总销量约为13500台&#xff0c;其中&#xff0c;通汇手机连锁当月份销量…

JS中变量名和函数名重名

2019独角兽企业重金招聘Python工程师标准>>> js是弱类型语言&#xff0c;所以变量声明这块肯定会有怪异的问题。 var a100; function a(){   console.log(a); } a();执行结果是&#xff1a; Uncaught TypeError: a is not a functionat <anonymous>:5:1看…

Delphi控制Excel

(一) 使用动态创建的方法首先创建 Excel 对象&#xff0c;使用ComObj:var ExcelApp: Variant;ExcelApp : CreateOleObject( Excel.Application );1) 显示当前窗口&#xff1a;ExcelApp.Visible : True;2) 更改 Excel 标题栏&#xff1a;ExcelApp.Caption : 应用程序调用 Micros…

Access安全吗?Access安全性之QA详解

Access安全吗&#xff1f;Access安全性之QA详解作者&#xff1a;Access911日期&#xff1a;2001-04-03原文地址&#xff1a;http://access911.net/old/study/a_oth002.htm 在写这篇文章前首先要感谢网友&#xff1a;松木、zengwb、秋天、4432&#xff0c;谢谢他们围绕Access安全…

【很好,很和谐】蒙骗了CCTV 人民网 凤凰网 网易 新浪的 特大假新闻 学生网站系统 007OS 取代Windows操作系统

事态发展 &#xff1a;假新闻 已经被各大媒体转载 007os相关新闻: 大三学生研发软件卖200万元成富豪(图)       cctv 学生所创办网站被亿聚网以200万价格收购(图) 央视国际 大学生研发新计算机操作系统亿聚200万收购    人民网 亿聚网200万收购华工学生个人网站007os …