Запуск "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 88

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:+ to com.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.gradle file:

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

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