2017-05-09 56 views
0

使用Android Studio我创建了一个非常基本的骨骼应用程序。它适用于android 5.1 API 22,但在android 2.3.3 API 10上调用时崩溃。**已解决** Hello World应用程序在2.3.3(API 10)上崩溃,但在5.1(API 22)上正常工作

这是崩溃日志。它显示资源未找到异常 for abc_vector_test.xml文件。

FATAL EXCEPTION: main 
java.lang.RuntimeException: Unable to start activity ComponentInfo {com.myco.k5/com.myco.k5.MainActivity}: 
android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052 
at android.app.ActivityThread.performLaunchActivity (ActivityThread.java:1651) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667) 
at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935) 
at android.os.Handler.dispatchMessage(Handler.java:99) 
at android.os.Looper.loop(Looper.java:123) 
at android.app.ActivityThread.main(ActivityThread.java:3691) 
at java.lang.reflect.Method.invokeNative(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:507) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) 
at dalvik.system.NativeStart.main(Native Method) 
Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052 
at android.content.res.Resources.loadDrawable(Resources.java:1977) 
at android.content.res.Resources.getDrawable(Resources.java:602) 
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:388) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190) 
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711) 
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195) 
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81) 
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:131) 
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:209) 
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) 
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519) 
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) 
at com.myco.k5.MainActivity.onCreate(MainActivity.java:13)  
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615) 
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)  
at android.app.ActivityThread.access$1500(ActivityThread.java:117)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)  
at android.os.Handler.dispatchMessage(Handler.java:99)  
at android.os.Looper.loop(Looper.java:123)  
at android.app.ActivityThread.main(ActivityThread.java:3691)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:507)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)  
at dalvik.system.NativeStart.main(Native Method)  
Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector 
at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:783) 
at android.graphics.drawable.Drawable.createFromXml(Drawable.java:728) 
at android.content.res.Resources.loadDrawable(Resources.java:1952) 
at android.content.res.Resources.getDrawable(Resources.java:602)  
at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:388)  
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:202)  
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:190)  
at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:711)  
at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:195)  
at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81)  
at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:131)  
at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:155)  
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:209)  
at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185)  
at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)  
at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71)  
at com.myco.k5.MainActivity.onCreate(MainActivity.java:13)  
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)  
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1615)  
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1667)  
at android.app.ActivityThread.access$1500(ActivityThread.java:117)  
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:935)  
at android.os.Handler.dispatchMessage(Handler.java:99)  
at android.os.Looper.loop(Looper.java:123)  
at android.app.ActivityThread.main(ActivityThread.java:3691)  
at java.lang.reflect.Method.invokeNative(Native Method)  
at java.lang.reflect.Method.invoke(Method.java:507)  
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847)  
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605)  
at dalvik.system.NativeStart.main(Native Method)  

我已经尝试了一些方法(请参阅下面的代码)。 文件是:

的AndroidManifest.xml:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.myco.k5" > 

<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:name="android.support.multidex.MultiDexApplication" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name=".MainActivity" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme.NoActionBar" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
</application> 

</manifest> 

activity_main.xml中:

<?xml version="1.0" encoding="utf-8"?> 
<android.support.design.widget.CoordinatorLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools"  
    android:layout_width="match_parent" 
    android:layout_height="match_parent" android:fitsSystemWindows="true" 
    tools:context=".MainActivity"> 

    <android.support.design.widget.AppBarLayout   
     android:layout_height="wrap_content" 
     android:layout_width="match_parent"   
     android:theme="@style/AppTheme.AppBarOverlay"> 

     <android.support.v7.widget.Toolbar android:id="@+id/toolbar" 
      android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" 
      android:background="?attr/colorPrimary"  
      app:popupTheme="@style/AppTheme.PopupOverlay" /> 

    </android.support.design.widget.AppBarLayout> 

    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     xmlns:app="http://schemas.android.com/apk/res-auto"  
     android:layout_width="match_parent" 
     android:layout_height="match_parent"  
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     app:layout_behavior="@string/appbar_scrolling_view_behavior" 
     tools:showIn="@layout/activity_main" tools:context=".MainActivity"> 

     <TextView android:text="Hello World!" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" /> 
    </RelativeLayout> 
