it-swarm.com.de

Ausführen von "cordova build Android" - Attribut Android: fontVariationSettings und Android: ttcIndex kann nicht gefunden werden

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?

94

Legen Sie einfach folgendes in build-extras.gradle

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

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" " 

75

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.

31
avmatte

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.

25
Ahmed

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.

21
stu

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.

15

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.

8
Brad Pitcher

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.

8
cpro90

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.

8
doit

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.

4
Anthonyeef

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.

4
Chris Scutt

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!

4
Sai Teja

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" />

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

dies wird auch in der Stackoverflow-Antwort behandelt: https://stackoverflow.com/a/56656680/839691

4
alpere

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.+.

3
aman

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
3
karan bhatia

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.

2
user276648

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 ..__

1
DineshS

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'
    }
}
1
Kush

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

0
pavelety

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 ...

0
Ari Waisberg

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'
  }
}
0
Exlord

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.

0

Lösungslink

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 :)

0
Pranay Kumar

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. 

0
Daniel W.

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

0
Uri Klar