web-dev-qa-db-fra.com

Lancer "cordova build Android" - impossible de trouver l'attribut Android: fontVariationSettings et Android: ttcIndex

Quand j'exécute cordova build Android --buildConfig xxxx --release, .__, j'obtiens l'erreur suivante:

ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute Android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute Android:ttcIndex

La chose étrange est que j'utilise deux machines MacOS pour la compilation, et je ne reçois cette erreur que sur l'une d'elles pour le même code.

Voici le résultat de ./gradlew cdvPrintProps que je reçois sur les deux machines:

:cdvPrintProps
cdvCompileSdkVersion=26
cdvBuildToolsVersion=27.0.3
cdvVersionCode=null
cdvMinSdkVersion=21
cdvBuildMultipleApks=true
cdvReleaseSigningPropertiesFile=release-signing.properties
cdvDebugSigningPropertiesFile=null
cdvBuildArch=null
computedVersionCode=152045989
computedArmv7VersionCode=1520459892
computedX86VersionCode=1520459894

Ci-dessous la liste des plugins utilisés:

$ cordova plugins list
cordova-custom-config 5.0.2 "cordova-custom-config"
cordova-fabric-plugin 1.1.10 "cordova-fabric-plugin"
cordova-open-native-settings 1.5.0 "Native settings"
cordova-plugin-app-event 1.2.1 "Application Events"
cordova-plugin-app-version 0.1.9 "AppVersion"
cordova-plugin-camera 2.4.1 "Camera"
cordova-plugin-compat 1.2.0 "Compat"
cordova-plugin-console 1.1.0 "Console"
cordova-plugin-crosswalk-webview 2.4.0 "Crosswalk WebView Engine"
cordova-plugin-datepicker 0.9.2 "DatePicker"
cordova-plugin-device 2.0.1 "Device"
cordova-plugin-email 1.2.7 "EmailComposer"
cordova-plugin-file 4.3.3 "File"
cordova-plugin-file-transfer 1.6.3 "File Transfer"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-network-information 1.3.4 "Network Information"
cordova-plugin-secure-storage 2.6.8 "SecureStorage"
cordova-plugin-splashscreen 4.1.0 "Splashscreen"
cordova-plugin-statusbar 2.4.1 "StatusBar"
cordova-plugin-whitelist 1.3.3 "Whitelist"
cordova.plugins.diagnostic 3.9.2 "Diagnostic"
de.appplant.cordova.plugin.local-notification 0.8.5 "LocalNotification"
ionic-plugin-keyboard 2.2.1 "Keyboard"

Comment puis-je résoudre ce problème?

94

Il suffit de mettre la suite dans build-extras.gradle

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-v4:27.1.0'
    }
}
100
helmson helmson

Google a publié la nouvelle version 28.0.0-alpha1 de com.Android.support:support-v4 qui ajoute 2 nouveaux attributs (Android: fontVariationSettings et Android: ttcIndex) ..__ Certains plug-ins utilisent les dernières bibliothèques prises en charge par Android, ce qui entraîne des incompatibilités indésirables.

Option 1: Installez le plugin cordova-Android-support-gradle-release.

Un plugin bien documenté qui "aligne les différentes versions des bibliothèques de support Android spécifiées par d'autres plugins sur une version spécifique". Testé sans aucun comportement destructeur. 

cordova plugin add cordova-Android-support-gradle-release --fetch

Lisez la documentation pour un ensemble complet d’options: Readme

Option 2: Ajouter l'extrait de code suivant dans build.gradle sous plates-formes/Android

/** 
IMPORTANT - Manually added
Problem: 8 March 2018 - Google released version support-v4:28.0.0-alpha1 
which breaks the project with following error: unable to find attribute 
Android:fontVariationSettings and Android:ttcIndex

Effect: Force a specific version of the library
*/

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-v4:27.1.0'
}

Attention: Le code dans build.gradle sera écrasé si vous supprimez/ajoutez la plate-forme Android. Si vous ne souhaitez pas utiliser le plug-in pour une raison quelconque ou si cela ne fonctionne pas pour vous, créez plutôt un hook et écrasez le fichier à chaque fois. Vérifiez le 2ème commentaire ici .

Si le problème persiste, vous pouvez essayer:

cordova platform rm Android
cordova platform add Android

OU

Assurez-vous de ne pas avoir une version précédente de l'application installée sur le périphérique que vous testez, car vous recevrez une erreur ambiguë lorsqu'il tentera de rétrograder la version existante: "INSTALL_FAILED_VERSION_DOWNGRADE" et "UnhandledPromiseRejectionWarning: Unhandled promesse de rejet " 

75
Andrew Radulescu

