设为首页 加入收藏

TOP

2.4.1 Android.mk(1)
2014-07-23 20:30:28 来源: 作者: 【 】 浏览:109
Tags:2.4.1 Android.mk

2.4.1  Android.mk(1)

Android.mk是一个向Android NDK构建系统描述NDK项目的GUN Makefile片段。它是每一个NDK项目的必备组件。构建系统希望它出现在jni子目录中。在Eclipse的Project Explorer中,双击Android.mk文件在编辑视图中打开它。程序清单2-1显示了hello-jni项目中Android.mk文件的内容。

程序清单2-1  hello-jni项目下Android.mk文件的内容

  1. # Copyright (C) 2009 The Android Open Source Project  
  2. #  
  3. # Licensed under the Apache License, Version 2.0 (the "License");  
  4. # you may not use this file except in compliance with the License.  
  5. # You may obtain a copy of the License at  
  6. #  
  7. #       http://www.apache.org/licenses/LICENSE-2.0  
  8. #  
  9. # Unless required by applicable law or agreed to in writing, software  
  10. # distributed under the License is distributed on an "AS IS" BASIS,  
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.  
  12. # See the License for the specific language governing permissions and  
  13. # limitations under the License.  
  14. #  
  15. LOCAL_PATH := $(call my-dir)  
  16.  
  17. include $(CLEAR_VARS)  
  18.  
  19. LOCAL_MODULE :hello-jni  
  20. LOCAL_SRC_FILES :hello-jni.c  
  21.  
  22. include $(BUILD_SHARED_LIBRARY) 

为了更好地理解它的句法,我们逐行分析。因为这个是一个GUN Makefile片段,所以它的句法和其他Makefile是一样的。每行都包含一个单独的指令,以“#”开头的是注释行,GUN Make 工具不处理它们。根据命名规范,变量名要大写。

注释块后的第一条指令是用来定义LOCAL_PATH变量的。根据Android构建系统的要求,Android.mk文档必须以LOCAL_PATH变量的定义开头。

  1. LOCAL_PATH :=$(call my-dir) 

Android构建系统利用LOCAL_PATH来定位源文件。因为将该变量设置为硬编码值并不合适,所以Android构建系统提供了一个名为my-dir的宏功能。通过将该变量设置为my-dir 宏功能的返回值,可以将其放在当前目录下。

Android构建系统将CLEAR_VARS变量设置为clear-vars.mk片段的位置。包含Makefile片段可以清除除了LOCAL_PATH以外的LOCAL_变量,例如LOCAL_MODULE与LOCAL_SRC_FILES等。

  1. Include $(CLEAR_VARS) 

这样做是因为Android构建系统在单次执行中解析多个构建文件和模块定义,而LOCAL_是全局变量。清除它们可以避免冲突,每一个原生组件被称为一个模块。

LOCAL_MODULE变量用来给这些模块设定一个唯一的名称。下面的代码将该模块的名称设为hello-jni:

  1. LOCAL_MODULE  :hello-jni 

因为模块名称也被用于给构建过程所生成的文件命名,所以构建系统给该文件添加了适当的前缀和后缀。本例中,hello-jni模块会生成一个共享库文件且构建系统会将它命名为libhello-jni.so。

用LOCAL_SRC_FILES变量定义用来建立和组装这个模块的源文件列表。

  1. LOCAL_SRC_FILES :hello-jni.c 

这里,hello-jni模块只由一个源文件生成,而LOCAL_SRC_FILES变量可以包含用空格分开的多个源文件名。

至此,Android.mk文件中定义的构建系统变量简单描述了原生项目。编译和生成实际模块的构建系统还需要包含合适的构建系统片段,具体需要包含哪些片段取决于想要生成模块的类型。

1. 构建共享库

为了建立可供主应用程序使用的模块,必须将该模块变成共享库。Android NDK构建系统将BUILD_SHARED_LIBRARY变量设置成build-shared-library.mk文件的保存位置。该Makefile片段包含了将源文件构建和组装成共享库的必要过程:

  1. include  $(BUILD_SHARED_LIBRARY) 

hello-jni是一个简单的模块;然而,除非你的模块需要特殊处理,否则Android.mk文档将会包含一模一样的流程和指令。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:342347198

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇2.3.6 检测Android NDK项目的结构 下一篇2.4.1 Android.mk(2)

评论

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

·About - Redis (2025-12-26 08:20:56)
·Redis: A Comprehens (2025-12-26 08:20:53)
·Redis - The Real-ti (2025-12-26 08:20:50)
·Bash 脚本教程——Li (2025-12-26 07:53:35)
·实战篇!Linux shell (2025-12-26 07:53:32)