เกิดข้อผิดพลาดในการขยายคลาส androidx.constraintlayout.ConstraintLayout หลังจากการย้ายไปยัง androidx


88

ฉันเพิ่งทำการย้ายข้อมูลไปยัง androidx ผ่านตัวเลือกเมนู Android Studio Refactor -> Refactor to AndroidX

ฉันได้รับข้อผิดพลาดต่อไปนี้:

android.view.InflateException: ไฟล์ Binary XML บรรทัด # 2: ไฟล์ Binary XML บรรทัด # 2: เกิดข้อผิดพลาดในการขยายคลาส androidx.constraintlayout.ConstraintLayout

ความคิดใด ๆ ?

Stacktrace:

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)

โปรดแสดง stacktrace ทั้งหมด
TheWanderer

โปรดแบ่งปันระดับการสร้างแอประดับแอปของคุณเพื่อที่เราจะได้เห็นการอ้างอิง
Abhinav Saxena

คำตอบ:


178

ฉันแก้ปัญหาของฉันโดยเปลี่ยนเหตุการณ์ทั้งหมดของ

androidx.constraintlayout.ConstraintLayout

ถึง

androidx.constraintlayout.widget.ConstraintLayout


12
ใช่ข้อผิดพลาดในการแปลงสตูดิโอของ Android ต้องเปลี่ยนเหตุการณ์ทั้งหมดในรูปแบบ xml ด้วยandroidx.constraintlayout.widget.ConstraintLayout ... ขอบคุณ
issamux

1
ฉันได้สร้างโปรเจ็กต์ใหม่ด้วยไลบรารีสนับสนุน androidx และฉันมี androidx.constraintlayout.widget.ConstraintLayout ในกิจกรรมหลักของฉันแล้ว แต่ยังคงได้รับข้อผิดพลาดเดียวกัน
จน์

2
@Kanchan หากคุณกำลังทำงานในโปรเจ็กต์หลายโมดูลให้ตรวจสอบว่าคุณจำเป็นต้องอัปเดตเส้นทาง ConstraintLayout ในไฟล์ใด
Vasudev

50

เพิ่มandroidx.constraintlayout.widget.ConstraintLayoutการอ้างอิง:

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

mavenCentral()มันมีอยู่ใน


อย่างที่สองconstraintlayoutไม่ได้เริ่มต้นด้วยตัวพิมพ์ใหญ่Cอย่างไรก็ตาม ถูกต้องครับ:'androidx.constraintlayout:constraintlayout:1.1.3'
ʍѳђઽ ૯ ท.

คุณช่วยฉันจากอาการปวดหัวเล็กน้อย
Koen Van Looveren

2
เหตุใดจึงเกิดขึ้นบน Android Studio ฉันเปลี่ยนจาก 1.1.2 เป็น 1.1.3 ขอขอบคุณ.
BollMose

1
@BollMose - ไม่รู้ทำไม แต่ 1.1.2 แค่สำลักตาย น่าจะเป็นโปรแกรมความเข้ากันได้ที่ Google คนดีพลาดไป พวกเขามักจะทำเช่นนั้นมาก ยินดีต้อนรับสู่การเขียนโปรแกรม Android!
SMBiggs

2
สำหรับฉันนี่น่าจะเป็นคำตอบเดียวที่ยอมรับได้ มีข้อบกพร่องประกอบด้วย 1.1.2 1.1.3 แก้ไขปัญหานี้
mochadwi

10

ฉันมีปัญหาเดียวกันฉันแก้ไขได้ดังนี้:

ในการพึ่งพาของคุณหากคุณได้เพิ่ม

implementation 'androidx.constraintlayout:constraintlayout:1.x.x' ถูกต้อง

แต่ในไฟล์เลย์เอาต์ xml ของคุณคุณต้องใช้วิดเจ็ตเป็น

androidx.constraintlayout.widget.ConstraintLayout


5

หากหลังจากเพิ่มmavenCentral ()เป็นที่เก็บในไฟล์ Gradle ของคุณแล้วการเปลี่ยนandroidx.constraintlayout.ConstraintLayoutเป็นandroidx.constraintlayout.widget.ConstraintLayoutไม่สามารถแก้ปัญหาของคุณได้ให้ลองทำInvalidate cache แล้วรีสตาร์ทจากเมนูไฟล์ มันได้ผลสำหรับฉัน


5

build.gradle => ตรวจสอบเวอร์ชันการอ้างอิง

implementation 'androidx.constraintlayout:constraintlayout:1.1.1'


เพื่อเปลี่ยนแปลง

implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

แก้ปัญหา


1
จัดรูปแบบได้ดีและคำตอบนี้ใช้ได้กับฉัน ขอขอบคุณ.
Lukas Bimba

มาจาก 1.1.2 การอัปเดตเป็น 1.1.3 แก้ไขสิ่งนี้ให้ฉันด้วย ขอบคุณ!
จันทร์ที่

5

ฉันมีปัญหาเดียวกันหลังจาก:

  • ห้องสมุดสนับสนุนการย้ายข้อมูลไปยัง androidx;
  • เพิ่ม targetSdkVesrsion ถึง 29;

ฉันยังใช้:

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

ฉันลองโพสต์ทั้งหมดจากคำถามนี้ แต่ไม่ประสบความสำเร็จ

