在大環(huán)境中用make編譯app時有時候會報下面的錯誤。
ninja: error: 'out/target/common/obj/JAVA_LIBRARIES/widget_intermediates/classes-header.jar', needed by 'out/target/common/obj/APPS/Mms_intermediates/classes-full-debug.jar', missing and no known rule to make it
17:42:04 ninja failed with: exit status 1
從錯誤看焰望,是找不到header包陨帆。但是單編widget這個包的時候曲秉,生成的又沒有這個header包,全編的時候才有歧譬,所以要把這個模塊的mk文件include到MMS模塊的mk文件中岸浑,重新編譯一下就有了。
用JD-JUI 把這個classes-header.jar打開看一下瑰步,發(fā)現(xiàn)這個文件包里面只有各個類的函數(shù)聲明矢洲,沒有具體的實現(xiàn),就類似C語言的.h文件缩焦,是在編譯java文件的時候同步生成的读虏,可以查系統(tǒng) 的mk編譯文件责静。
在android 的external 目錄下有一個 Turbine 包,應(yīng)該是生成jar的header文件的盖桥。
在 build/make/core/java.mk 里面有header的生成灾螃,希望有時間仔細研究一下。
# Run jarjar before generateclasses-header.jarif necessary.274 ifneq($(strip$(LOCAL_JARJAR_RULES)),)275 $(full_classes_header_jarjar):PRIVATE_JARJAR_RULES:=$(LOCAL_JARJAR_RULES)276 $(full_classes_header_jarjar): $(full_classes_turbine_jar) $(LOCAL_JARJAR_RULES) | $(JARJAR)277 @echoHeaderJarJar: $@278 $(hide) $(JAVA)-jar$(JARJAR)process$(PRIVATE_JARJAR_RULES)$< $@279 else280 full_classes_header_jarjar:=$(full_classes_turbine_jar)281 endif282?