一、应用程序构建文件:application.mk
Android应用程序的构建文件是Makefile文件,并且它的主要部分被定义在application.mk文件中。该文件的主要目的是使Android的make系统知道apk中包含哪些文件,以及如何使用和链接它们。application.mk文件还控制构建Android应用程序时所用的其他一些参数。
二、使用application.mk定义目标架构
构建Android应用程序时,您可能需要在多个目标架构(如ARM和x86)的不同二进制文件中使用不同的代码(如库)。application.mk文件定义了该应用程序支持的目标架构。
APP_ABI := armeabi armeabi-v7a x86
默认情况下,该值包含所有ABI。要限制特定ABI,请覆盖此变量。请注意,对于针对其中一个或多个ABI的应用程序,应将其编译为库项目,而应用程序的源代码可以通过公共库APIs进行访问。
三、使用application.mk定义使用的C++运行时库
Android支持三种不同的C++运行时库:stlport、gnustl和libc++。请在Make文件中使用APP_STL变量来描述应用程序链接的运行时库。将APP_STL设置为以下(在本地模块的application.mk中设置)之一,即可指定旧版STL库:
APP_STL := stlport_static APP_STL := stlport_shared APP_STL := gnustl_static APP_STL := gnustl_shared
但Android NDK 18或更高版本已删除对STLPort和Gnustl的支持,以支持libstdc++和libc++。要使用libc++运行时库,请将您的application.mk设置为:
APP_STL := c++_static APP_STL := c++_shared
四、使用application.mk定义应用程序的架构特定选项
如上所述,应用程序使用Android NDK构建。在应用程序编译期间,需要设置特定于架构的标志。这通常包括调试和优化等。
APP_CFLAGS := -DDEBUG
APP_CFLAGS 定义了特定于应用程序的C选项。 它们与Make工具一起使用,用于编译特定于应用程序的源文件。 要集中处理调试选项或特定于目标架构的选项,请使用APP_CPPFLAGS 、APP_CXXFLAGS或APP_LDFLAGS 。
五、使用application.mk定义应用程序使用的嵌入式库
Android应用程序可以使用来自系统或其他应用程序的预编译库,或者可以构建自己的库作为应用程序的一部分。在application.mk文件中使用LOCAL_SHARED_LIBRARIES将库添加到应用程序中。将应用程序源代码中的链接指令与预构建的共享库符号匹配,而不是构建自己的库。
LOCAL_SHARED_LIBRARIES := libmy_shared_library
默认情况下,这些库将使用系统共享库路径进行链接。如果将LOCAL_ALLOW_UNDEFINED_SYMBOLS 值设置为true ,则会在允许库中未定义的符号的情况下构建应用程序。
六、总结
application.mk文件是Android应用程序构建文件中一个重要的文件,它定义应用程序的目标架构、C++运行时库、应用程序的架构特定选项以及应用程序使用的嵌入式库。熟练理解和使用application.mk文件可以帮助您优化和管理Android应用程序的构建过程。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/252044.html