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?
Il suffit de mettre la suite dans build-extras.gradle
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
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 "
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.
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
.
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.
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'.
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é.
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.
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.
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.
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.
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!
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
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.+
.
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
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.
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
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'
}
}
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
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 ...
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'
}
}
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.
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 :)
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.
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