关于AS上报Error inflating class androidx.appcompat.widget.Action这件小事

2,802 阅读1分钟

在android studio 4.0.1的版本更新了Android API 31之后,尝试编写一个HelloWord之后发现Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Error inflating class androidx.appcompat.widget.ActionBarContainer这错误

1.这个是SDK Platforms安装详情

image.png

2.这个是运行时报错

E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.myapplication, PID: 26614 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myapplication/com.example.myapplication.MainActivity}: android.view.InflateException: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Error inflating class androidx.appcompat.widget.ActionBarContainer at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3748) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3916) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2341) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:8258) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049) Caused by: android.view.InflateException: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Error inflating class androidx.appcompat.widget.ActionBarContainer Caused by: android.view.InflateException: Binary XML file line #27 in com.example.myapplication:layout/abc_screen_toolbar: Error inflating class androidx.appcompat.widget.ActionBarContainer Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:343) at android.view.LayoutInflater.createView(LayoutInflater.java:852) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1008) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:959) at android.view.LayoutInflater.rInflate(LayoutInflater.java:1138) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1099) at android.view.LayoutInflater.inflate(LayoutInflater.java:680) at android.view.LayoutInflater.inflate(LayoutInflater.java:532) at android.view.LayoutInflater.inflate(LayoutInflater.java:479) at androidx.appcompat.app.AppCompatDelegateImpl.createSubDecor(AppCompatDelegateImpl.java:905) at androidx.appcompat.app.AppCompatDelegateImpl.ensureSubDecor(AppCompatDelegateImpl.java:815) at androidx.appcompat.app.AppCompatDelegateImpl.setContentView(AppCompatDelegateImpl.java:703) at androidx.appcompat.app.AppCompatActivity.setContentView(AppCompatActivity.java:195) at com.example.myapplication.MainActivity.onCreate(MainActivity.java:12) at android.app.Activity.performCreate(Activity.java:8151) at android.app.Activity.performCreate(Activity.java:8135) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3717) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3916) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2341) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:264) at android.app.ActivityThread.main(ActivityThread.java:8258) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:632) E/AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1049) Caused by: java.lang.NoSuchMethodError: No static method metafactory(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite; in class Ljava/lang/invoke/LambdaMetafactory; or its super classes (declaration of 'java.lang.invoke.LambdaMetafactory' appears in /apex/com.android.art/javalib/core-oj.jar) at androidx.core.view.ViewCompat.<clinit>(ViewCompat.java:2852) at androidx.core.view.ViewCompat.setBackground(ViewCompat.java:2991) at androidx.appcompat.widget.ActionBarContainer.<init>(ActionBarContainer.java:63) ... 30 more I/Process: Sending signal. PID: 26614 SIG: 9

分析原因:一有问题就百度,但是尝试了半天发现并没有什么卵用。公司电脑近期对软件安装有限制,不让我重装或更新Android Studio。然后继续跟踪错误,发现可能和build.gradle中的implementation'androidx.appcompat:appcompat:1.4.0'有关

<androidx.appcompat.widget.Toolbar
        android:id="@+id/action_bar"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:navigationContentDescription="@string/abc_action_bar_up_description"
        style="?attr/toolbarStyle"/>

然后我心存侥幸的把这个gradle中的implementation调到上一个1.3.1版本,它就可以正常运行了

implementation 'androidx.appcompat:appcompat:1.3.1'

后续处理:后来我把这个问题和同事沟通了一下。他的Android Studio比我的新,无此问题。所以可能安装最新的android studio 不会碰到这个了。如果不想更新Android Studio的同学可以像我一样,回退一下implementation'androidx.appcompat:appcompat:1.4.0的版本就可以了。