Błąd podczas zawyżania klasy androidx.constraintlayout.ConstraintLayout po migracji do androidx

88

Właśnie wykonałem migrację do androidx poprzez opcję menu Android Studio Refactor -> Refactor to AndroidX

Otrzymuję następujący błąd:

android.view.InflateException: wiersz pliku binarnego XML nr 2: wiersz pliku binarnego XML nr 2: Błąd podczas zawyżania klasy androidx.constraintlayout.ConstraintLayout

Dowolny pomysł?

Ślad stosu:

2018-10-19 00:25:58.128 28131-28131/com.midounoo.midounoo E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.midounoo.midounoo, PID: 28131
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.midounoo.midounoo/com.midounoo.midounoo.Base.MainActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2724)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6255)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924)
     Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
     Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class androidx.constraintlayout.ConstraintLayout
     Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.ConstraintLayout" on path: DexPathList[[zip file "/data/app/com.midounoo.midounoo-2/base.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.midounoo.midounoo-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.midounoo.midounoo-2/lib/arm64, /system/lib64, /vendor/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at android.view.LayoutInflater.createView(LayoutInflater.java:609)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:787)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:727)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:495)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:426)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at com.midounoo.midounoo.Base.MainActivity.onCreate(MainActivity.java:43)
        at android.app.Activity.performCreate(Activity.java:6666)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2677)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2789)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1527)
        at android.os.Handler.dispatchMessage(Handler.java:110)
        at android.os.Looper.loop(Looper.java:203)
        at android.app.ActivityThread.main(ActivityThread.java:6255)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063)
KevinMo
źródło
Pokaż proszę cały ślad stosu.
TheWanderer
Udostępnij stopień kompilacji na poziomie aplikacji, abyśmy mogli zobaczyć zależności.
Abhinav Saxena

Odpowiedzi:

178

Rozwiązuję swój problem, zmieniając wszystkie wystąpienia

androidx.constraintlayout.ConstraintLayout

do

androidx.constraintlayout.widget.ConstraintLayout

KevinMo
źródło
12
Tak, błąd w transformacjach Android Studio, musi zmienić wszystkie wystąpienia w układzie XML za pomocą androidx.constraintlayout.widget.ConstraintLayout ... dzięki
issamux
1
Utworzyłem nowy projekt z biblioteką obsługi androidx i mam już androidx.constraintlayout.widget.ConstraintLayout w mojej głównej aktywności, ale nadal otrzymuję ten sam błąd.
Kanchan
2
@Kanchan Jeśli pracujesz w projekcie wielomodułowym, sprawdź, czy musisz zaktualizować ścieżkę ConstraintLayout w jakimkolwiek.
Vasudev
50

Dodaj androidx.constraintlayout.widget.ConstraintLayoutdo zależności:

dependencies  {
    // https://mvnrepository.com/artifact/androidx.constraintlayout/constraintlayout
    implementation "androidx.constraintlayout:constraintlayout:1.1.3"
}

Jest dostępny na mavenCentral().

Martin Zeitler
źródło
Jednak druga constraintlayoutnie zaczyna się wielką literą C. Poprawna:'androidx.constraintlayout:constraintlayout:1.1.3'
ʍѳђ ઽ ૯ ท
Uratowałeś mnie od drobnego bólu głowy
Koen Van Looveren
2
Dlaczego tak się dzieje w Android Studio? Zmieniłem to z 1.1.2 na 1.1.3. Dziękuję Ci.
BollMose
1
@BollMose - nie wiem dlaczego, ale 1.1.2 po prostu dusi się na śmierć. Prawdopodobnie jakiś program kompatybilny, którego miły ludzie Google przegapili. Często to robią; witamy w programowaniu na Androida!
SMBiggs
2
Dla mnie to powinna być jedyna akceptowalna odpowiedź. Jest błąd składający się z wersji 1.1.2, 1.1.3, napraw ten problem.
mochadwi
10

