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を使用すると機能します。
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=205236 、 https://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);
_
私は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の受け入れられた答えに言及されています。
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"