Запуск "cordova build android" - не удается найти атрибут android:fontVariationSettings и android:ttcIndex
когда я запускаю cordova build android --buildConfig xxxx --release,
Я получаю следующую ошибку:
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:fontVariationSettings
ERROR: In <declare-styleable> FontFamilyFont, unable to find attribute android:ttcIndex
странно, что я использую две машины macOS для компиляции, и я получаю эту ошибку только на одном из них для одного и того же кода.
вот вывод ./gradlew cdvPrintProps Я сажусь на две машины:
: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
Ниже приведен список используемых плагинов:
$ 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"
как я могу исправить эту проблему?
24 ответа:
просто поместите следующее в build-экстры.gradle
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }
компания Google выпустила новую версию 28.0.0-alpha1 на com.андроид.поддержка: поддержка-v4 который добавляет 2 новых атрибута (android:fontVariationSettings и android:ttcIndex). Некоторые из плагинов используют последние библиотеки поддержки android, что приводит к нежелательным несовместимостям.
Вариант 1: Установить Кордова-android-поддержка-gradle-релиз плагин.
хорошо документированный плагин, который " выравнивает различные версии библиотек поддержки Android, указанные другими плагинами для конкретной версии". Испытания без какого-либо деструктивного поведения.
cordova plugin add cordova-android-support-gradle-release --fetchпрочитайте документацию для полного набора опций:Readme
2: Добавьте следующий фрагмент кода в построить.gradle под платформы / 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' }предупреждение: код построить.gradle будет перезаписан, если вы удаление / добавление платформы Android. Если вы не хотите использовать плагин почему-то не работает для вас, вместо того, чтобы создать крюк и перезаписывать файл каждый раз. Проверьте 2-й комментарий здесь.
если проблема является постоянной вы можете попробовать:
cordova platform rm android cordova platform add androidили
убедитесь, что у вас нет установлена предыдущая версия приложения на устройстве, которое вы тестируете, потому что вы получите неоднозначное ошибка при попытке понизить существующую версию: "INSTALL_FAILED_VERSION_DOWNGRADE" и "UnhandledPromiseRejectionWarning: Unhandled promise rejection"
та же ошибка происходит со мной. Видимо, новая версия
com.android.support:support-v4библиотека была выпущена, и плагин, который я использую, определяетcom.android.support:support-v4:+в зависимостиplugin.xml. Элемент+знак означает, что он получит последнюю версию (28.0.0), которая кажется несовместимой с другими плагинами.я смог построить версию разработки, изменив все зависимости плагина от
com.android.support:support-v4:+tocom.android.support:support-v4:27.1.0. Кроме того, я выполнилionic cordova platform remove androidиionic cordova platform add android. Надеюсь, это поможет, по крайней мере для развитие.
Если вам действительно нужно быстро решить эту проблему, чтобы запустить сборку, вы можете попробовать добавить следующие строки в свои платформы/android/build.файл gradle:
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }во всяком случае, установка версии здесь не является устойчивым исправлением.
Я только что исправил эту проблему, перейдя в папку platform / android и отредактировав ) и заменить
com.android.support:support-v4:+Сcom.android.support:support-v4:27.1.0.
это странно, но это работает, когда я добавляю следующие строки с теми же версиями.
Это мои связанные строки в
platforms/android/build.gradlefile: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+' }в моем проекте проблема возникла из-за плагина "cordova-plugin-crosswalk-webview".
у меня такая же ошибка, но не в cordova build. Новая версия
com.android.support:appcompat-v7и зависимостей.Но несовместимая версия находится в третьем пакете, который зависит отcom.android.support:appcompat-v7. поэтому я не могу исправить третий пакет с @avmatte'ы.использовать @Техе ГАИ ' S решение для поиска несовместимого пакета:
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspathзатем исправил его с помощью:
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}' ... } }выше кода принудительно версии зависимостей.
Я столкнулся с той же ошибки. Провел полное исследование в плагине-директории для com.андроид.поддержка: поддержка-v4:+ и заменил его статическим кодом версии.
для меня com.андроид.поддержка: поддержка-v4: 23.4.0 работала просто отлично. Тогда не было необходимости удалять и повторно добавлять платформу android.
вот простой способ исправить это, который будет сохраняться, когда каталог платформы будет перестроен, и нет необходимости проходить через все ваши плагины, чтобы попытаться найти виновника. Создайте файл
build-extras.gradleС этим содержанием:configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }создайте файл
after_platform_add/010_copy_build_extras.jsследующего содержания:#!/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}`)); }теперь воссоздайте платформу android, и она будет использовать закрепленную библиотеку поддержки.
некоторые из ваших библиотек должны использовать
com.android.support:support-v4:+найти тот, который есть, с
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspathи добавьте эту библиотеку в качестве модуля, если она не использует определенную версию в своем последнем обновлении (также поднимите проблему в этой библиотеке! ;))
спасибо @avmatte!
у меня была такая же проблема из ниоткуда вчера. Это началось случайно, но из чтения вокруг, похоже, что это связано с обновлением, как упоминалось выше @cpro90. Тем не менее, я пытался и не мог найти, где сделать необходимые изменения вручную.
В конце концов я определил, что проблема была вызвана моим плагином cordova-plugin-crosswalk-webview. На GitHub, я нашел вопрос на плагине repro сегодня утром, и у него было более 520 просмотров обед.
@UNUMObile предложил следующее в
build.gradleфайл, чтобы заставить более раннюю версию глобально:configurations.all { resolutionStrategy.force 'com.android.support:support-v4:24.0.0' }это сразу же сработало для меня и может помочь другим с другими плагинами, которые также имели свою зависимость от 'com.андроид.поддержка:поддержка-4:
Я надеюсь, что это поможет кому-то двигаться вперед.
просто несколько советов для разработчика Kotlin:
если вы будете следовать этим ответам здесь, вы уверены, что у вас нет
support-v4библиотека в вашем проекте, но вы все еще видите эту ошибку, пожалуйста, взгляните наktxбиблиотека.Я просто выяснить, что я использую последний
1.0.0-alpha1версия для библиотеки ktx и эта ошибка отображается; после того, как я вернулся к версии0.3, Теперь все в норме.
в своем добавить
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }и в
project.propertiesизменить файлcordova.system.library.3доcordova.system.library.3=com.android.support:support-v13:27.+.
на Phonegap Build пользователи, как @catu упоминалось в комментарии, Вы можете попробовать плагин цель для предотвращения сбоев сборки, вызванных включением различных версий библиотек поддержки.
просто исправьте эту проблему, поместив следующие строки кода в platforms/android/app / build.файл gradle, сразу после buildscript {} block:
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }
добавьте следующие строки на свои платформы / android / build.gradle
configurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }если все еще есть проблема попробуйте выполнить эту команду:
cordova plugin add cordova-android-support-gradle-release --fetch
другой подход с тем же решением-создать крюк. Он является постоянным (после переустановки платформы), вы можете зафиксировать его, и он не требует повторного добавления платформы.
%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 в конфигурации
%project%\config.xml
... <platform name="android"> <hook src="scripts/android/android-support-version.js" type="before_build" /> ...установить зависимость fs для вашего проекта:
npm i fs -- save-dev
выполнить сборки:
Кордова построить android
И правильно СПОСОБ ЕГО РЕШЕНИЯ!
просто обновите sdk и добавьте последнюю версию 2 android... и перезагрузите компьютер! Сделанный...
теперь у нас есть время поговорить о машинах и спорте...
У меня была такая же проблема, и ни одно из приведенных решений работал для меня. Установка последней версии Android SDK Build-tools (27.0.3) решила мою проблему.
обновление ответа @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в корневой директорииconfigurations.all { resolutionStrategy { force 'com.android.support:support-v4:27.1.0' } }
Если вы используете ionic и вы получаете эту ошибку, решить ее, выполнив следующие действия:
-cordova platform rm android -cordova platform add androidЭто может быть возможным решением
У меня была такая же проблема после установки плагина cordova-plugin-file-opener2. Он resoved после делать: Вариант 1: установите плагин cordova-android-support-gradle-release. плагин Cordova добавить Кордова-Android-поддержка-градля-релиз --принести
это дубликат записи в ценностях.xml в папке с именем
support-compat-28.0.0-alpha1.aar.вы найдете этот файл в Windows в
\users\YOURUSERID\.gradle\caches\transforms-1\files-1.1после того, как внутри этой папки вы должны пойти на несколько уровней глубже, чтобы значения.xml.
в этом файле найдите элемент
<declare-styleable name="FontFamilyFont>.в этом элементе удалите четыре строки с
android:в нем.после того, как я сделал это изменение, я могу построить снова без ошибок.
Это связано с плагином совместимости. Удалите этот плагин, если у вас есть более старая версия (менее 1.2.0) и установить cordova-android@6.3.0
cordova plugin rm cordova-plugin-compat --force
cordova плагин добавить cordova-plugin-compat@1.2.0
Кордова платформа rm android
ионная платформа cordova добавить android@6.3.0
работает над моим делом. Спасибо :)