LOCAL_PREBUILT_LIBS := libx.a
include $(BUILD_MULTI_PREBUILT)
这样就会使第三方静态库copy到out目录对应的obj/STATIC_LIBRARIES中,其他动态库或可执行程序就可以链接该静态库。
在Android4.2上,还可以更简单,如下
$(call add-prebuilt-files,STATIC_LIBRARIES, *.a)
其实不只是静态库可以这么使用,还包括ETC,APPS,EXECUTABLES,SHARED_LIBRARIES也可以。
为什么说是在Android4.2上呢?因为Anroid4.0上这么使用会报错
build/core/base_rules.mk:78: *** Module name: libx
build/core/base_rules.mk:80: *
build/core/base_rules.mk:81: * Each module must use a LOCAL_MODULE_TAGS in its
build/core/base_rules.mk:82: * Android.mk. Possible tags declared by a module:
build/core/base_rules.mk:83: *
build/core/base_rules.mk:84: * optional, debug, eng, tests, samples
build/core/base_rules.mk:85: *
build/core/base_rules.mk:86: * If the module is expected to be in all builds
build/core/base_rules.mk:87: * of a product, then it should use the
build/core/base_rules.mk:88: * "optional" tag:
build/core/base_rules.mk:89: *
build/core/base_rules.mk:90: * Add "LOCAL_MODULE_TAGS := optional" in the
build/core/base_rules.mk:91: * Android.mk for the affected module, and add
build/core/base_rules.mk:92: * the LOCAL_MODULE value for that component
build/core/base_rules.mk:93: * into the PRODUCT_PACKAGES section of product
build/core/base_rules.mk:94: * makefile(s) where it's necessary, if
build/core/base_rules.mk:95: * appropriate.
build/core/base_rules.mk:96: *
build/core/base_rules.mk:97: * If the component should be in EVERY build of ALL
build/core/base_rules.mk:98: * products, then add its LOCAL_MODULE value to the
build/core/base_rules.mk:99: * PRODUCT_PACKAGES section of
build/core/base_rules.mk:100: * build/target/product/core.mk
build/core/base_rules.mk:101: *
build/core/base_rules.mk:102: *** user tag detected on new module - user tags are only supported on legacy modules。 停止。
解决办法就是:
add-prebuilt-files的定义是在build/core/definitions.mk下,在include-prebuilt定义加入
define include-prebuilt
include $$(CLEAR_VARS)
...
LOCAL_MODULE_TAGS := eng (增加此句即可)
include $$(BUILD_PREBUILT)
endef