在Android应用程序包中添加SwitchCompat后,出现了“资源未找到”错误res/drawable/abc_switch_thumb_material.xml。

14

我知道这个问题已经被问过很多次,我已经阅读了所有的信息并匹配了所有的依赖项,使它们具有相同的版本。但是在添加Switch Compat后,这个错误才开始发生,你也可以通过fabric的崩溃报告看到这一点。这个错误并不是在所有设备上都会发生,根据崩溃报告显示,它没有特定的 Android 版本。还有一件事情就是,我因为使用 Android App Bundle 而使用 beta 版本的 Android,而这个问题在非 bundle 即 Apk 的情况下不会发生。

Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.App/com.App}: android.view.InflateException: Binary XML file line #100: Error inflating class android.support.design.widget.NavigationView
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3190)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by android.view.InflateException: Binary XML file line #100: Error inflating class android.support.design.widget.NavigationView
       at android.view.LayoutInflater.createView(LayoutInflater.java:640)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.MainActivity.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by android.view.InflateException: Binary XML file line #3: Error inflating class android.support.v7.widget.SwitchCompat
       at android.view.LayoutInflater.createView(LayoutInflater.java:640)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.support.v7.view.menu.j.a(Unknown Source)
       at android.support.v7.view.menu.j.setActionView(Unknown Source)
       at android.support.v7.view.g$b.a(Unknown Source)
       at android.support.v7.view.g$b.b(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.inflate(Unknown Source)
       at android.support.design.widget.NavigationView.a(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.MainActivity.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.support.v7.view.menu.j.a(Unknown Source)
       at android.support.v7.view.menu.j.setActionView(Unknown Source)
       at android.support.v7.view.g$b.a(Unknown Source)
       at android.support.v7.view.g$b.b(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.inflate(Unknown Source)
       at android.support.design.widget.NavigationView.a(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.MainActivity.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by android.content.res.Resources$NotFoundException: File res/drawable/abc_switch_thumb_material.xml from drawable resource ID #0x7f080048
       at android.content.res.Resources.loadDrawableForCookie(Resources.java:3985)
       at android.content.res.Resources.loadDrawable(Resources.java:3853)
       at android.content.res.Resources.getDrawable(Resources.java:1949)
       at android.content.Context.getDrawable(Context.java:409)
       at android.support.v4.a.a.a(Unknown Source)
       at android.support.v7.widget.l.a(Unknown Source)
       at android.support.v7.widget.l.a(Unknown Source)
       at android.support.v7.c.a.b.b(Unknown Source)
       at android.support.v7.widget.bm.a(Unknown Source)
       at android.support.v7.widget.SwitchCompat.<init>(Unknown Source)
       at android.support.v7.widget.SwitchCompat.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.support.v7.view.menu.j.a(Unknown Source)
       at android.support.v7.view.menu.j.setActionView(Unknown Source)
       at android.support.v7.view.g$b.a(Unknown Source)
       at android.support.v7.view.g$b.b(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.inflate(Unknown Source)
       at android.support.design.widget.NavigationView.a(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

Caused by android.content.res.Resources$NotFoundException: Unable to find resource ID #0x7f080012
       at android.content.res.Resources.getResourceName(Resources.java:3455)
       at android.content.res.Resources.loadDrawableForCookie(Resources.java:3941)
       at android.content.res.Resources.loadDrawable(Resources.java:3853)
       at android.content.res.TypedArray.getDrawable(TypedArray.java:776)
       at android.graphics.drawable.StateListDrawable.inflateChildElements(StateListDrawable.java:182)
       at android.graphics.drawable.StateListDrawable.inflate(StateListDrawable.java:127)
       at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:1192)
       at android.graphics.drawable.Drawable.createFromXml(Drawable.java:1086)
       at android.content.res.Resources.loadDrawableForCookie(Resources.java:3969)
       at android.content.res.Resources.loadDrawable(Resources.java:3853)
       at android.content.res.Resources.getDrawable(Resources.java:1949)
       at android.content.Context.getDrawable(Context.java:409)
       at android.support.v4.a.a.a(Unknown Source)
       at android.support.v7.widget.l.a(Unknown Source)
       at android.support.v7.widget.l.a(Unknown Source)
       at android.support.v7.c.a.b.b(Unknown Source)
       at android.support.v7.widget.bm.a(Unknown Source)
       at android.support.v7.widget.SwitchCompat.<init>(Unknown Source)
       at android.support.v7.widget.SwitchCompat.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:483)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.support.v7.view.menu.j.a(Unknown Source)
       at android.support.v7.view.menu.j.setActionView(Unknown Source)
       at android.support.v7.view.g$b.a(Unknown Source)
       at android.support.v7.view.g$b.b(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.a(Unknown Source)
       at android.support.v7.view.g.inflate(Unknown Source)
       at android.support.design.widget.NavigationView.a(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at android.support.design.widget.NavigationView.<init>(Unknown Source)
       at java.lang.reflect.Constructor.newInstance(Constructor.java)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
       at android.view.LayoutInflater.createView(LayoutInflater.java:614)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:750)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:813)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:511)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:415)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:366)
       at android.support.v7.app.l.b(Unknown Source)
       at android.support.v7.app.e.setContentView(Unknown Source)
       at com.App.onCreate(Unknown Source)
       at android.app.Activity.performCreate(Activity.java:6575)
       at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1134)
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3143)
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3300)
       at android.app.ActivityThread.access$1000(ActivityThread.java:211)
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1705)
       at android.os.Handler.dispatchMessage(Handler.java:102)
       at android.os.Looper.loop(Looper.java:145)
       at android.app.ActivityThread.main(ActivityThread.java:6946)
       at java.lang.reflect.Method.invoke(Method.java)
       at java.lang.reflect.Method.invoke(Method.java:372)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1404)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1199)