Miałem ten sam problem, rozwiązałem go następująco:

W twoich zależnych gatunkach, jeśli dodałeś

implementation 'androidx.constraintlayout:constraintlayout:1.x.x' to jest poprawne

ale w pliku układu xml musisz użyć widżetu jako

androidx.constraintlayout.widget.ConstraintLayout

Mirwise Khan
źródło
5

Jeśli po dodaniu mavenCentral () jako repozytorium w pliku Gradle i zmianie androidx.constraintlayout.ConstraintLayoutna androidx.constraintlayout.widget.ConstraintLayoutnie rozwiązało problemu, spróbuj wykonać Unieważnij pamięć podręczną i uruchom ponownie z menu pliku. U mnie to zadziałało.

Neeraj Sewani
źródło
5

build.gradle => sprawdź wersję zależności

implementation 'androidx.constraintlayout:constraintlayout:1.1.1'


zmienić

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

Rozwiązać problem

Sakthi Vel
źródło
1
Jest dobrze sformatowany i ta odpowiedź zadziałała dla mnie. Dziękuję Ci.
Lukas Bimba
pochodzi z 1.1.2. aktualizacja do wersji 1.1.3 naprawiła to również dla mnie. dzięki!
poniedziałek
5

Mam ten sam problem po:

  • biblioteka obsługi migracji do androidx;
  • przyrost targetSdkVesrsion do 29;

Używam również:

implementation "uk.co.chrisjenx:calligraphy:2.3.0"

Wypróbowałem wszystkie posty z tego pytania, ale bez powodzenia.

Naprawiam to, dodając jeden ciąg .disableCustomViewInflation()do inicjalizacji Calligraphy:

@Override
public void onCreate() {

    super.onCreate();
    // ...
    CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
            .setDefaultFontPath("fonts/Sans-Regular.ttf")
            .setFontAttrId(R.attr.fontPath)
            .disableCustomViewInflation() // <----- this fix
            .build());
    // ...
}

Mam nadzieję, że następne wydanie Calligraphy (dzięki Christopherze Jenkinsowi za świetną robotę) też to naprawi.

Tapa Zapisz
źródło
Nie używałem go nawet w swoim projekcie, ale biblioteka była w Gradle. Po usunięciu aplikacji zaczęła działać zgodnie z oczekiwaniami. Dzięki
Pratik Mhatre
ten działał dla mnie bez zarzutu. Jestem na Android Studio 4 Canary 15
Miguel Silva
5

upewnij się, że twój projekt jest całkowicie migrowany do androidx, w moim przypadku znalazłem:

<android.support.constraint.ConstraintLayout

zamiast

  <androidx.constraintlayout.widget.ConstraintLayout

Więc zmień to, a mój problem zostanie rozwiązany!

sana ebadi
źródło
4

Po kliknięciu Refactor -> Migrate to AndroidXupewnij się, że wszystkie zależności w pliku build.gradle (moduł: aplikacja) są oznaczone do najnowszej wersji.

Jeśli tak nie jest, zależność pojawi się w żółtym kolorze i możesz ją zmienić, najeżdżając na nią kursorem myszy.

Po drugie, Zmień tag ConstraintLayout we wszystkich plikach układu XML na

androidx.constraintlayout.widget.ConstraintLayout

Aby uzyskać bezpieczniejszą opcję, wyczyść projekt i zsynchronizuj go ponownie po wykonaniu powyższych czynności.

Akshay Chopra
źródło
2

Upewnij się, że dodano zależność do układu ograniczeń

 dependencies  {
    implementation "androidx.constraintlayout:constraintlayout:1.1.3"
}

i wprowadzili zmiany w

<androidx.constraintlayout.widget.ConstraintLayout instead of

<android.support.constraint.ConstraintLayout
Ravi
źródło
1

