Android 和Application mk 详解_第1页
Android 和Application mk 详解_第2页
Android 和Application mk 详解_第3页
Android 和Application mk 详解_第4页
Android 和Application mk 详解_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Android.mk详细资料LOCAL_PATH必须在Android.mk文件的开头。 这是源文件的位置。 $(call my-dir )返回当前目录的路径。Android.mk定义属性方法Android.mk文件是GNU makefile的一部分,用于编译Android程序。因为所有编译文件都在同一GNU MAKE运行环境中运行,而Android.mk中的所有变量都是全局变量。 因此,请尽可能减少对变量的声明,以便在分析过程中不定义任何变量。Android.mk文件可以编译多个模块,每个模块可以是以下类型之一1)APK程序典型的Android程序编译软件包以生成apk文件2)JAVA库java类库。 编译软件包以生成jar文件3)CC应用程序可执行的CC应用程序4)CC静态库编译将生成CC静态库并将其打包到. a文件中5)CC共享库编译会产生共用程式库(动态连结程式库),并将其封装在. so叙述句中,只有共用程式库会安装/复制到应用程式(APK )套件中。可以为每个Android.MK文件定义一个或多个模块,也可以在多个模块中使用相同的模块源文件。 编译系统会为你处理许多详细的问题。 例如,Android.mk不需要列出头文件和依赖关系依靠文件。 编译系统自动处理这些问题。 这是在NDK升级后支持新的toolchain/platform,不需要修改Android.mk文件。注意: NDK的Anroid.mk语法与公开的Android平台的开源代码的Anroid.mk语法相近,但编译系统实现了他们虽然方法不同,但这是有意设计的,程序开发人员可以很容易地重复使用外部库的源代码。在详细说明语法之前,让我们看一个简单的“hello world”示例sources/hello world/hello world.csources/helloworld/Android.mkhelloworld.c是JNI共享库,实现返回hello world字符串的本机方法。 相应的Android.mk文件如下所示LOCAL_PATH :=$(call my-dir )包括$ (clear _ vars )LOCAL_MODULE:=helloworldlocal _ src _ files :=hello world.c包括$ (build _ shared _ library )解释一些行的代码LOCAL_PATH :=$(call my-dir )对于Android.MK文件,必须首先定义LOCAL_PATH变量。 表示这是当前文件的路径。在此示例中,宏函数“my-dir”由编译系统提供,用于返回当前路径(包括Android.MK文件)文件的目录)。包括$ (clear _ vars )CLEAR_VARS是由编译系统提供的(在android安装目录的/build/core/config.mk文件中定义的clear _ vars :=$ (build _ system )/clear _ vars.clear _ vars 指定清除LOCAL_PATH以外的许多LOCAL_XXX变量,如LOCAL_MODULE、LOCAL_SRC_FILES和LOCAL_STATIC_LIBRARIES。 这是因为所有编译的文件都位于同一GNU MAKE运行环境中,并且所有变量都是全局变量所必需的。 因此,必须先将这些变量留空(LOCAL_PATH除外)。 此外,LOCAL_PATH必须为空,因为它必须始终在每个模块中设置。此外,请注意,此语句包含CLEAR_VARS变量指向的脚本文件。LOCAL_MODULE :=helloworld必须定义LOCAL_MODULE变量以标识在Android.mk文件中编写的每个模块。 名称必须是唯一的,并且不包含空格。 请注意,编译系统会自动生成适当的前缀和后缀。 换句话说,名为foo的共享库模块生成libfoo.so文件。注:如果将库命名为“libhelloworld”,则编译系统不会添加lib前缀,也会生成libhelloworld.so。local _ src _ files :=hello world.cLOCAL_SRC_FILES变量必须包含要打包到模块中的c或c源文件。 否如果在此列出头文件和包含文件,编译系统将自动查找依赖文件。 对于包含文件,包含时指定的路径应该正确。缺省c源文件的扩展名为“. cpp”。 您也可以指定不同的副档名。 如果定义了LOCAL_DEFAULT_CPP_EXTENSION变量,请记住开始时的小点(即定义.cxx ,而不是 cxx )。包括$ (build _ shared _ library )BUILD_SHARED_LIBRARY是编译系统提供的变量,指向GNU makefile脚本(必需)位于build/core目录中的shared_library.mk根据LOCAL_XXX系列变量的值编译并生成共享库(动态链接库)。如果要生成静态库,请使用BUILD_STATIC_LIBRARYNDK的sources/samples目录包含更复杂的示例,并且包含注释的Android.mk文件。二、自定义变量以下是在Android.mk中相依或定义的变数清单: 您可以自己定义其他变量,但NDK编译系统包含以下变量名称以LOCAL_开头的名称,例如LOCAL_MODULE以PRIVATE_、NDK_或APP_开头的名称(内部使用)-小写字母的名称(内部使用,如“my-dir”)建议您使用MY_前缀,以便在Android.mk中轻松定义自己的变量MY_SOURCES :=foo.cifneq ($(MY_CONFIG_BAR ),)MY_SOURCES =bar.cendifLOCAL_SRC_FILES =$(MY_SOURCES )注:“:=”是赋值的含义=附加含义。“$”表示引用变量的值。三、GNU Make系统变量在分析Android.mk文件之前,这些GNU Make变量是由编译系统定义的。 小心点NDK可以多次分析Android.mk,变量的定义每次都不同。(1)CLEAR_VARS:指的是编译脚本,大多数未定义的LOCAL_XXX变量都列在“模块描述”部分中。 在启动新模块之前,必须包括此脚本。 include$(CLEAR_VARS )用于重置除LOCAL_PATH变量之外的所有LOCAL_XXX系列变量。(2)BUILD_SHARED_LIBRARY:指的是编译脚本,将LOCAL_XXX变量中所列出的源代码文件全部编译到一个共享库中。请注意,必须先定义LOCAL_MODULE和LOCAL_SRC_FILES,然后才能包含此文件。(3)用于编译build _ static _ library 3360静态库的BUILD_SHARED_LIBRARY变量。 静态库不会复制到的APK包中,但可以用于编译共享库。示例:包括$ (build _ static _ library )请注意,此操作将生成名为lib$(LOCAL_MODULE).a的文件(4)如4)TARGET_ARCH:目标CPU平台的名称和android开源代码中指定的一样。 如果是这样的话arm表示生成与arm兼容的命令,而不管CPU体系结构的修订版本如何。(5)分析5)target_platform:android.mk时,目标Android平台的名称.详细信息可参照/development/ndk/docs/stable-APIs.txt。Android-3-official Android 1.5系统影像Android-4-official Android 1.6系统影像Android-5-official Android 2.0系统影像(6)TARGET_ARCH_ABI:在时间上仅支持两个值,即,armeabi和armeabi-v7a。 在当前版本中,通过简单地将这两个值定义为arm并在android平台中重新定义它们,可以获得更好的匹配。 其他ABI将在未来的NDK版本中介绍,名称不同。 请注意ARM的ABI将TARGET_ARCH定义为“ARM”,但具有不同的“TARGET_ARCH_ABI”。(7 ) TARGET_ABI:目标平台和ABI的组合实际定义为$ (target _ platform )-$ (target _ arch _ ABI ),对于在实际设备上测试特殊目标系统非常有用。 默认情况下为android-3-arm。五、模块描述变量以下变量用于在编译系统中描述模块。 必须在include $(CLEAR_VARS )和include $(BUILD_XXXXX )之间定义。 如上所述,$(CLEAR_VARS )是脚本,可清除所有这些变量。(1) LOCAL_PATH:此变量用于指定当前文件的路径。 必须在Android.mk的开头定义。 由于$(CLEAR_VARS )不清除名为LOCAL_PATH :=$(call my-dir )的变量,因此必须为每个Android.mk定义一次(即使一个文件定义了多个模块)。(2)LOCAL_MODULE:这是模块的名称,必须是唯一的并且不能包括空格。 在包括$(BUILD_XXXX )脚本之前必须定义它。 模块的名称确定生成文件的名称。 例如,如果共享库模块的名称为,则生成文件的名称为lib.so。 然而,以下NDK生成语句文件(或Android.mk或Application.mk )中只应当提及具有正常名称的其他模块。(3)LOCAL_SRC_FILES:这是要编译的源文件的列表。 编译系统将自动计算依赖关系,因此只需列出要传递给编译器的文件。 请注意,源文件名相对于LOCAL_PATH。 可以按如下方式使用路径部分local _ src _ files :=foo.toto/bar.c Hello.c文件之间可以用空格或制表符分隔,换行符用“”分隔。 要添加源文件,请单击LOCAL_SRC_FILES =注:生成文件使用UNIX样式斜线(/)。 无法正确处理windows样式的反斜杠。注: local _ src _ files :=$ (callall-subir-java-files )格式可以包含local_path目录中的所有Java文件。(4) LOCAL_cpp_EXTENSION:这是一个可选变量,用于指定c代码文件的扩展名。默认值为. CPP,但可以更改LOCAL_CPP_EXTENSION :=.cxx(5) LOCAL_C_INCLUDES:可选变量表示头文件中的搜索路径。 默认头文件的搜索路径为LOCAL_PATH目录。示例: local _ c _ includes :=sources/foo或local _ c _ includes :=$ (local _ path )/./foo必须在包含LOCAL_CFLAGS/LOCAL_CPPFLAGS标志之前设置LOCAL_C_INCLUDES。(6)LOCAL_CFLAGS:选项的编译器选项用于编译c代码文件。 这个可能有使用为NDK顶层目录指定其他包含路径、宏定义或编

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论