• Android build系统中常用LOCAL_变量


    新书上市《深入解析Android 5.0系统》

     以下内容节选自本书

    编写模块的编译文件,实际就是定义一系列以“LOCAL_”开头的编译变量,因此我们有必要弄明白这些变量的具体含义。下面是一些经常使用的LOCAL_编译变量的说明:

    变量名

    说明

    LOCAL_ASSET_FILES

    编译APK文件时用于指定资源列表,通常写成

    LOCAL_ASSET_FILES+= $(call find-subdir-assets)。

    LOCAL_CC

    自定义C编译器来代替缺省的编译器。

    LOCAL_CXX

    自定义C++编译器来代替缺省的编译器。

    LOCAL_CFLAGS

    定义额外的C/C++编译器的参数。

    LOCAL_CPPFLAGS

    仅定义额外的C++编译器的参数,不用在C编译器中。

    LOCAL_CPP_EXTENSION

    自定义C++源文件的后缀。例如:LOCAL_CPP_EXTENSION := .cc

    注意:一旦定义,模块中所有的源文件都必须使用该后缀,目前不支持混合后缀。

    LOCAL_C_INCLUDES

    指定头文件的搜索路径。

    LOCAL_FORCE_STATIC_EXECUTABLE

    如果编译时候需要链接的库有共享和静态两者共存的情况。设定此变量值为true将会优先链接静态库。通常这种情况只会在编译root/sbin目录下的应用才会用到,因为他们执行的时间比较早,文件系统的其他部分还没有加载。

    LOCAL_GENERATED_SOURCES

    指定由系统自动生成的文件列表。

    LOCAL_MODULE_TAGS

    定义模块标签,Build系统根据标签决定哪些模块被安装。

    LOCAL_REQUIRED_MODULES

    指定依赖的模块。一旦本模块被安装,通过此变量指定的模块也将被安装

    LOCAL_JAVACFLAGS

    定义额外的javac编译器的参数

    LOCAL_JAVA_LIBRARIES

    指定模块依赖的java共享库

    LOCAL_LDFLAGS

    定义链接器ld的参数

    LOCAL_LDLIBS

    指定模块链接时依赖的库。如果这些库文件不存在,并不会引发对它们的编译。这是此变量和LOCAL_SHARED_LIBRARIES的主要区别。

    LOCAL_NO_MANIFEST

    在一个资源apk中可以指定此变量为true,表示此apk文件没有AndroidManifest.xml文件。

    LOCAL_PACKAGE_NAME

    指定APP应用名称。

    LOCAL_PATH

    指定Android.mk文件所在的目录。

    LOCAL_POST_PROCESS_COMMAND

    在编译host相关的模块时,可以用此变量定义一条命令在link完成后执行。

    LOCAL_PREBUILT_LIBS

    指定预编译c/c++动态和静态库列表。用于预编译模块定义中。

    LOCAL_PREBUILT_JAVA_LIBRARIES

    指定预编译java库列表。用于预编译模块定义中。

    LOCAL_SHARED_LIBRARIES

    指定模块依赖的c/c++共享库列表。

    LOCAL_SRC_FILES

    指定源文件列表。

    LOCAL_STATIC_LIBRARIES

    指定依赖的c/c++静态库列表。

    LOCAL_MODULE

    除应用(apk)以LOCAL_PACKAGE_NAME指定模块名以外,其余的模块都以LOCAL_MODULE指定模块名。

    LOCAL_MODULE_PATH

    指定模块在目标系统的安装路径。

    LOCAL_UNSTRIPPED_PATH

    指定模块的unstripped版本在out目录下的保存路径。

    LOCAL_WHOLE_STATIC_LIBRARIES

    这个变量也是定义了模块依赖的静态库列表,和LOCAL_STATIC_LIBRARIES类似。但是通过这个变量定义,链接时链接器不会将静态库中无人调用的代码去掉。

    LOCAL_YACCFLAGS

    指定yacc的参数。

    LOCAL_ADDITIONAL_DEPENDENCIES

    指定本模块的依赖。用在不方便使用别的方法来指定依赖关系时。

    LOCAL_BUILT_MODULE

    指定编译时存放中间文件的目录。

    LOCAL_INSTALLED_MODULE

    指定模块的安装路径。

    LOCAL_MODULE_CLASS

    定义模块的分类。根据分类,生成的模块文件会安装到目标系统相应的目录下。例如:APPS:安装到/system/app下;SHARED_LIBRARIES:安装到/system/lib下;EXECUTABLES:安装到/system/bin下;ETC:安装到/system/etc下;但是如果同时用LOCAL_MOULE_PATH定义了路径,则安装到该路径。

    LOCAL_MODULE_NAME

    指定模块的名称。但是目前系统中用到它的实例。

    LOCAL_MODULE_SUFFIX

    指定当前模块的后缀。一旦指定,系统在产生目标文件时,会以模块名加后缀来创建目标文件

    LOCAL_STRIP_MODULE

    指定模块是否需要被strip,该模块是可执行文件或动态库才能使用该变量。

    LOCAL_STRIPPABLE_MODULE

    此变量的值通常由Build系统设置,一般可执行文件和动态库被设为true。

    LOCAL_SYSTEM_SHARED_LIBRARIES

    此变量在编译系统的基本库,如:libc,libm,libdl时,用来定义这些库的依赖库。通常在应用模块定义中不应使用该变量。

    LOCAL_PRELINK_MODULE

    编译.so模块时,定义是否需要prelink。prelink是通过预链接的方式来加快程序启动速度。如果要设置此值为true,要先在build/core/prelink-linux-arm.map文件中定义该库的地址和大小,否则报错。但是在Android4.2以后的代码中找不到文件prelink-linux-arm.map了,在build目录下也搜寻不到这个变量。可能Android已经取消了prelink的功能。

  • 相关阅读:
    jupyter notebook代码添加行号(菜单中点击view后没有toggle line numbers选项)
    深度学习:tensorflow中激励函数的实现
    深度学习:padding、卷积、stride的计算
    深度学习:mAP(mean average precision)
    java实现桶排序
    java 数组实现队列和栈
    五步学习法
    技术团队组织架构
    Redis的高可用:哨兵和集群
    Redis限流的实现方式有3种
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13313620.html
Copyright © 2020-2023  润新知