ฉันแก้ไขโดยการเพิ่มหนึ่งสตริง.disableCustomViewInflation()ใน Calligraphy init:

@Override
public void onCreate() {

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

ฉันหวังว่า Calligraphy รุ่นต่อไป (Christopher Jenkins ขอบคุณสำหรับงานที่ยอดเยี่ยมของคุณ) จะแก้ไขได้ภายใน


ฉันไม่ได้ใช้มันในโครงการของฉัน แต่มีห้องสมุดอยู่ที่นั่น หลังจากนำออกแอปเริ่มทำงานตามที่คาดไว้ ขอบคุณ
Pratik Mhatre

อันนี้ทำงานได้อย่างไม่มีที่ติสำหรับฉัน ฉันใช้ android studio 4 canary 15
Miguel Silva

5

ตรวจสอบให้แน่ใจว่าโครงการของคุณย้ายไปที่ androidx อย่างสมบูรณ์ในกรณีของฉันฉันพบ:

<android.support.constraint.ConstraintLayout

แทน

  <androidx.constraintlayout.widget.ConstraintLayout

ดังนั้นเปลี่ยนมันและปัญหาของฉันได้รับการแก้ไข!


4

หลังจากคลิกRefactor -> Migrate to AndroidXตรวจสอบให้แน่ใจว่าการอ้างอิงทั้งหมดของคุณใน build.gradle (Module: app) ถูกทำเครื่องหมายเป็นเวอร์ชันล่าสุด

หากไม่เป็นเช่นนั้นการอ้างอิงจะปรากฏเป็นสีที่ไฮไลต์สีเหลืองและคุณสามารถเปลี่ยนแปลงได้โดยการวางเมาส์เหนือสิ่งนั้น

ประการที่สองเปลี่ยนแท็ก ConstraintLayout ในไฟล์เลย์เอาต์ XML ทั้งหมดเป็นไฟล์

androidx.constraintlayout.widget.ConstraintLayout

สำหรับตัวเลือกที่ปลอดภัยยิ่งขึ้นให้ล้างโปรเจ็กต์ของคุณและซิงค์อีกครั้งหลังจากขั้นตอนข้างต้น


2

ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มการอ้างอิงสำหรับเค้าโครงข้อ จำกัด

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

และได้ทำการเปลี่ยนแปลง

<androidx.constraintlayout.widget.ConstraintLayout instead of

<android.support.constraint.ConstraintLayout

1

ฉันคัดลอกและวางแท็ก ConstraintLayout ที่มีอยู่จาก xml ซึ่งเป็นสาเหตุของปัญหาสำหรับฉัน เพียงแค่ลบและเพิ่มแท็ก ConstraintLayout ใน AndroidStudio ตั้งแต่เริ่มต้นก็ช่วยแก้ปัญหาให้ฉันได้


1

อย่าลืมเปลี่ยนเป็น

<androidx.constraintlayout.widget.ConstraintLayout

แทน

<android.support.constraint.ConstraintLayout

และ

<androidx.constraintlayout.widget.Barrier

แทน

<android.support.constraint.Barrier

1

ฉันมีปัญหากับ Android Studio 4.0 ฉันใช้ android studio 4.0 มาสองสามวันแล้วโดยไม่มีปัญหา ดูเหมือนว่ามุมมองของนักออกแบบจะหยุดทำงานจากที่ใด ฉันสามารถแก้ไขได้โดยการถอนการติดตั้ง android studio และติดตั้ง android studio เวอร์ชันใหม่ล่าสุด



0

ฉันมีข้อผิดพลาดที่คล้ายกัน

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

ตามคำแนะนำ:

add androidx.constraintlayout.ConstraintLayout to the dependencies:

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

และที่เก็บ mavenCentral ()

ใช้ได้ผลสำหรับฉัน ฉันสามารถรวบรวม APK


0

ฉันอัปเดตการอ้างอิง แต่ก็ไม่สามารถแก้ไขข้อผิดพลาดได้ จากนั้นฉันก็ทำโครงการที่สะอาดและสร้างขึ้นและตอนนี้ก็ใช้งานได้แล้ว


0
  1. ค้นหาค่าเริ่มต้นทั้งหมดก่อนที่จะคลิก Refactor -> Refactor to AndroidX
  2. เปิดhttps://developer.android.com/jetpack/androidx/migrate/class-mappingsแล้วค้นหา "android.support.v4.widget.DrawerLayout" ในบรรทัดเดียวกันชื่อคลาส AndroidX คือ "androidx.drawerlayout.widget.DrawerLayout" คัดลอก

ใส่คำอธิบายภาพที่นี่

  1. แทนที่ "android.support.v4.widget.DrawerLayout" ทั้งหมดเป็น "androidx.drawerlayout.widget.DrawerLayout" ในโค้ดเค้าโครงและเมนูของโปรเจ็กต์ของคุณหลังจากเปลี่ยนทั้งหมดแล้วจะได้

ฉันหมายถึงค้นหาการทำแผนที่และใช้ในโครงการทั้งหมด


0

เปลี่ยนการพึ่งพาเค้าโครงข้อ จำกัด ของคุณเป็นการใช้งาน 'androidx.constraintlayout: constraintlayout: 2.0.2'

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.