我正在使用 AOSP 构建一个应用程序作为系统镜像的一部分,并尝试将 support-v4 等库作为 AAR应用程序的 strong>s/在应用程序的 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 文件本身来自 Android SDK 的 m2repository 文件夹,所以它应该是“官方”和正确的文件,对吧?
有什么想法吗?
谢谢!
最佳答案
我自己回答 - 问题是 AAPT/AAPT2 构建系统因从 *.aar 文件中提取内容而被破坏。
因此,如果您有例如*.aar 中 libs/ 文件夹中的一些 *.jar 文件未被提取,然后导致运行时崩溃并出现 ClassDefNotFoundExceptions.
所以,基本上答案已经在这里了: How to include .aar in AOSP with android.mk
关于Android/AOSP Android.mk 构建和支持-v4 AAR 等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54406177/