设为首页 加入收藏

TOP

Android.mk语法说明(android ndk开发)
2014-11-24 11:39:41 来源: 作者: 【 】 浏览:0
Tags:Android.mk 语法 说明 android ndk 开发

Android.mk文件是用来描述你想要编译进系统的资源的。


这个文件的语法允许你把你的资源打包进“modules”。Module应该是下面module中的一种:


- a static library


- a shared library


只有shared library会被打包到你的应用程序中,尽管static library也能用来生产shared library。


你可以在一个Android.mk中定义多个module,你也可以在几个module中使用相同的资源文件。



编译系统会为你处理一些细节。例如,你不需要在你的Android.mk文件中列出你的头文件或是你的文件之间明确的依赖关系。NDK编译系统会自动帮你处理。


这同时意味着,当升级到新版本的NDK时,你不需要动你的Android.mk文件就可以使用心得toolchain/platform支持。


注意,用在Android.mk文件中的语法和整个的android平台的开源资源语法是不同的。编译系统实现了对他们不同的使用,这是故意这样设计的,用来允许应用开发人员更容易地重用外部库资源代码。



一个简单的例子:


在语法详细说明之前,让我们先来看一个简单的“hello-jni”例子,文件在$NDK/samples/hello-jni下:


在这我们可以看到:


-src目录下包含这个简单的android工程的一个java源文件


-jni目录下包含了这个例子的本地源文件


这个源文件实现了一个简单的共享库,这个共享库实现了一个想vm应用程序返回一个字符串的本地方法。


-Android.mk文件向NDK编译系统描述了一个共享库。它的内容如下:


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 变量开始。它用来在你的工程树形目录下定位你的资源文件的位置。在这个例子中,那个编译系统提供的“my-dir”宏函数用来返回当前目录的路径(Android.mk文件所在的目录)。


include $(CLEAR_VARS)


编译系统提供的一个指向特殊的GNU Makefile文件的CLEAR_VARS变量将为你清理很多LOCAL_PATH中的LOCAL_XXX变量(例如: LOCAL_MODULE, LOCAL_SRC_FILES, LOCAL_STATIC_LIBRARIES等等)。这是有必要的,因为所有的编译控制文件都会在一个单独的GNU Make可执行上下文中被解析,在这里所有的变量都是全局的。


LOCAL_MODULE := hello-jni


用来标识分布在Android.mk文件中的每一个module的LOCAL_MODULE变量必须定义。名字必须是唯一的而且不能有空格。


注意,编译系统会给相应的生成文件自动地添加适当的前缀和后缀。换句话说,一个命名为“foo”的共享库module将生成名为“libfoo.so”的文件。


重点注意:


如果你的module命名为“libfoo”,编译系统不会为你添加另外一个“lib”前缀,还是会生成一个“libfoo.so”的文件而已。这个为了支持你需要使用的android平台资源的Android.mk文件。


LOCAL_SRC_FILES := hello-jni.c


LOCAL_SRC_FILES变量必须包含一个将要被编译和汇编进module的一个C/C++资源文件列表。注意你不需要列出头文件和包含文件,因为编译系统会自动帮你计算依赖关系;仅仅需要列出直接传递给编译器的资源文件就可以了。


注意:默认的C++资源文件的扩展名是“.cpp”。然而可以通过定义LOCAL_DEFAULT_CPP_EXTENSION变量来指定一个不同的扩展名。不要忘记最开始的dot(例如:.cxx是可以的,但是cxx是不行的)。


include $(BUILD_SHARED_LIBRARY)


BUILD_SHARED_LIBRARY是编译系统提供的一个指向GNU Makefile脚本的变量,它负责收集从最近的include $(CLEAR_VARS)' 变量开始的所有内定义的 LOCAL_XXX变量的信息,然后决定哪些需要编译以及怎样编译。BUILD_STATIC_LIBRARY变量可以生成一个static library。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇利用Android NDK开发OpenGLES如何.. 下一篇Eclipse下搭建C/C++开发环境

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Linux_百度百科 (2025-12-26 12:51:52)
·Shell 流程控制 | 菜 (2025-12-26 12:51:49)
·TCP/UDP协议_百度百科 (2025-12-26 12:20:11)
·什么是TCP和UDP协议 (2025-12-26 12:20:09)
·TCP和UDP详解 (非常 (2025-12-26 12:20:06)