Получение inflateException при разметке внутри файла библиотеки aar - PullRequest
0 голосов
/ 29 января 2020

Я преобразовал свой проект в библиотеку, включив в него java, макет, строку, ресурсы и файл манифеста. Теперь я хочу использовать этот файл в другом проекте. После экспорта, когда я пытаюсь вызвать активность из библиотеки aar, я получаю сообщение об ошибке Binary XML file line #: Ошибка надувания класса. Я использовал собственный класс 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 Ответ

0 голосов
/ 29 января 2020

Похоже, что загрузчик классов не нашел класс для раздувания сложного представления, в которое инстанцируется этот класс. Возможные проблемы:

-1- Если ваш proguard включен, попробуйте отключить его, и проверить, раздут ли вид или макет. Если это работает, вам нужно сконфигурировать файлы proguard для.

-2 - Двойная проверка опечатки и пакет для надутого класса, нажав на его последнюю часть, простое имя класса в файле layout 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" ... >

Один из них должен решить вашу проблему.

...