这是我的build.gradle依赖项:

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
    exclude group: 'com.android.support', module: 'support-annotations'
})
implementation 'com.afollestad.material-dialogs:core:0.9.6.0'


implementation 'com.android.support.constraint:constraint-layout:1.1.2'
testCompile 'junit:junit:4.12'

implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:customtabs:27.1.1'

implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.jakewharton:butterknife:8.8.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'

annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
implementation 'com.github.hotchemi:android-rate:1.0.1'
implementation 'com.google.android.gms:play-services-ads:15.0.1'

implementation('com.crashlytics.sdk.android:crashlytics:2.6.8@aar') {
    transitive = true;
}

implementation 'com.getkeepsafe.taptargetview:taptargetview:1.11.0'
implementation 'petrov.kristiyan:colorpicker-library:1.1.8'}

1
我不确定这是否是原因,但你的基础错误(ResourceNotFoundException)似乎都出现在从v7支持库调用v4支持库之后。如果删除support-v4:27.1.1依赖项,它仍然能够构建吗?abc_switch_thumb_material.xml位于v7 appcompat支持库中。 - Tyler V
是的,你说得对,它在没有support-v4:27.1.1的情况下可以完美构建和运行,这正是我注意到的问题,有什么建议如何修复它吗? - gautam
我认为这不会解决问题,因为支持设计库已经包含v4库,请参见https://imgur.com/a/V8KD6y2,而且我的代码广泛使用v4支持库,谢谢。 - gautam
那我有点困惑了,你说“没有支持库v4:27.1.1也能完美构建和运行”,这是什么意思呢?我错过了什么吗? - Tyler V
迄今为止还没有解决此问题,请参考以下链接:https://dev59.com/ylUL5IYBdhLWcg3wWG5I - gautam
显示剩余3条评论
3个回答

4
根据您的错误消息,基本错误(ResourceNotFoundException)是在v7支持库调用v4支持库后出现的,其中找不到abc_switch_thumb_material.xml(该文件位于v7库中)。
如果可能的话,请从gradle文件中删除对com.android.support:support-v4:27.1.1的依赖。

9
没有使用support-v4依赖库,出现了这个问题,还有其他可能的原因吗? - NeDimom Vam

1
如果您的项目启用了munufuingEnabled和shrinkingResourses == true - 请将以下行添加到您的proguard-rule中: -keep class com.google.android.material.R$drawable { *; }

0

我不确定崩溃的根本原因是什么,但当我切换到使用<Switch>时,崩溃就停止了。

<SwitchCompat><SwitchMaterial>都在生产中导致了崩溃。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接