2017-03-23 7 views
1

응용 프로그램 (Android Studio에서 개발 됨)에서 종속 항목을 선택하지 않은 경우 AAR을 라이브러리로 사용합니다. 이 AOSP 트리 에서이 응용 프로그램을 빌드해야합니다.aar 지원. AOSP 빌드

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 파일의 수를 포함한다는 것입니다 : 그래서 Android.mk를 만들었습니다. 그리고 이러한 JAR 파일은 빌드에 포함되지 않으므로 NoClassDefFoundError으로 응용 프로그램이 충돌하는 것으로 보입니다.

AOSP가 AAR의 전체 지원을 놓치고 있습니까? 또는 나는 무엇인가 놓치 느냐? 감사. 나는 안드로이드 6.0.1을 사용한다.

답변

1

당신이하고있는 방식이 정확합니다. 그리고 aar에 포함 된 jar 파일도 여기에 포함됩니다. 나는 당신이 그것에 aapt 플래그를 포함하는 것을 놓친 것 같아요.

LOCAL_AAPT_FLAGS += --extra-packages your.package.name 
+0

이것은 도움이되지 않습니다. --extra-packages 동작을 확인하기 위해 새로운 mylib.jar 파일을 가비지 컨텐츠로 생성하여 AAR의 libs 폴더에 넣었습니다. libs 콘텐츠가 빌드에 포함되면 잘못된 .jar 파일로 인해 빌드가 실패합니다. 그러나 빌드가 성공적으로 완료되었습니다. AAR 파일의 AndroidManifest.xml에 정의 된대로 패키지 이름을 전달합니다. 옳은? –

+0

나는 적절한 플래그를 만드는 동안 aapt 플래그를 포함하는 jar 파일을 포함한다고 말하지 않았다. 내 의견을 확인해주십시오 : "당신이하는 일은 정확하고, aar에 포함 된 jar 파일도 여기에 포함될 것입니다." aapt 플래그가 포함 된 적절한 빌드를 만드십시오. 그래도 작동하지 않으면 mk 파일을 여기에 공유하십시오. – prateekj

+0

물론 AAR의이 리소스가 빌드에 포함되어 있지 않으면 LOCAL_AAPT_FLAGS + = --extra-packages your.package.name을 추가했습니다. 물론 aar의 classes.jar 파일이 빌드에 포함되어 있습니다. 문제는 AAR의 libs/*. jar 파일이 자동으로 빌드에 포함되지 않는다는 것입니다. –

0

여기에서 죽은자를 기르고, 나는 같은 beahviour를 경험했습니다. ./jni/에서 * .so 파일과 동일합니다. 및 aar 자산. $ (BUILD_MULTI_PREBUILT)을 살펴보면 jar 및 res 파일의 클래스 만 찾습니다.

필자는 이러한 구성 요소 (* .so, * .jar, assets)를 추출하여 내 앱의 Android.mk에 명시 적으로 추가했습니다.

-in 응용 프로그램의 Android.mk :

1

나는 다음과 같이 결국

LOCAL_STATIC_JAVA_AAR_LIBRARIES += coollibrary 

include $(LOCAL_PATH)/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)))) 

자바 -static-lib-from-aar.mk는 AAR이 ./libs 및 aosplibs 디렉토리에 상주한다고 가정합니다.