La même erreur se passe pour moi. Apparemment, une nouvelle version de la bibliothèque com.Android.support:support-v4 a été publiée et le plug-in que j'utilise définit com.Android.support:support-v4:+ en tant que dépendance dans plugin.xml. Le signe + signifie qu'il obtiendra la dernière version (28.0.0), ce qui semble être incompatible avec les autres plugins.

J'ai pu construire une version de développement en modifiant toutes les dépendances du plugin de com.Android.support:support-v4:+ à com.Android.support:support-v4:27.1.0. De plus, j'ai exécuté ionic cordova platform remove Android et ionic cordova platform add Android. J'espère que cela aide, au moins pour le développement.

31
avmatte

Je viens de résoudre ce problème en allant dans le dossier plate-forme/Android et en modifiant le fichier project.properties) et en remplaçant com.Android.support:support-v4:+ par com.Android.support:support-v4:27.1.0.

25
Ahmed

Si vous avez vraiment besoin d'une solution rapide à ce problème pour exécuter votre construction, vous pouvez essayer d'ajouter les lignes suivantes dans votre fichier plateformes/Android/build.gradle:

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-v4:27.1.0'
    }
}

Quoi qu'il en soit, définir la version ici n'est pas une solution durable.

21
stu

C'est étrange, mais cela fonctionne lorsque j'ajoute les lignes ci-dessous avec les mêmes versions.

Voici mes lignes associées dans le fichier platforms/Android/build.gradle:

dependencies {
  compile fileTree(dir: 'libs', include: '*.jar')
  // SUB-PROJECT DEPENDENCIES START
  debugCompile(project(path: "CordovaLib", configuration: "debug"))
  releaseCompile(project(path: "CordovaLib", configuration: "release"))
  compile "com.Android.support:support-v4:26.+"
  compile "com.Android.support:appcompat-v7:26.+"
  // SUB-PROJECT DEPENDENCIES END
}

// ADDED THESE LINES
configurations.all {
  resolutionStrategy.force 'com.Android.support:support-v4:26+'
}

Dans mon projet, le problème était dû au plugin 'cordova-plugin-crosswalk-webview'.

15

Voici un moyen facile de résoudre ce problème qui persistera lors de la reconstruction du répertoire de la plate-forme et vous n'aurez plus besoin de parcourir tous vos plugins pour essayer de trouver un coupable. Créez un fichier build-extras.gradle avec le contenu suivant:

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-v4:27.1.0'
    }
}

Puis créez le fichier after_platform_add/010_copy_build_extras.js avec le contenu suivant:

#!/usr/bin/env node

var fs = require('fs');

var rootdir = process.argv[2];
var Android_dir = `${rootdir}/platforms/Android`;
var gradle_filename = 'build-extras.gradle';
var gradle_file = `${rootdir}/${gradle_filename}`;
if (fs.existsSync(Android_dir) && fs.existsSync(gradle_file)) {
  fs.createReadStream(gradle_file)
    .pipe(fs.createWriteStream(`${Android_dir}/${gradle_filename}`));
}

Maintenant, recréez la plate-forme Android et il utilisera la bibliothèque de support épinglé.

8
Brad Pitcher

Je faisais face à la même erreur. A effectué une recherche complète dans le répertoire plugin pourcom.Android.support:support-v4:+et l'a remplacé par un code de version statique. 

Pour moi,com.Android.support:support-v4:23.4.0fonctionnait parfaitement. Il n'était alors pas nécessaire de supprimer et d'ajouter de nouveau la plateforme Android.

8
cpro90

J'ai la même erreur mais pas dans la construction de Cordova. Une nouvelle version du com.Android.support:appcompat-v7 et des dépendances. Mais la version incompatible se trouve dans le troisième package dépendant de com.Android.support:appcompat-v7. Je ne peux donc pas réparer le troisième package avec la solution de @avmatte .

Utilisez la solution de @ Sai Teja pour trouver un paquet incompatible:

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

Puis corrigé avec:

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-compat:{the_same_version}'
        force 'com.Android.support:appcompat-v7:{the_same_version}'
        force 'com.Android.support:support-core-utils:{the_same_version}'
        force 'com.Android.support:support-core-ui:{the_same_version}'
        force 'com.Android.support:support-fragment:{the_same_version}'
        force 'com.Android.support:support-annotations:{the_same_version}'
        ...
    }
}

Le code ci-dessus force la version des dépendances.

8
doit

Quelques conseils pour les développeurs Kotlin:

Si vous suivez ces réponses ici, vous êtes certain de ne pas avoir la bibliothèque support-v4 dans votre projet mais que vous voyez toujours cette erreur, jetez un œil à la bibliothèque ktx.

