23

今天,看起來好像Android Nougat是released。因此,我比以往更加興奮地爲分屏等新功能優化我的應用程序。我想推送適用於SDK版本24的應用程序版本,以免用戶通知我的應用程序可能無法在分屏中工作。但是,這樣做意味着我也應該更新到支持庫的24版本。與其他許多人一樣,更新到Support Library的23.2.0版本時遇到問題。但是,我遵循this answer,它解決了我的問題。現在問題已從版本號24.0.0以及支持庫中恢復。在所有我的測試中,我使用的鏈接答案中描述的gradle這個標誌:Vector Drawables標誌在支持庫上無法使用24+

vectorDrawables.useSupportLibrary = true 

同樣重要的是要注意,這只是發生在預Lolliop設備(奇巧及以下)。棒棒糖和完美的作品。當採用下面這種依賴關係,這個標記正常工作:

compile 'com.android.support:support-v4:23.4.0' 
compile 'com.android.support:appcompat-v7:23.4.0' 
compile 'com.android.support:design:23.4.0' 
compile 'com.android.support:cardview-v7:23.4.0' 

但在使用這些依賴關係的時候,我得到一個類似於我使用前旗有一個崩潰:

compile 'com.android.support:support-v4:24.2.0' 
compile 'com.android.support:appcompat-v7:24.2.0' 
compile 'com.android.support:design:24.2.0' 
compile 'com.android.support:cardview-v7:24.2.0' 

這裏是堆棧碰撞痕跡:

FATAL EXCEPTION: main 
Process: com.badon.brigham.time, PID: 2070 
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.badon.brigham.time/com.badon.brigham.time.MainActivity}: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f02004f 
     at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195) 
     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/abc_vector_test.xml from drawable resource ID #0x7f02004f 
     at android.content.res.Resources.loadDrawable(Resources.java:2101) 
     at android.content.res.Resources.getDrawable(Resources.java:700) 
     at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:346) 
     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:194) 
     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:182) 
     at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:717) 
     at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:187) 
     at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:77) 
     at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:127) 
     at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) 
     at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) 
     at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:50) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:201) 
     at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:181) 
     at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:521) 
     at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:71) 
     ... 

我完全錯過了什麼嗎?或者這已經是一個已知問題(我在Google上找不到任何東西)?任何幫助,將不勝感激。

+0

看起來像資源找不到,請確保它在正確的文件夾 –

+0

這是發生在應用程序的調試版本,或只在發佈? – lionscribe

+1

@JorgeMendez它實際上是一個在支持庫內部找不到的資源。它必須具備新的棒棒糖設備的矢量功能。 [更多](https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.8mtjh5uc4) –

回答

30

啊...我恨它,當發生這種情況。你問一個問題,然後幾個小時後自己回答。無論如何,它看起來好像我正在使用過時的構建工具版本。我所要做的就是改變一條線在我的gradle產出:

buildToolsVersion "24.0.1" 
+3

這並沒有解決我在Lollipop API之前的問題。我使用支持lib版本24.2.0,構建工具24.0.2,並且我使用aapt時提供--no-version-vectors。 –

+0

@HypotheticalintheClavicle你有相同的堆棧跟蹤和一切嗎? –

+0

@謝謝。對我來說''compileSdkVersion'是25,但'buildToolsVersion'是21.1.2。我將其更正爲「25.0.1」,並開始工作 –

1

我和dexguard有同樣的問題。 添加此行您的配置文件:

