Si j'utilise vectorDrawables.useSupportLibrary = true dans gradle, puis lancez l'application, elle s'est malheureusement arrêtée. Si je supprime vectorDrawables.useSupportLibrary = true l'application fonctionne.
Mon gradle:
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'
}
Les erreurs:
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)
.
.
.
L'application se bloque lorsque j'utilise Api 16 et Api 19, mais lorsque j'utilise Api 23, cela fonctionne.
Vous ne pouvez pas utiliser Drawables vectoriels dans d'autres vues, sauf ImageView
dans la pré-Lollipop.
Veuillez voir ceci SO Answer par Google Developer Advocate.
Pour les utilisateurs d'AppCompat, nous avons décidé de supprimer la fonctionnalité qui vous permet d'utiliser les éléments vectoriels à dessiner des ressources sur les appareils pré-Lollipop en raison de problèmes trouvés dans l'implémentation de la version 23.2.0/23.2.1 [ https: // code.google.com/p/Android/issues/detail?id=205236 , https://code.google.com/p/Android/issues/detail?id=204708 ] . L'utilisation de
app:srcCompat
EtsetImageResource()
continue de fonctionner.
Si vous souhaitez utiliser la pré-sucette Vector Drawables , use peut la définir par programme en la convertissant en une drawable.
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);
J'étais sur l'un des projets d'entraînement essayant d'apprendre des tâches et des services d'arrière-plan dans Android. Lorsque j'ai extrait leur exemple de code, il ne se compilait pas initialement en raison d'une erreur this . J'ai donc ajouté la balise ci-dessous dans le fichier build.gradle de l'application pour se débarrasser du problème de compilation:
Android {
defaultConfig{
vectorDrawables.useSupportLibrary = true
}
}
Maintenant, au moment où j'ai ajouté cette configuration, mon application a également commencé à planter dans Microsoft Android Simulator exactement comme OP l'a décrit.
Étant donné que mon objectif actuel était d'apprendre les tâches d'arrière-plan, je voulais donc commencer à déboguer mon application. J'ai donc supprimé à nouveau le paramètre de configuration ci-dessus. En plus de cela, j'ai également supprimé un attribut nommé Android:fillColor
dans path
tag d'une de mes ressources dessinables (ou vous pouvez également remplacer la valeur @color/colorAccent
avec un code hexadécimal tel que #FF000000
). Après l'avoir supprimé (ou modifié avec du code hexadécimal), mon erreur de compilation initiale ne s'est pas produite:
<?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>
Après le retrait, il ressemble à:
<?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>
Mon MS Android avait KitKat (4.4). Mon code se bloquait alors que mon application essayait d'utiliser des dessins vectoriels sur une version pré-Lollipop de Android as mentionné dans la réponse acceptée de Vipul.
Pour utiliser VectorDrawableCompat, vous devez définir Android.defaultConfig.vectorDrawables.useSupportLibrary = true.
Pour utiliser VectorDrawableCompat, vous devez apporter deux modifications à votre projet. Tout d'abord, définissez Android.defaultConfig.vectorDrawables.useSupportLibrary = true dans votre fichier build.gradle, et ensuite, utilisez app: srcCompat au lieu d'Android: src pour faire référence aux dessins vectoriels.
1) Accédez à votre build.gradle (Module: app) et ajoutez la ligne suivante au bloc Android. Cela devrait ressembler à ça.
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) Reportez-vous à la source en tant que srcCompat pour permettre à votre application d'utiliser des graphiques vectoriels.
app: srcCompat = "@ drawable/plane"