使用可绘制矢量SDK&lt; 21:二进制XML文件行#68:错误导致类<unknown>无效的可绘制标记向量

时间:2018-05-11 20:31:36

标签: android android-layout android-studio android-drawable android-appcompat

我在Linux上使用android studio 3.1.2,使用以下设置

compileSdkVersion 27
buildToolsVersion '27.0.3'
minSdkVersion 16
targetSdkVersion 19
Gradle version: 4.4
Android plugin version: 3.1.2

我的项目使用以下依赖项:

implementation 'com.google.android.exoplayer:exoplayer-core:2.8.0'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.google.firebase:firebase-core:15.0.2'
implementation 'com.google.firebase:firebase-crash:15.0.2'
implementation 'com.google.firebase:firebase-messaging:15.0.2'
implementation 'com.google.android.gms:play-services-plus:15.0.1'
implementation 'com.android.support:palette-v7:27.1.1'
implementation 'com.google.code.gson:gson:2.8.0'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.0'

在棒棒糖前设备上 - SDK&lt; 21,我得到以下例外:

E/UncaughtException: java.lang.RuntimeException: Unable to start activity ComponentInfo{ro.aripisprecer.radiocrestin/ro.aripisprecer.radiocrestin.HomeScreen}: android.view.InflateException: Binary XML file line #68: Error inflating class <unknown>

Caused by: android.view.InflateException: Binary XML file line #68: Error inflating class <unknown>

Caused by: java.lang.reflect.InvocationTargetException
                         at java.lang.reflect.Constructor.constructNative(Native Method)
                         at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
                         at android.view.LayoutInflater.createView(LayoutInflater.java:595)
                         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670) 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
                         at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                         at ro.aripisprecer.radiocrestin.PlayRadio.onCreateView(PlayRadio.java:350) 
                         at android.app.Fragment.performCreateView(Fragment.java:1700) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                         at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
                         at android.app.Activity.performStart(Activity.java:5240) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                         at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:136) 
                         at android.app.ActivityThread.main(ActivityThread.java:5017) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                         at dalvik.system.NativeStart.main(Native Method) 
                      
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_share_black_24dp.xml from drawable resource ID #0x7f08009b
                         at android.content.res.Resources.loadDrawable(Resources.java:2101)
                         at android.content.res.TypedArray.getDrawable(TypedArray.java:602)
                         at android.view.View.<init>(View.java:3554)
                         at android.view.View.<init>(View.java:3484)
                         at java.lang.reflect.Constructor.constructNative(Native Method) 
                         at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                         at android.view.LayoutInflater.createView(LayoutInflater.java:595) 
                         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670) 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
                         at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                         at ro.aripisprecer.radiocrestin.PlayRadio.onCreateView(PlayRadio.java:350) 
                         at android.app.Fragment.performCreateView(Fragment.java:1700) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                         at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
                         at android.app.Activity.performStart(Activity.java:5240) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                         at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:136) 
                         at android.app.ActivityThread.main(ActivityThread.java:5017) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                         at dalvik.system.NativeStart.main(Native Method) 

Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector
                         at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:933)
                         at android.graphics.drawable.Drawable.createFromXml(Drawable.java:877)
                         at android.content.res.Resources.loadDrawable(Resources.java:2097)
                         at android.content.res.TypedArray.getDrawable(TypedArray.java:602) 
                         at android.view.View.<init>(View.java:3554) 
                         at android.view.View.<init>(View.java:3484) 
                         at java.lang.reflect.Constructor.constructNative(Native Method) 
                         at java.lang.reflect.Constructor.newInstance(Constructor.java:423) 
                         at android.view.LayoutInflater.createView(LayoutInflater.java:595) 
                         at com.android.internal.policy.impl.PhoneLayoutInflater.onCreateView(PhoneLayoutInflater.java:56) 
                         at android.view.LayoutInflater.onCreateView(LayoutInflater.java:670) 
                         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:695) 
                         at android.view.LayoutInflater.rInflate(LayoutInflater.java:756) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:492) 
                         at android.view.LayoutInflater.inflate(LayoutInflater.java:397) 
                         at ro.aripisprecer.radiocrestin.PlayRadio.onCreateView(PlayRadio.java:350) 
                         at android.app.Fragment.performCreateView(Fragment.java:1700) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 
                         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062) 
                         at android.app.BackStackRecord.run(BackStackRecord.java:684) 
                         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) 
                         at android.app.Activity.performStart(Activity.java:5240) 
                         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) 
                         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) 
                         at android.app.ActivityThread.access$800(ActivityThread.java:135) 
                         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196) 
                         at android.os.Handler.dispatchMessage(Handler.java:102) 
                         at android.os.Looper.loop(Looper.java:136) 
                         at android.app.ActivityThread.main(ActivityThread.java:5017) 
                         at java.lang.reflect.Method.invokeNative(Native Method) 
                         at java.lang.reflect.Method.invoke(Method.java:515) 
                         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779) 
                         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595) 
                         at dalvik.system.NativeStart.main(Native Method) 