</android.support.design.widget.CoordinatorLayout> 

MainActivity.java:

package com.myco.k5; 

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.app.AppCompatDelegate; 
import android.support.v7.widget.Toolbar; 
import android.view.Menu; 
import android.view.MenuItem; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 

应用程序的文件的build.gradle:

apply plugin: 'com.android.application' 

    android { 
     compileSdkVersion 25 
     buildToolsVersion "23.0.1" 

     defaultConfig { 
      applicationId "com.myco.k5" 
      minSdkVersion 10 
      targetSdkVersion 25 
      versionCode 1 
      versionName "1.0" 
      multiDexEnabled true 
     } 
     dexOptions { 
      incremental true 
      javaMaxHeapSize "4g" 
     } 
     buildTypes { 
      release { 
       minifyEnabled false 
       proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' 
      } 
     } 
    } 

    dependencies { 
     compile fileTree(dir: 'libs', include: ['*.jar']) 
     testCompile 'junit:junit:4.12' 
     compile 'com.android.support:appcompat-v7:25.3.1' 
     compile 'com.android.support:design:25.3.1' 
     compile 'com.android.support:multidex:1.0.1' 
    } 

Top level build.gradle file: 

    buildscript { 
     repositories { 
      jcenter() 
     } 
     dependencies { 
      classpath 'com.android.tools.build:gradle:1.3.0' 

      // NOTE: Do not place your application dependencies here; they belong 
      // in the individual module build.gradle files 
     } 
    } 

    allprojects { 
     repositories { 
      jcenter() 
     } 
    } 

    task clean(type: Delete) { 
     delete rootProject.buildDir 
    } 

请关于如何解决这个崩溃的建议。

解决:通过以下

  1. 在应用级的build.gradle文件解决了这个使用

    的Android {
    //你的项目在这里
    generatedDensities = [] } //标志通知aapt保持属性ID大约在 aaptOptions {0}附加参数“ - 无-version-载体” }

  2. 在顶层的build.gradle文件改变类路径从1.4.0至1.5.0

类路径“COM .android.tools.build:gradle:1.5.0' //此前它是1.4.0这里

+2

的可能的复制[如何正确使用向后兼容的矢量绘制对象与最新的Android支持库?](http://stackoverflow.com/questions/40678947/how-to-properly-use-backwards-compatible-vector-drawable-with-latest-android-sup) – VishnuSP

+0

VishnuSP - 我不使用abc_vector_test in我的代码。它似乎是一个Android的内部android文件给出错误。 – Anilb

+0

好的。尝试使用'buildToolsVersion“24.0.1”或更高版本。 也看看[支持矢量绘图](https://android-developers.googleblog.com/2016/02/android-support-library-232.html) – VishnuSP

回答

2

在你的情况下,你必须启用Vector Drawable才能在旧的Android版本中使用它。将其添加到您的build.gradle文件(模块应用程序)中。

对于摇篮插件2.0+

android { 
     defaultConfig { 
     vectorDrawables.useSupportLibrary = true 
     } 
    } 

对于摇篮插件1。5或低于

android { 
     defaultConfig { 
     // Stops the Gradle plugin’s automatic rasterization of vectors 
     generatedDensities = [] 
     } 
     // Flag notifies aapt to keep the attribute IDs around 
     aaptOptions { 
     additionalParameters "--no-version-vectors" 
     } 
    } 

做之后,你必须改变你的ImageView使用COMPAT SRC这样的:

<ImageView 
    app:srcCompat="@drawable/abc_vector_test" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"/> 
+0

Luiz - 我在使用build.gradle文件中的任何一组行时遇到了gradle sync中的错误。 与您输入vectorDrawables线,我得到这个: 错误:(14,0)找不到财产 'vectorDrawables' 上ProductFlavor_Decorated {名=主,尺寸= NULL,.... 随着generatedDensities从您的输入线,我得到这个: 错误:(14,0)没有这样的属性:类generatedDensities:com.android.build.gradle.internal.dsl.ProductFlavor_Decorated ... – Anilb

+0

另外,我没有在我的代码中使用任何ImageView与abc_vector_test。它似乎是一个Android的内部android文件给出错误。 – Anilb

+0

@ chris-banes - 你想看看我的问题吗? – Anilb

相关问题