Je viens de comprendre que j'utilise la dernière version de 1.0.0-alpha1 pour la bibliothèque ktx et que cette erreur est visible; après que je suis revenu à la version 0.3, tout est revenu à la normale maintenant.

4
Anthonyeef

J'avais le même problème à l'improviste hier. Cela a commencé de manière aléatoire, mais d'après ce que j'ai lu, il semble que cela a à voir avec une mise à jour mentionnée ci-dessus par @ cpro90. Cependant, j'ai essayé et je n'ai pas pu trouver où faire le changement manuel nécessaire.

Finalement, j'ai identifié que le problème était causé par mon plugin cordova-plugin-crosswalk-webview. Sur GitHub, j'ai trouvé le problème sur le plug-in à reproduire ce matin, et il a eu plus de 520 vues à l'heure du déjeuner.

@UNUMObile a suggéré ce qui suit dans le fichier build.gradle pour forcer une version antérieure de manière globale:

configurations.all {
    resolutionStrategy.force 'com.Android.support:support-v4:24.0.0'
}

Cela a immédiatement fonctionné pour moi et peut aider les autres avec d'autres plugins qui ont également eu leur dépendance sur 'com.Android.support:support-4:<28. La nouvelle version 28 semble être le problème.

J'espère que cela aide quelqu'un à aller de l'avant.

4
Chris Scutt

Certaines de vos bibliothèques devraient utiliser 

com.Android.support:support-v4:+

Trouvez celui qui est, avec

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

Et ajoutez cette bibliothèque en tant que module si elle n'utilise pas de version spécifique dans sa dernière mise à jour (soulevez également un problème dans cette bibliothèque!;))

Merci à @avmatte!

4
Sai Teja

J'ai trouvé la solution sur Ionic Forum, qui était la seule solution qui fonctionnait pour moi:

Exécuter:

ionic cordova platform rm Android

Exécuter:

plate-forme ionique cordova ajouter [email protected]

Exécuter:

ionic cordova plugin ajoute cordova-plugin-androidx

Exécuter:

ionic cordova plugin ajoute cordova-plugin-androidx-adapter

Assurez-vous que votre fichier gradle.properties a:

cdvMinSdkVersion = 19

Assurez-vous que votre build.gradle a:

