在Android里在编译一个java应用时,如果这个应用需要一个第三方的jar包,那么就需要将这个三方的jar包通过mk文件将其编译到apk里,下面是将一个三方的jar包编译到apk包里的方法.
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)
关键在于:
LOCAL_STATIC_JAVA_LIBRARIES += zxingtool
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += zxingtool:libs/zxing.jar
其实zxingtool是个名字可以随便取,但是两个属性的值要一样就好了,但是后面那个冒号里面就一定要写你的jar包名,你的jar包一定放在工程的根目录就是和mk文件的同级目录。
要注意:zxingtool这个名一定要是唯一的,要不编译就会出错,比如有两个应用里都用到了zxingtool这个包名,那么在编译时就会出现一下的错误信息:
***/packages/apps/ValidationTools:MODULE.TARGET.JAVA.LIBRARIES.libarityalready defined by packages/apps/camera
意思就是用两处定义了libarity,一处是/packages/apps/ValidationTools,另一处是packages/apps/camera
再补充一下,有好多遇到这样的问题的,网上给的答案都是在 build/core/base_rules.mk
# 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
把里面的报错注释掉,这是非常不好的事情。