web-dev-qa-db-ja.com

Android vectorDrawables.useSupportLibrary = trueはアプリを停止しています

GradleでvectorDrawables.useSupportLibrary = trueを使用すると、残念ながら停止したアプリを実行できます。 vectorDrawables.useSupportLibrary = trueを削除すると、アプリは機能します。

私のグラドル:

apply plugin: 'com.Android.application'

Android {
    compileSdkVersion 25
    buildToolsVersion "25.0.2"
    defaultConfig {
        vectorDrawables.useSupportLibrary = true
        applicationId "com.helikanon.firstapp"
        minSdkVersion 15
        targetSdkVersion 25
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"

    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    androidTestCompile('com.Android.support.test.espresso:espresso-core:2.2.2', {
        exclude group: 'com.Android.support', module: 'support-annotations'
    })
    compile 'com.Android.support:appcompat-v7:25.1.0'
    compile 'com.Android.support:design:25.1.0'
    compile 'com.jakewharton:butterknife:8.4.0'
    compile 'com.Android.support:support-v4:25.1.0'
    testCompile 'junit:junit:4.12'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'
    compile 'uk.co.chrisjenx:calligraphy:2.2.0'
    compile 'com.google.Android.gms:play-services-ads:10.0.1'
}

エラー:

E/AndroidRuntime: FATAL EXCEPTION: main
                  Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.helikanon.firstapp/com.helikanon.firstapp.activities.MainActivity}: Android.view.InflateException: Binary XML file line #62: Error inflating class Button
                      at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2059)
                      at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2084)
                      at Android.app.ActivityThread.access$600(ActivityThread.Java:130)
                      at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1195)
                      at Android.os.Handler.dispatchMessage(Handler.Java:99)
                      at Android.os.Looper.loop(Looper.Java:137)
                      at Android.app.ActivityThread.main(ActivityThread.Java:4745)
                      at Java.lang.reflect.Method.invokeNative(Native Method)
                      at Java.lang.reflect.Method.invoke(Method.Java:511)
                      at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:786)
                      at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:553)
                      at dalvik.system.NativeStart.main(Native Method)
                   Caused by: Android.view.InflateException: Binary XML file line #62: Error inflating class Button
                      at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:704)
                      at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:746)
.
.
.

Api 16とApi 19を使用するとアプリがクラッシュしますが、Api 23を使用すると機能します。

22
Alexander

Vector Drawablesは、Lollipop以前のImageViewを除く他のビューでは使用できません。

こちらをご覧ください SO Answer google developer advocate.

AppCompatユーザーの場合、バージョン23.2.0/23.2.1の実装で見つかった問題のために、Lollipop以前のデバイス上のリソースからベクトルドロウアブルを使用できる機能を削除することにしました[ https:// code.google.com/p/Android/issues/detail?id=205236https://code.google.com/p/Android/issues/detail?id=204708 ] 。 _app:srcCompat_およびsetImageResource()の使用は引き続き機能します。

Vector Drawablespre-Lollipopを使用する場合、useはそれをドロアブルに変換することでプログラム的に設定できます。

_Drawable drawable;

if (Android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
     drawable = context.getResources().getDrawable(drawableResId, context.getTheme());
} else {
     drawable = VectorDrawableCompat.create(context.getResources(), drawableResId, context.getTheme());
}

button.setCompoundDrawablesWithIntrinsicBounds(drawable, null, null, null);
_
30
Vipul Asri

私はAndroidでバックグラウンドタスクとサービスを学習しようとする練習プロジェクトの1つに参加しました。サンプルコードをプルしたとき、最初は this エラーのためにコンパイルされませんでした。そこで、コンパイルの問題を取り除くために、アプリのbuild.gradleファイルに以下のタグを追加しました。

Android {
    defaultConfig{
        vectorDrawables.useSupportLibrary = true
    }
}

さて、この構成を追加した瞬間、アプリもMicrosoftでクラッシュし始めましたAndroidシミュレーターがOPで説明したとおりの方法で。

私の現在の焦点はバックグラウンドタスクについて学ぶことなので、アプリのデバッグを始めたいと思いました。そのため、上記の構成設定を再度削除しました。それに加えて、描画可能なリソースのpathタグのAndroid:fillColorという名前の属性も削除しました(または、値@color/colorAccent#FF000000などの16進コードに置き換えることもできます)。それを削除(または16進コードで変更)した後、私の最初のコンパイルエラーは来ませんでした:

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="80dp"
    Android:height="80dp"
    Android:viewportWidth="24"
    Android:viewportHeight="24">

    <path
        Android:fillColor="@color/colorAccent"
        Android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5
18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" />
    <path
        Android:pathData="M0 0h24v24H0z" />
</vector>

削除後は次のようになります。

<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:width="80dp"
    Android:height="80dp"
    Android:viewportWidth="24"
    Android:viewportHeight="24">

    <path
        Android:pathData="M16.01 7L16 3h-2v4h-4V3H8v4h-0.01C7 6.99 6 7.99 6 8.99v5.49L9.5
18v3h5v-3l3.5-3.51v-5.5c0-1-1-2-1.99-1.99z" />
    <path
        Android:pathData="M0 0h24v24H0z" />
</vector>

私のMS AndroidエミュレーターにはKitKat(4.4)がありました。アプリがAndroid as Vipulの受け入れられた答えに言及されています。

6
RBT

VectorDrawableCompatを使用するには、Android.defaultConfig.vectorDrawables.useSupportLibrary = true。を設定する必要があります。

VectorDrawableCompatを使用するには、プロジェクトに2つの変更を加える必要があります。最初に、build.gradleファイルでAndroid.defaultConfig.vectorDrawables.useSupportLibrary = trueを設定し、次に、Android:srcの代わりにapp:srcCompatを使用してベクターDrawableを参照します。

1)build.gradle(Module:app)に移動し、Androidブロックに次の行を追加します。このように見えるはずです。

Android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "..."
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "Android.support.test.runner.AndroidJUnitRunner"
------> Android.defaultConfig.vectorDrawables.useSupportLibrary = true
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-Android-optimize.txt'), 'proguard-rules.pro'
        }
    }
}

2)ソースをsrcCompatとして参照し、アプリケーションでベクターグラフィックスを使用できるようにします。

app:srcCompat= "@ drawable/plane"

3
Alexander