在aar库文件内的布局中获取inflateException

问题描述 投票:0回答:1

我将项目转换成包含一些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]]
java android aar lib
1个回答
0
投票

看来类加载器没有找到要膨胀该类实例化的复杂视图的类。可能的问题是:

-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" ... >

其中之一应该可以解决您的问题。

© www.soinside.com 2019 - 2024. All rights reserved.