Android.mk中的aar支持. AOSP构建未获取依赖关系
应用程序(在Android Studio中开发)使用AAR
作为库.我需要在AOSP
树中构建此应用程序.所以我创建了Android.mk:
Application (developed in Android Studio) uses AAR
as a library. I need to build this app in AOSP
tree. So I created Android.mk:
LOCAL_STATIC_JAVA_AAR_LIBRARIES:= <aar alias>
include $(BUILD_PACKAGE)
include $(CLEAR_VARS)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES := <aar alias>:libs/<lib file>.aar
include $(BUILD_MULTI_PREBUILT)
构建成功完成,但是问题在于AAR
在其"libs"目录中包含许多JAR文件.而且,似乎这些JAR未包含在构建中,因此应用程序因NoClassDefFoundError
而崩溃.
Build completes successfully but the issue is that AAR
contains number of JAR files in its 'libs' directory. And it seems that these JARs are not included into build so application crashes with NoClassDefFoundError
.
AOSP是否缺少对AAR
的完全支持?还是我想念什么?谢谢.我使用的是Android 6.0.1.
Is AOSP missing full support of the AAR
? Or do I miss something? Thanks. I use Android 6.0.1.
我最终得到了以下内容:
I ended up with the following:
-在应用程序的Android.mk中:
-in application's Android.mk:
LOCAL_STATIC_JAVA_AAR_LIBRARIES += coollibrary
include $(LOCAL_PATH)/java-static-lib-from-aar.mk
-java-static-lib-from-aar.mk:
-java-static-lib-from-aar.mk:
define list-jar-libs-from-aar
$(foreach f, $(2), $(shell if [ -f $(LOCAL_PATH)/$(f)/$(1).aar ]; then unzip -Z1 $(LOCAL_PATH)/$(f)/$(1).aar libs/*.jar | sed 's/libs\///g; s/\.jar//g'; fi))
endef
define build-jar-lib-from-aar
$(2): $(1)
-mkdir -p $(dir $2);\
cp -fp $1 $2
endef
MY_STATIC_JAVA_LIBS := $(foreach aar,$(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\
$(foreach jar, $(call list-jar-libs-from-aar,$(aar), libs aosplibs),\
$(aar)_$(jar)))
$(info Adding following java libraries from AAR(s) into LOCAL_STATIC_JAVA_LIBRARIES: $(MY_STATIC_JAVA_LIBS))
LOCAL_STATIC_JAVA_LIBRARIES += $(MY_STATIC_JAVA_LIBS)
$(foreach aar,$(LOCAL_STATIC_JAVA_AAR_LIBRARIES),\
$(foreach jar, $(call list-jar-libs-from-aar,$(aar), libs aosplibs),\
$(eval $(call build-jar-lib-from-aar,$(call intermediates-dir-for,JAVA_LIBRARIES,$(aar),,COMMON)/aar/libs/$(jar).jar,$(call intermediates-dir-for,JAVA_LIBRARIES,$(aar)_$(jar),,COMMON)/javalib.jar))))
java-static-lib-from-aar.mk假定AAR驻留在./libs和aosplibs目录中.
java-static-lib-from-aar.mk assumes that AARs reside in ./libs and aosplibs directories.