Android.mk中的aar支持. AOSP构建未获取依赖关系

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.