-keepresourcexmlattributenames vector/* 
+0

我沒有使用DexGuard。我正在使用ProGuard,但這只是針對發佈版本而實施的,而且我的錯誤發生在調試版本上。 –

+0

@ialfa我假設你從我以前的帖子中得到了這個解決方案。這就是我問是否僅在發行版中的原因。 – lionscribe

+0

@lionscribe是 – ialfa1987

3

在24.2.0 V4的支持庫已經分裂由谷歌爲幾個更小的模塊:

com.android.support:support-compat:24.2.0 

提供兼容性包裝新的框架API,例如作爲Context.getDrawable()和View.performAccessibilityAction()。

com.android.support:support-core-utils:24.2.0 

提供許多工具類,例如AsyncTaskLoader和PermissionChecker。

com.android.support:support-core-ui:24.2.0 

實現了各種與UI相關的組件,例如ViewPager,NestedScrollView和ExploreByTouchHelper。

com.android.support:support-media-compat:24.2.0 

Backports部分媒體框架,包括MediaBrowser和MediaSession。

com.android.support:support-fragment:24.2.0 

backports該片段框架。此模塊依賴於support-compat,support-core-utils,support-core-ui和support-media-compat。

你可以看到所有的變化here

+0

這不可能是我遇到崩潰的原因,因爲我開始在24.0.0版本中看到它。不過,有趣的是,在版本24.2.0中,未找到的資源的xml文件發生了變化,這可能與此「分割」有關。 –

+0

這是否意味着如果我們從我們的gradle文件中刪除'com.android.support:support-v4:24.2.0',並添加上面列出的6個依賴項,我們將在技術上獲得所有相同的功能? – JuiCe

+0

在將我的項目更新爲支持庫的25.0.1版本後,我今天看到了同樣的問題。坦率地說,Android庫的維護者沒有理由再次在圖書館設計中出現崩潰。目前還沒有跡象表明(我會繼續尋找)關於我需要包含的庫,以便我的項目可以找到abc_vector_test.xml –

-1
classpath 'com.android.tools.build:gradle:2.1.0' 
distributionUrl=https\://services.gradle.org/distributions/gradle-2.10-all.zip 
2

所以回答這個問題是要提醒的是,他們已經放棄了球的Android維護者,並要求他們修復自己的音樂庫。

在運行時項目中缺少文件abc_vector_text.xml,但如果您的項目沒有在第一時間使用它,缺少的文件將不會在構建中被標記。該文件的名稱表明它只是某些測試套件的一部分。

我使用以下依賴性:compile 'com.android.support:appcompat-v7:25.0.1'

因爲這個頁面顯示該文件在庫中發現:https://github.com/dandar3/android-support-v7-appcompat/blob/master/res/drawable/abc_vector_test.xml

然而,我仍然在運行時看到錯誤。

請注意,這是一個不是官方Android項目的項目的github鏈接。我似乎無法在任何地方找到正式項目中的文件。這再一次表明這只是一個馬虎維護的問題。這裏是我的堆棧跟蹤進行比較:

ontent.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.os.Looper.loop(Looper.java:137) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at dalvik.system.NativeStart.main(Native Method) 
01-02 00:02:23.130 E/AndroidRuntime(3037): Caused by: android.content.res.Resources$NotFoundException: File res/drawable/abc_vector_test.xml from drawable resource ID #0x7f020052 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.content.res.Resources.loadDrawable(Resources.java:1953) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.content.res.Resources.getDrawable(Resources.java:660) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v4.content.ContextCompat.getDrawable(ContextCompat.java:374) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:200) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:188) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.widget.AppCompatDrawableManager.checkVectorDrawableSetup(AppCompatDrawableManager.java:723) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.widget.AppCompatDrawableManager.getDrawable(AppCompatDrawableManager.java:193) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.widget.TintTypedArray.getDrawableIfKnown(TintTypedArray.java:81) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:127) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:147) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:27) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:53) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:205) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:185) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:525) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.support.v7.app.AppCompatActivity.onCreate(AppCompatActivity.java:74) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.ccc.lib.activity.LoggingAppCompatActivity.onCreate(LoggingAppCompatActivity.java:416) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.ccc.lib.debugMode.DebugModeActivity.onCreate(DebugModeActivity.java:95) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.ccc.lib.activity.IBusActivity.onCreate(IBusActivity.java:46) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at com.ccc.lib.activity.MainActivity.onCreate(MainActivity.java:173) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.Activity.performCreate(Activity.java:5104) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  ... 11 more 
01-02 00:02:23.130 E/AndroidRuntime(3037): Caused by: org.xmlpull.v1.XmlPullParserException: Binary XML file line #17: invalid drawable tag vector 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.graphics.drawable.Drawable.createFromXmlInner(Drawable.java:881) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.graphics.drawable.Drawable.createFromXml(Drawable.java:822) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  at android.content.res.Resources.loadDrawable(Resources.java:1950) 
01-02 00:02:23.130 E/AndroidRuntime(3037):  ... 33 more 
+0

儘管這不是正式版本,但是這是Google發佈到Eclipse庫項目的AAR轉換。請參閱REAMDE.md中的註釋,您可能能夠在本地機器上的AAR中查找資源文件以進行確認。 https://github.com/dandar3/android-support-v7-appcompat/tree/25.0.1 –

9

除了搖籃配置,對我來說,訣竅是活動的onCreate內加入這一行()

@Override 
public void onCreate() { 
    super.onCreate(); 
    AppCompatDelegate.setCompatVectorFromResourcesEnabled(true); 
} 

的build.gradle(項目),如果使用2.0以上版本在的build.gradle中添加以下代碼(APP)

// Gradle Plugin 2.0+ 
android { 
    defaultConfig { 
    vectorDrawables.useSupportLibrary = true 
    } 
} 

,如果使用1.5版的佈局文件中添加以下你的build.gradle(APP)

// Gradle Plugin 1.5 
android { 
    defaultConfig { 
    generatedDensities = [] 
    } 

    // This is handled for you by the 2.0+ Gradle Plugin 
    aaptOptions { 
    additionalParameters "--no-version-vectors" 
    } 
} 

,當然,你應該使用srcCompat屬性:

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

它適用於imageview,但實際上我需要爲textview的背景圖像,請幫助 –

+0

@shwetac我不知道如果你可以這樣做,但不是隻使用textView,而是可以嘗試使用imageView作爲背景圖像,並在其上使用textView。 –

+0

moustard我使用了相同的android:背景但出錯。 –

0

對我來說,它是項目根build.gradle文件中的舊版本工具包裝

dependencies { 
    .... 
    classpath 'com.android.tools.build:gradle:2.1.2' 
} 

代替

classpath 'com.android.tools.build:gradle:1.X.X' 
相關問題