Запуск "corova build android" - не удалось найти атрибут android: fontVariationSettings and 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"

Как я могу исправить эту проблему?

Ответ 1

Просто поставьте следующее в build-extras.gradle

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

Ответ 2

Google выпустила новую версию 28.0.0-alpha1 com.android.support:support-v4, которая добавляет 2 новых атрибута (android: fontVariationSettings и android: ttcIndex). Некоторые из плагинов используют последние библиотеки поддержки Android, что приводит к нежелательной несовместимости.

Вариант 1: Установите плагин cordova-android-support- gradle -release.

Хорошо документированный плагин, который "выравнивает различные версии библиотек поддержки Android, указанных другими плагинами, в конкретной версии". Протестировано без какого-либо деструктивного поведения.

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

Прочитайте документацию для полного набора опций: Readme

Вариант 2: Добавьте следующий фрагмент кода в build.gradle под платформами/андроид

/** 
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'
}

Предупреждение: код build.gradle будет перезаписан, если вы удалите/добавите платформу Android. Если вы не хотите использовать плагин по какой-то причине или каким-то образом не работаете для вас, вместо этого создайте крючок и перезаписывайте файл каждый раз. Проверьте 2-й комментарий здесь.

Если проблема постоянна, вы можете попробовать:

cordova platform rm android
cordova platform add android

ИЛИ

Убедитесь, что на тестируемом устройстве не установлена ​​ предыдущая версия установленного приложения, потому что вы получите неоднозначную ошибку при попытке понизить существующую версию: "INSTALL_FAILED_VERSION_DOWNGRADE" и "UnhandledPromiseRejectionWarning: отказ от необработанного обещания"

Ответ 3

То же самое происходит со мной. По-видимому, была выпущена новая версия библиотеки com.android.support:support-v4, а используемый плагин определяет com.android.support:support-v4:+ как зависимость в plugin.xml. Знак + означает, что он получит последнюю версию (28.0.0), которая кажется несовместимой с другими плагинами.

Мне удалось создать версию разработки, изменив все зависимости плагина от com.android.support:support-v4:+ до com.android.support:support-v4:27.1.0. Кроме того, я выполнил ionic cordova platform remove android и ionic cordova platform add android. Надеюсь, что это поможет, по крайней мере, для развития.

Ответ 4

Я только что исправил эту проблему, перейдя в папку платформы /android и отредактировал файл project.properties) и заменил com.android.support:support-v4:+ на com.android.support:support-v4:27.1.0.

Ответ 5

Если вам действительно нужно быстро исправить эту проблему, чтобы выполнить прогон сборки, вы можете попробовать добавить следующие строки в свой файл platform/android/build.gradle:

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

Во всяком случае, установка версии здесь не является устойчивым решением.

Ответ 6

Это странно, но он работает, когда я добавляю строки ниже с теми же версиями.

Это мои связанные строки в файле 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+'
}

В моем проекте проблема возникла из-за плагина 'cordova-plugin-crosswalk-webview'.

Ответ 7

У меня такая же ошибка, но не у кордовой сборки. Новая версия com.android.support:appcompat-v7 и зависимостей. Но несовместимая версия находится в третьем пакете, который зависит от com.android.support:appcompat-v7. Так что я не могу зафиксировать третий пакет с @avmatte решение.

Используйте @решение Sai Teja, чтобы найти несовместимый пакет:

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

Выше кода заставляют версию зависимостей.

Ответ 8

Я столкнулся с той же ошибкой. Провел полное исследование в каталоге плагинов для com.android.support:support-v4: + и заменил его статическим кодом версии.

Для меня com.android.support:support-v4:23.4.0 работал отлично. Тогда не нужно было удалять и повторно добавлять платформу Android.

Ответ 9

Вот простой способ исправить его, который будет сохраняться при восстановлении каталога платформы, и нет необходимости проходить через все ваши плагины, чтобы попытаться найти преступника. Создайте файл 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, и она будет использовать закрепленную библиотеку поддержки.

Ответ 10

Некоторые из ваших библиотек должны использовать

com.android.support:support-v4:+

Найдите то, что есть, с

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

И добавьте эту библиотеку в качестве модуля, если она не использует в ней последнюю версию (также поднимите проблему в этой библиотеке!))

Благодаря @avmatte!

Ответ 11

Вчера у меня была такая же проблема. Это началось случайно, но из-за чтения вокруг, похоже, что это связано с обновлением, как указано выше, с помощью @cpro90. Однако я попытался и не смог найти, где внести необходимые изменения вручную.

В конце концов я обнаружил, что проблема вызвана моим плагином-плагином-перекрестком-webview-плагином. На GitHub я нашел вопрос на плагине, который был воспроизведен сегодня утром, и на обед у него было более 520 просмотров.

@UNUMObile предложила следующее в файле build.gradle для принудительной установки более ранней версии по всему миру:

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

Это сработало сразу для меня и может помочь другим с другими плагинами, которые также имеют зависимость от "com.android.support:support-4:<28. Новая версия 28, похоже, проблема.

Я надеюсь, что это поможет кому-то двигаться вперед.

Ответ 12

Несколько советов разработчику Kotlin:

Если вы будете следовать этим ответам здесь, вы уверены, что у вас нет библиотеки support-v4 в вашем проекте, но вы все еще видите эту ошибку, пожалуйста, посмотрите библиотеку ktx.

Я просто выяснил, что я использую последнюю версию 1.0.0-alpha1 для библиотеки ktx, и эта ошибка проявляется; после того, как я вернулся к версии 0.3, теперь все нормализовалось.

Ответ 13

Добавьте следующие строки в ваши платформы /android/build.gradle

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

если проблема не устранена, попробуйте выполнить эту команду:

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

Ответ 14

В вашем build.gradle файле добавьте

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

Ответ 15

Для пользователей Phonegap Build, как упоминалось в комментарии @catu, вы можете попробовать этот плагин, целью которого является предотвращение сбоев сборки, вызванных включением разных версий библиотек поддержки.

Ответ 16

Просто исправьте эту проблему, поместив следующие строки кода в файл platform/android/app/build.gradle сразу после блока buildscript {}:

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

Ответ 17

У меня была такая же проблема после установки плагина cordova-plugin-file-opener2. Восстановление после выполнения: Вариант 1: Установите плагин cordova-android-support-gradle-release. плагин Cordova добавить Cordova-Android-Support-Gradle-релиз --fetch

Ответ 18

Другой подход с таким же решением - создать крючок. Это постоянное (после переустановки платформы), вы можете зафиксировать его, и он не требует повторной добавления платформы.

% проект%\Scripts\Android\андроида-подставок-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');
  }
};

Инициализировать крючок в конфигурации

% проект%\config.xml

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

Установите зависимость fs к вашему проекту:

npm я fs --save-dev

Выполнить сборку:

Кордоба строит андроид

Ответ 19

СУПЕР ПРОСТОЙ И ПРАВИЛЬНЫЙ СПОСОБ РЕШЕНИЯ ЭТОГО!

Просто обновите SDK и добавьте последнюю версию Android 2... и перезагрузите компьютер! Готово...

Теперь у нас есть время поговорить об автомобилях и спорте...

Ответ 20

У меня была такая же проблема, и ни одно из данных решений не помогло мне. Установка последней версии Android SDK Build-tools (27.0.3) решила мою проблему.

Ответ 21

Ссылка на решение

Это связано с плагином Compat. Удалите этот плагин, если у вас более старая версия (менее 1.2.0) и установите [email protected]

кордова плагин рм кордова-плагин-компат --force

Cordova плагин добавить [email protected]

кордова платформа рм андроид

Ионная платформа Cordova добавить [email protected]

Работаю над моим делом. Спасибо :)

Ответ 22

обновляет ответ @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 в корневом build-extras.gradle

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

Ответ 23

Я android/app/build.gradle с этой проблемой с реагировать родной, и это было вызвано следующими строками в моем android/app/build.gradle:

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

так далее...

Видимо это + разрешено до новой версии 17.0.0, которая сломала мою сборку.
Изменение + на 16.0.0 (или 16.0.1 для play-services-base) решило мою проблему

Ответ 24

Я нашел решение на Ionic Forum, которое было единственным решением, которое работало для меня:

Бежать:

ионные кордова платформа рм андроид

Бежать:

Ионная платформа Cordova добавить [email protected]

Бежать:

ионные кордова плагин добавить кордова-плагин-androidx

Бежать:

Ионный Cordova плагин добавить Cordova-плагин-Androidroid-адаптер

Убедитесь, что ваш gradle.properties имеет:

cdvMinSdkVersion = 19

Убедитесь, что ваш build.gradle имеет:

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 }

Убедитесь, что ваш config.xml имеет:

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

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

который также обрабатывается в ответе stackoverflow: fooobar.com/questions/17861467/...

Ответ 25

Это повторяющаяся запись в values.xml в папке с именем support-compat-28.0.0-alpha1.aar.

Вы найдете этот файл в Windows под \users\YOURUSERID\.gradle\caches\transforms-1\files-1.1

Как только внутри этой папки вам нужно пройти несколько уровней до values.xml.

В этом файле найдите элемент <declare-styleable name="FontFamilyFont>.

В этом элементе удалите четыре строки с помощью android:.

После того, как я сделал это изменение, я смогу снова построить без ошибок.

Ответ 26

Если вы используете ionic и получаете эту ошибку, устраните ее, выполнив следующие действия:

-cordova platform rm android
-cordova platform add android

Это может быть возможным решением