Skopiowałem i wkleiłem istniejący tag ConstraintLayout z xml, który był przyczyną problemu. Po prostu usunięcie i ponowne dodanie tagów ConstraintLayout w AndroidStudio od zera rozwiązało problem.

Abhas Arya
źródło
1

Pamiętaj, aby zmienić na

<androidx.constraintlayout.widget.ConstraintLayout

zamiast

<android.support.constraint.ConstraintLayout

i

<androidx.constraintlayout.widget.Barrier

zamiast

<android.support.constraint.Barrier
kumar
źródło
1

Miałem ten problem z Androidem Studio 4.0. Korzystałem z Android Studio 4.0 przez kilka dni bez problemów. Pozornie znikąd widok projektanta przestał działać. Mogłem to naprawić tylko poprzez odinstalowanie Android Studio i zainstalowanie najnowszej wersji Android Studio.

RÓŻOWY
źródło
0

tak. mavenCentral () i poprawne zależności rozwiązują te same problemy

Ya Si
źródło
0

Miałem podobny błąd.

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.myapp/com.myapp.MainActivity}: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2757)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2818)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6393)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
    Caused by: android.view.InflateException: Binary XML file line #2: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
    Caused by: android.view.InflateException: Binary XML file line #2: Error inflating class androidx.constraintlayout.widget.ConstraintLayout
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:430)
        at android.view.LayoutInflater.createView(LayoutInflater.java:652)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:812)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:752)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:499)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:430)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:377)
        at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:469)
        at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:140)
        at com.myapp.MainActivity.onCreate(MainActivity.java:23)
        at android.app.Activity.performCreate(Activity.java:6858)
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1119)
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2710)
        at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2818)
        at android.app.ActivityThread.-wrap12(ActivityThread.java)
        at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1557)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:163)
        at android.app.ActivityThread.main(ActivityThread.java:6393)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:933)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:823)
    Caused by: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/constraintlayout/widget/R$styleable;
        at androidx.constraintlayout.widget.ConstraintLayout.init(ConstraintLayout.java:590)
        at androidx.constraintlayout.widget.ConstraintLayout.<init>(ConstraintLayout.java:567)
        ... 23 more
    Caused by: java.lang.ClassNotFoundException: Didn't find class "androidx.constraintlayout.widget.R$styleable" on path: DexPathList[[zip file "/data/app/com.myapp-1/base.apk"],nativeLibraryDirectories=[/data/app/com.myapp-1/lib/arm64, /system/lib64, /vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:380)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        ... 25

Zgodnie z zaleceniami:

add androidx.constraintlayout.ConstraintLayout to the dependencies:

dependencies  {
    implementation "androidx.constraintlayout:constraintlayout:1.1.3"
}

A repozytorium mavenCentral ().

Pracuje dla mnie. Mógłbym skompilować APK.

Juan Francisco Romero Gutirrez
źródło
0

Zaktualizowałem zależność, ale nie rozwiązało to błędu. Następnie zrobiłem czysty projekt i zbudowałem i teraz działa.

Bishoy Abd
źródło
0
  1. Znajdź wszystkie domyślne przed, aby kliknąć Refactor -> Refactor to AndroidX
  2. Otwórz https://developer.android.com/jetpack/androidx/migrate/class-mappings i znajdź „android.support.v4.widget.DrawerLayout”. W tym samym wierszu nazwa klasy AndroidX to „androidx.drawerlayout.widget.DrawerLayout”, skopiuj ją.

wprowadź opis obrazu tutaj

  1. Zamień wszystkie „android.support.v4.widget.DrawerLayout” na „androidx.drawerlayout.widget.DrawerLayout” w kodzie projektu, układzie i menu. Po tym wszystkim zamień to zadziała.

Mam na myśli znalezienie mapowania i wykorzystanie go w całym projekcie.

ethemsulan
źródło
0

zmień zależność układu ograniczeń na implementację „androidx.constraintlayout: constraintlayout: 2.0.2”

Emmanuel Ametepee
źródło