Beim Ausführen von cordova build Android --buildConfig xxxx --release
... Wird folgende Fehlermeldung angezeigt:
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute Android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute Android:ttcIndex
Das Merkwürdige ist, dass ich zwei macOS-Maschinen für die Kompilierung verwende, und ich bekomme diesen Fehler nur auf einem von ihnen für denselben Code.
Hier ist die Ausgabe von ./gradlew cdvPrintProps
, die ich auf den beiden Maschinen bekomme:
: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
Nachfolgend die Liste der verwendeten Plugins:
$ 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"
Wie kann ich dieses Problem beheben?
Legen Sie einfach folgendes in build-extras.gradle
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Google hat die neue Version 28.0.0-alpha1 von com.Android.support:support-v4 veröffentlicht, die 2 neue Attribute hinzufügt (Android: fontVariationSettings und Android: ttcIndex) . Einige der Plugins verwenden die neuesten Bibliotheken für Android-Unterstützung, was zu unerwünschten Inkompatibilitäten führt.
Option 1: Installieren Sie das cordova-Android-Support-Gradle-Release -Plugin.
Gut dokumentiertes Plugin, das "verschiedene Versionen der von anderen Plugins angegebenen Android Support-Bibliotheken an eine bestimmte Version anpasst". Getestet ohne zerstörerisches Verhalten.
cordova plugin add cordova-Android-support-gradle-release --fetch
Lesen Sie die Dokumentation für einen vollständigen Satz von Optionen: Readme
Option 2: Fügen Sie das nächste Code-Snippet in build.gradle unter platform/Android hinzu.
/**
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'
}
Warnung: -Code in build.gradle wird überschrieben, wenn Sie die Android-Plattform entfernen/hinzufügen. Wenn Sie das Plugin aus irgendeinem Grund nicht verwenden möchten oder für Sie irgendwie nicht funktionieren, erstellen Sie stattdessen einen Hook und überschreiben Sie die Datei jedes Mal. Überprüfen Sie den zweiten Kommentar hier .
Wenn das Problem weiterhin besteht, können Sie Folgendes versuchen:
cordova platform rm Android
cordova platform add Android
ODER
Vergewissern Sie sich, dass auf dem von Ihnen getesteten Gerät keine vorherige Version der App installiert ist, da Sie einen mehrdeutigen Fehler erhalten, wenn Sie versuchen, die vorhandene Version zu downgraden: "INSTALL_FAILED_VERSION_DOWNGRADE" und "UnhandledPromiseRejectionWarning: Unhandled Promise ablehnen" "
Der gleiche Fehler passiert mir. Anscheinend wurde eine neue Version der com.Android.support:support-v4
-Bibliothek veröffentlicht, und das Plugin, das ich verwende, definiert com.Android.support:support-v4:+
als Abhängigkeit in plugin.xml
. Das Zeichen +
bedeutet, dass es die neueste Version (28.0.0) erhält, die mit anderen Plugins nicht kompatibel zu sein scheint.
Ich konnte eine Entwicklungsversion erstellen, indem ich alle Abhängigkeiten des Plugins von com.Android.support:support-v4:+
in com.Android.support:support-v4:27.1.0
änderte. Ich habe auch ionic cordova platform remove Android
und ionic cordova platform add Android
ausgeführt. Hoffe, es hilft, zumindest für die Entwicklung.
Ich habe dieses Problem gerade behoben, indem ich zum Plattform-/Android-Ordner ging und die Datei project.properties
) bearbeitete und com.Android.support:support-v4:+
durch com.Android.support:support-v4:27.1.0
ersetzte.
Wenn Sie wirklich nur eine schnelle Lösung für dieses Problem benötigen, um Ihren Build auszuführen, versuchen Sie, die folgenden Zeilen in Ihre Plattform-/Android-/build.gradle-Datei einzufügen:
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Das Festlegen der Version hier ist jedoch keine dauerhafte Lösung.
Es ist seltsam, aber es funktioniert, wenn ich die unten stehenden Zeilen mit denselben Versionen hinzufüge.
Dies sind meine verwandten Zeilen in der platforms/Android/build.gradle
-Datei:
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+'
}
In meinem Projekt ist das Problem durch das Plugin 'cordova-plugin-crosswalk-webview' aufgetreten.
Es gibt eine einfache Möglichkeit, das Problem zu beheben, die auch dann bestehen bleibt, wenn das Plattformverzeichnis neu erstellt wird, und Sie müssen nicht alle Plugins durchgehen, um einen Täter zu finden. Erstellen Sie eine Datei build-extras.gradle
mit folgendem Inhalt:
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Dann erstellen Sie die Datei after_platform_add/010_copy_build_extras.js
mit folgendem Inhalt:
#!/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}`));
}
Erstellen Sie nun die Android-Plattform neu und es wird die angeheftete Unterstützungsbibliothek verwendet.
Ich war mit dem gleichen Fehler konfrontiert. Hat eine vollständige Suche im Plugin-Verzeichnis fürcom.Android.support:support-v4:+durchgeführt und es durch einen statischen Versionscode ersetzt.
Für mich hatcom.Android.support:support-v4:23.4.0ganz gut funktioniert. Die Android-Plattform musste dann nicht entfernt und erneut hinzugefügt werden.
Ich habe den gleichen Fehler aber nicht in Cordova Build. Eine neue Version von com.Android.support:appcompat-v7
und Abhängigkeiten. Aber die inkompatible Version befindet sich im dritten Paket, das von com.Android.support:appcompat-v7
.So abhängig ist. Ich kann das dritte Paket nicht mit der Lösung von @avmatte reparieren.
Verwenden Sie die Lösung von @ Sai Teja , um ein inkompatibles Paket zu finden:
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
Dann fixiert es mit:
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}'
...
}
}
Der obige Code erzwingt die Version der Abhängigkeiten.
Nur ein paar Tipps für Kotlin-Entwickler:
Wenn Sie diese Antworten hier befolgen, sind Sie sicher, dass Sie keine support-v4
-Bibliothek in Ihrem Projekt haben, aber dieser Fehler wird immer noch angezeigt. Sehen Sie sich die ktx
-Bibliothek an.
Ich habe gerade herausgefunden, dass ich die neueste 1.0.0-alpha1
-Version für die ktx-Bibliothek verwende und dieser Fehler angezeigt wird. Nachdem ich wieder auf Version 0.3
gewechselt habe, ist jetzt alles wieder normal.
Ich hatte gestern aus heiterem Himmel das gleiche Problem. Es hat zufällig angefangen, aber beim Lesen sieht es so aus, als ob es sich um ein Update handelt, wie von @ cpro90 erwähnt. Ich habe jedoch versucht und konnte nicht finden, wo ich die erforderlichen manuellen Änderungen vornehmen sollte.
Schließlich stellte ich fest, dass das Problem durch mein Cordova-Plugin-Crosswalk-Webview-Plugin verursacht wurde. Auf GitHub habe ich heute Morgen das Problem auf der Plugin-Repro gefunden, und bis zum Mittagessen hatte es über 520 Ansichten.
@UNUMObile schlug Folgendes in der Datei build.gradle
vor, um eine frühere Version global zu erzwingen:
configurations.all {
resolutionStrategy.force 'com.Android.support:support-v4:24.0.0'
}
Dies funktionierte sofort für mich und könnte anderen mit anderen Plugins helfen, die ebenfalls von 'com.Android.support:support-4:<28 abhängig waren. Die neue Version 28 scheint das Problem zu sein.
Ich hoffe, das hilft jemandem, sich vorwärts zu bewegen.
Einige Ihrer Bibliotheken sollten verwendet werden
com.Android.support:support-v4:+
Finden Sie heraus, welches das ist, mit
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
Und fügen Sie diese Bibliothek als Modul hinzu, wenn in ihrer letzten Aktualisierung keine bestimmte Version verwendet wird. (In dieser Bibliothek auch ein Problem aufwerfen!;))
Danke an @avmatte!
Ich habe die Lösung im Ionic Forum gefunden. Dies war die einzige Lösung, die für mich funktioniert hat:
Ausführen:
ionic cordova plattform rm Android
Ausführen:
ionic Cordova-Plattform hinzufügen [email protected]
Ausführen:
ionic cordova plugin füge cordova-plugin-androidx hinzu
Ausführen:
ionic cordova plugin füge cordova-plugin-androidx-adapter hinzu
Stellen Sie sicher, dass Ihre gradle.properties Folgendes enthalten:
cdvMinSdkVersion = 19
Stellen Sie sicher, dass Ihre build.gradle hat:
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 }
Stellen Sie sicher, dass Ihre config.xml Folgendes enthält:
<preference name="Android-minSdkVersion" value="19" />
dies wird auch in der Stackoverflow-Antwort behandelt: https://stackoverflow.com/a/56656680/839691
In Ihrer build.gradle
-Datei hinzufügen
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Ändern Sie in Ihrer project.properties
-Datei cordova.system.library.3
in cordova.system.library.3=com.Android.support:support-v13:27.+
.
Fügen Sie die folgenden Zeilen zu Ihren Plattformen/Android/build.gradle hinzu
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
wenn das Problem weiterhin besteht, führen Sie den folgenden Befehl aus:
cordova plugin add cordova-Android-support-gradle-release --fetch
Für Phonegap Build Benutzer, wie @catu in einem Kommentar erwähnt, können Sie versuchen dieses Plugin welcher Zweck um Build-Fehler zu vermeiden, die durch die Einbindung verschiedener Versionen der Support-Bibliotheken verursacht werden.
Ich hatte das gleiche Problem nach der Installation des Cordova-Plugin-File-Opener2-Plugins. Es wurde nach folgenden Vorschlägen wieder entfernt: Option 1: Installieren Sie das Cordova-Android-Supportlevel-Release-Plugin ..__
Beheben Sie dieses Problem, indem Sie die folgenden Codezeilen in die Platforms/Android/app/build.gradle -Datei einfügen, direkt nach dem buildscript {} -Block:
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Wenn Sie ionisch verwenden und dieser Fehler angezeigt wird, beheben Sie ihn, indem Sie Folgendes tun:
-cordova platform rm Android
-cordova platform add Android
Es kann eine mögliche Lösung sein
Ein anderer Ansatz mit derselben Lösung ist das Erstellen eines Hakens. Es ist dauerhaft (nach der Neuinstallation der Plattform), Sie können es festlegen und müssen keine Plattform hinzufügen.
% 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');
}
};
Init-Hook in der Konfig
% project%\config.xml
...
<platform name="Android">
<hook src="scripts/Android/android-support-version.js" type="before_build" />
...
Installieren Sie die fs-Abhängigkeit in Ihrem Projekt:
npm i fs --save-dev
Build ausführen:
cordova Android bauen
SUPER EINFACH UNDRICHTIGWEGWEISE!
Aktualisieren Sie einfach die SDK und fügen Sie die neueste Version von Android hinzu ... und starten Sie den Computer neu! Erledigt...
Jetzt haben wir Zeit, über Autos und Sport zu sprechen ...
aktualisierungen der Antwort von @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
im Hauptverzeichnis
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
Dieses Problem hatte mich eine Woche lang umgebracht.
Letztendlich bin ich auf [email protected]
gelandet
Ich habe Android/project.properties
durch Ändern geändert
#cordova.system.library.3=com.google.Android.gms:play-services-analytics:+
cordova.system.library.3=com.google.Android.gms:play-services-analytics:15+
Diese Änderung brachte mich endlich aus der Dunkelheit der ttcIndex-Fehlermeldung heraus.
Dann habe ich diesen Fehler bekommen
com.Android.builder.dexing.DexArchiveBuilderException:
com.Android.builder.dexing.DexArchiveBuilderException
Der Fehler war anscheinend auf ein Problem mit der Version Java zurückzuführen. Ich habe dann Android/build.gradle
mit der folgenden Änderung geändert
compileOptions {
#sourceCompatibility JavaVersion.VERSION_1_6
#targetCompatibility JavaVersion.VERSION_1_6
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
Beachten Sie auch, dass ich das cordova-Android-support-gradle-release
-Plugin installiert habe, aber keine Ahnung habe, ob ich es benötige.
Dies ist auf das Compat-Plugin zurückzuführen. Entfernen Sie das Plugin, wenn Sie eine ältere Version (weniger als 1.2.0) haben, und legen Sie [email protected] fest.
cordova plugin rm mit cordova-plugin kompatibel
cordova plugin add [email protected]
cordova-Plattform rm Android
ionische Cordova-Plattform hinzufügen [email protected]
Arbeit an meinem Fall. Vielen Dank :)
Ich hatte das gleiche Problem und keine der angegebenen Lösungen funktionierte für mich. Durch die Installation der neuesten Version von Android SDK Build-Tools (27.0.3) wurde mein Problem behoben.
Ich bin auf dieses Problem mit React Native gestoßen und es wurde durch die folgenden Zeilen in meinem Android/app/build.gradle
verursacht:
implementation ("com.google.Android.gms:play-services-base:+") {
force = true;
}
implementation ("com.google.Android.gms:play-services-maps:+") {
force = true;
}
usw...
Anscheinend hat sich das + zu einer neuen Version 17.0.0 gelöst, die meinen Build kaputt gemacht hat.
Das Ändern von + auf 16.0.0 (oder 16.0.1 für Play-Services-Base) löste mein Problem