我正在构建一个应用程序,使其成为AOSP系统映像的一部分,并尝试将support-v4等库作为应用程序的AAR库包含在应用程序的libs/文件夹中。否则,这会正常工作,应用程序本身和整个系统映像构建正常,但在尝试打开应用程序时会出现运行时崩溃。它们似乎都与在运行时找不到特定的support-v4等类有关,如ViewCompatMarshmallow等。
现在,我检查了一下,这些类实际上包含在AAR文件中,但例如:
ViewCompat$MarshmallowViewCompatImpl.class
然而,如果我检查support-v4的源代码,它们将作为包含
ViewCompatMarshmallow.java
那么,这不应该作为包含在AAR中吗
ViewCompatMarshmallow.class
我怀疑这可能是某种Android.mk问题,因为这是我需要在应用程序中使用的。不幸的是,Gradle不是一个选择。
我已经根据需要声明了例如support-v4 AAR库:
LOCAL_STATIC_JAVA_AAR_LIBRARIES += support-v4-26.0.0
LOCAL_AAPT_FLAGS += --auto-add-overlay
LOCAL_AAPT_FLAGS += --generate-dependencies
LOCAL_AAPT_FLAGS += --extra-packages android.support.v4
LOCAL_AAPT_FLAGS += --extra-packages android.support.v4.app
LOCAL_AAPT_FLAGS += --extra-packages android.support.v4.view
(etc. all the required packagenames)
LOCAL_PREBUILT_STATIC_JAVA_LIBRARIES += support-v4-26.0.0:libs/support-v4-26.0.0.aar
AAR文件本身来自AndroidSDK的m2repository文件夹,所以它应该是"官方"的,正确的,对吧?
有什么想法吗?
谢谢!
回答我自己-问题是AAPT/APT2构建系统被从*.aar文件中提取内容所破坏。
因此,如果您在*.aar中的libs/文件夹中有一些*.jar文件,则该文件不会被拾取,然后会导致运行时崩溃,并导致ClassDefNotFoundExceptions。
所以,基本上答案已经在这里了:如何将.aar包含在带有android.mk 的AOSP中