Android.mk中的aar支持. AOSP构建未获取依赖关系 [英] aar support in Android.mk. Dependencies are not picked up by AOSP build

查看:119
本文介绍了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.

这篇关于Android.mk中的aar支持. AOSP构建未获取依赖关系的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