我已经遵循了其他建议并取而代之:

  1. android:srcapp:srcCompat
  2. build.gradle
  3. 中加入了vectorDrawables.useSupportLibrary = true
  4. AppCompatDelegate.setCompatVectorFromResourcesEnabled(true)公共类中,HomeScreen扩展了AppCompatActivity {
  5. 但这并没有解决我的问题。

    从第68行开始,查看来自homescreen_layout.xml的摘录

     <View
        android:layout_width="14dp"
        android:layout_height="14dp"
        android:layout_marginBottom="6dp"
        android:layout_marginEnd="5dp"
        android:layout_marginRight="5dp"
        android:background="@drawable/ic_share_black_24dp"
        app:layout_constraintBottom_toBottomOf="@+id/music_image"
        app:layout_constraintRight_toRightOf="@+id/music_image" />
    

    这是ic_share_black_24dp.xml文件的内容:

    <vector xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    
    android:width="14dp"
    android:height="14dp"
    android:viewportHeight="24.0"
    android:viewportWidth="24.0"
    tools:ignore="VectorRaster">
    
    <path
        android:fillColor="@color/red_color_toolbar"
        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z" />
    

    我在这里做错了什么?任何帮助表示赞赏。

    谢谢!

1 个答案:

答案 0 :(得分:0)

从Logcat

中可以看出2个错误
 1. Caused by: android.content.res.Resources$NotFoundException: File res/drawable/ic_share_black_24dp.xml from drawable resource ID #0x7f08009b
 2. Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #1: invalid drawable tag vector

如果升级后也遇到同样的错误,那么

逐一尝试,不管有效。

  • 确保您的命名匹配,因为它无法找到它,我建议您:

    一个。 Invalidate Caches/Restart

    湾如果没有,删除 .idea&amp;来自项目位置的.gradle

    ℃。如果没有,删除资源,清除项目,重新创建资源

  • 确保您的ic_share_black_24dp未在项目的其他任何位置使用,即左侧抽屉面板(导航菜单)&amp;右侧面板(导航菜单),如果是,则重命名其中一个资源

此外,请尝试使用此矢量资源

<vector xmlns:android="http://schemas.android.com/apk/res/android"
        android:width="24dp"
        android:height="24dp"
        android:viewportWidth="24.0"
        android:viewportHeight="24.0">
    <path
        android:fillColor="#FF000000"
        android:pathData="M18,16.08c-0.76,0 -1.44,0.3 -1.96,0.77L8.91,12.7c0.05,-0.23 0.09,-0.46 0.09,-0.7s-0.04,-0.47 -0.09,-0.7l7.05,-4.11c0.54,0.5 1.25,0.81 2.04,0.81 1.66,0 3,-1.34 3,-3s-1.34,-3 -3,-3 -3,1.34 -3,3c0,0.24 0.04,0.47 0.09,0.7L8.04,9.81C7.5,9.31 6.79,9 6,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3c0.79,0 1.5,-0.31 2.04,-0.81l7.12,4.16c-0.05,0.21 -0.08,0.43 -0.08,0.65 0,1.61 1.31,2.92 2.92,2.92 1.61,0 2.92,-1.31 2.92,-2.92s-1.31,-2.92 -2.92,-2.92z"/>
</vector>

修改:在您的View标记中,请更改此内容:

android:background="@drawable/ic_share_black_24dp"

到此:

app:srcCompat="@drawable/ic_share_black_24dp"