在里在编译一个java应用时,若是这个应用须要一个第三方的jar包,那么就须要将这个三方的jar包经过mk文件将其编译到apk里,下面是将一个三方的jar包编译到apk包里的方法.html
LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS)
LOCAL_STATIC_JAVA_LIBRARIES += zxingtool
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += zxingtool:libs/zxing.jar
include $(BUILD_MULTI_PREBUILT)
关键在于:java
LOCAL_STATIC_JAVA_LIBRARIES += zxingtool
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += zxingtool:libs/zxing.jar
其实zxingtool是个名字能够随便取,可是两个属性的值要同样就行了,可是后面那个冒号里面就必定要写你的jar包名,你的jar包必定放在工程的根目录就是和mk文件的同级目录。app
要注意:zxingtool这个名必定要是惟一的,要不编译就会出错,好比有两个应用里都用到了zxingtool这个包名,那么在编译时就会出现一下的错误信息:ui
***/packages/apps/ValidationTools:MODULE.TARGET.JAVA.LIBRARIES.libarityalready defined by packages/apps/camerathis
意思就是用两处定义了libarity,一处是/packages/apps/ValidationTools,另外一处是packages/apps/cameraspa
再补充一下,有好多遇到这样的问题的,网上给的答案都是在 build/core/base_rules.mk.net
# Make sure that this IS_HOST/CLASS/MODULE combination is unique.
module_id := MODULE.$(if \
$(LOCAL_IS_HOST_MODULE),HOST,TARGET).$(LOCAL_MODULE_CLASS).$(my_register_name)
ifdef $(module_id)
$(error $(LOCAL_PATH): $(module_id) already defined by $($(module_id)))
endif
把里面的报错注释掉,这是很是很差的事情。code