project.ext { defaultBuildToolsVersion="28.0.3" //String 

defaultMinSdkVersion=19 //Integer - Minimum requirement is Android 4.4 

defaultTargetSdkVersion=28 //Integer - We ALWAYS target the latest by default 

defaultCompileSdkVersion=28 //Integer - We ALWAYS compile with the latest by default }

Assurez-vous que votre config.xml a:

<preference name="Android-minSdkVersion" value="19" />

à partir de: https://forum.ionicframework.com/t/firebase-app-unable-to-compile-on-Android-with-aapt-error/166564/7

qui est également traité dans la réponse stackoverflow: https://stackoverflow.com/a/56656680/839691

4
alpere

Dans votre fichier build.gradle, ajoutez 

configurations.all {
    resolutionStrategy {
        force 'com.Android.support:support-v4:27.1.0'
    }
}

Et dans votre fichier project.properties, remplacez cordova.system.library.3 par cordova.system.library.3=com.Android.support:support-v13:27.+.

3
aman

Ajoutez les lignes suivantes à vos plateformes/Android/build.gradle 

  configurations.all {
        resolutionStrategy {
            force 'com.Android.support:support-v4:27.1.0'
        }
    }

si le problème persiste, essayez d'exécuter cette commande:

cordova plugin add cordova-Android-support-gradle-release --fetch
3
karan bhatia

Pour les utilisateurs Phonegap Build, comme indiqué dans un commentaire, vous pouvez essayer this plugin dont le but est pour éviter les échecs de construction causés par l'inclusion de différentes versions des bibliothèques de support.

2
user276648

J'ai eu le même problème après l'installation du plugin cordova-plugin-file-opener2. Il a été supprimé après avoir fait: Option 1: installer le plug-in cordova-Android-support-gradle-release . Plugin cordova add

1
DineshS

Résolvez ce problème en plaçant les lignes de code suivantes dans le fichier plates-formes/Android/app/build.gradle, juste après le bloc buildscript {}:

configurations.all {
    resolutionStrategy {
            force 'com.Android.support:support-v4:27.1.0'
    }
}
1
Kush

Si vous utilisez ionic et que vous obtenez cette erreur, résolvez-la en procédant comme suit:

-cordova platform rm Android
-cordova platform add Android

Cela peut être une solution possible

Une autre approche avec la même solution est de créer un crochet. Il est persistant (après la réinstallation de la plate-forme), vous pouvez le commettre et il n'est pas nécessaire d'ajouter de nouveau la plate-forme.

% project%\scripts\Android\android-support-version.js

#!/usr/bin/env node

var fs = require('fs');

function replace_strings_in_file(filename, replacementsObject) {
  if (fs.existsSync(filename)) {
    var data = fs.readFileSync(filename, 'utf8');
    Object.keys(replacementsObject).forEach(function (to_replace) {
      var replace_with = replacementsObject[to_replace];
      data = data.replace(to_replace, replace_with);
    });
    console.log(data);
    fs.writeFileSync(filename, data, 'utf8');
  } else {
    console.log('file not found');
  }
}

module.exports = function (context) {
  var rootdir = process.argv[2];
  if (rootdir) {
    replace_strings_in_file("platforms/Android/project.properties", {'com.Android.support:support-v4:+': 'com.Android.support:support-v4:27.1.0'});
    console.log('com.Android.support version fix');
  }
};

Crochet d'initialisation dans la configuration

% project%\config.xml

...
<platform name="Android">
  <hook src="scripts/Android/android-support-version.js" type="before_build" />
  ...

Installez la dépendance fs à votre projet:

npm i fs --save-dev

Exécuter la construction:

cordova construire Android

0
pavelety

SUPER SIMPLE ETCORRECTEMOYEN DE LE RÉSOUDRE!

Il suffit de mettre à jour le sdk et d'ajouter la dernière version 2 d'Android ... et de redémarrer l'ordinateur! Terminé... 

Nous avons maintenant le temps de parler de voitures et de sports ...

0
Ari Waisberg

mises à jour de la réponse de @Brad Pitcher:

hooks/copy_build_extras.js

#!/usr/bin/env node

var fs = require('fs');

module.exports = function (context) {
  var rootdir         = context.opts.projectRoot;
  var Android_dir     = `${rootdir}/platforms/Android`;
  var gradle_filename = 'build-extras.gradle';
  var gradle_file     = `${rootdir}/${gradle_filename}`;
  if (fs.existsSync(Android_dir) && fs.existsSync(gradle_file)) {
    fs.createReadStream(gradle_file)
      .pipe(fs.createWriteStream(`${Android_dir}/${gradle_filename}`));
  }
};

config.xml

<platform name="Android">
    <allow-intent href="market:*" />
    <hook src="hooks/copy_build_extras.js" type="before_build" />
</platform>

build-extras.gradle dans le répertoire racine

configurations.all {
  resolutionStrategy {
    force 'com.Android.support:support-v4:27.1.0'
  }
}
0
Exlord

Ce problème me tue depuis une semaine.

Finalement, j'ai fini sur [email protected]

J'ai modifié Android/project.properties en changeant

#cordova.system.library.3=com.google.Android.gms:play-services-analytics:+
cordova.system.library.3=com.google.Android.gms:play-services-analytics:15+

Ce changement m'a finalement sorti du message d'erreur ttcIndex des ténèbres.

Puis j'ai eu cette erreur

com.Android.builder.dexing.DexArchiveBuilderException: 
  com.Android.builder.dexing.DexArchiveBuilderException

L'erreur était apparemment due à un problème de version Java. J'ai alors modifié Android/build.gradle avec le changement suivant

compileOptions {
  #sourceCompatibility JavaVersion.VERSION_1_6
  #targetCompatibility JavaVersion.VERSION_1_6
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

Notez également que le plug-in cordova-Android-support-gradle-release est installé, mais je ne sais pas si j'en ai besoin.

0
Austin Hutchison

Lien de solution

Ceci est dû au plugin compat. Supprimez ce plugin si vous avez une version antérieure (inférieure à 1.2.0) et définissez [email protected]

cordova plugin rm cordova-plugin-compat --force

cordova plugin add [email protected]

cordova plate-forme rm Android

plate-forme ionique cordova ajouter [email protected]

Travailler à mon cas. Merci :)

0
Pranay Kumar

J'ai eu le même problème et aucune des solutions proposées n'a fonctionné pour moi. L'installation de la dernière version d'Android SDK Build-tools (27.0.3) a résolu mon problème. 

0
Daniel W.

Je rencontrais ce problème avec react native et cela était dû aux lignes suivantes de mon Android/app/build.gradle:

implementation ("com.google.Android.gms:play-services-base:+") {
  force = true;
}
implementation ("com.google.Android.gms:play-services-maps:+") {
  force = true;
}

etc...

Apparemment, cela s'est résolu en une nouvelle version 17.0.0 qui a cassé ma construction.
Changer le + en 16.0.0 (ou 16.0.1 pour play-services-base) a résolu mon problème

0
Uri Klar