我将项目转换成包含一些Java,布局,字符串,资源和清单文件的库。现在我想在另一个项目中使用该aar文件。导出后,当我尝试从aar库调用活动时,出现二进制XML文件行#错误:类别膨胀错误。我使用MovableFloatingActionButton自定义类,并且仅在aar库内部的布局中创建了按钮。
错误类似
> Caused by: android.view.InflateException: Binary XML file line #86:
> Error inflating class com.***.****.MovableFloatingActionButton
>
> Caused by: java.lang.ClassNotFoundException:
> com.***.****.MovableFloatingActionButton
>
> Caused by: java.lang.NoClassDefFoundError: Failed resolution of:
> Lcom/google/android/material/floatingactionbutton/FloatingActionButton;
>
> Caused by: java.lang.ClassNotFoundException: Didn't find class
> "com.google.android.material.floatingactionbutton.FloatingActionButton"
> on path: DexPathList[[zip file
> "/data/app/com.***.****-1/base.apk"],nativeLibraryDirectories=[/data/app/com.*****.****-1/lib/arm64,
> /system/lib64, /vendor/lib64]]
看来类加载器没有找到要膨胀该类实例化的复杂视图的类。可能的问题是:
-1-如果启用了您的proguard,请尝试将其禁用,然后测试视图或布局是否已膨胀。如果可行,则需要为其配置proguard文件。
-2- Doubletype错别字错误和包,对于膨胀类,通过单击其最后一部分,即布局xml文件中的简单类名称,在这种情况下,应为com.google.android.material.floatingactionbutton。FloatingActionbutton] >,(按住键盘上的CTRL键并单击xml标记的带边框的部分)是否打开了源文件,那就可以了,否则,类确实不存在,您需要编写正确的类路径以对其进行实例化。
-3-如果您使用的是multidex,或者您想支持仍使用dex而不使用art的现有设备(主要是棒棒糖设备),那么请不要忘记重写Application类并使用MultidexApplication或包含attachBaseContext ()在主体内部具有Multidex.install(this)。并且不要忘记将此类的正确路径放入清单应用程序标记中。
示例:
class MyApplication : Application() { /** * multidex support, do not remove to backward compatibility before ART (DEX need it) * */ override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) } ... }
和:
<application android:name=".MyApplication" android:allowBackup="true" android:hardwareAccelerated="true" ... >
其中之一应该可以解决您的问题。