web-dev-qa-db-ja.com

"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

奇妙なことに、私はコンパイルに2台のmacOSマシンを使用していますが、同じコードに対して一方のマシンでのみこのエラーが発生します。

これは私が2台のマシンで取得した./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"

どうすればこの問題を解決できますか?

96

以下を build-extras.gradle に入れてください。

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

Googleはcom.Android.support:support-v4の新しいバージョン28.0.0-alpha1をリリースしました2つの新しい属性(Android:fontVariationSettingsおよびAndroid:ttcIndex)を追加します。一部のプラグインは最新のAndroidサポートライブラリを使用しているため、望ましくない非互換性が生じます。

オプション1:インストールcordova-Android-support-gradle-releaseプラグイン。

「他のプラグインで指定されたAndroidサポートライブラリのさまざまなバージョンを特定のバージョンに揃える」プラグインがよく文書化されています。破壊的な動作なしでテスト済み。

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

完全なオプションセットについては、ドキュメントを参照してください。 Readme

Option 2build.gradleplatformsに次のコードスニペットを追加/アンドロイド

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

Warning:build.gradleのコードは、Androidを削除/追加すると上書きされます_プラットフォーム。何らかの理由でプラグインを使用したくない場合、または何らかの理由で機能しない場合は、代わりにフックを作成し、毎回ファイルを上書きします。 2番目のコメントを確認してください こちら

問題が解決しない場合は、試してください:

cordova platform rm Android
cordova platform add Android

または

既存のバージョンをダウングレードしようとするとあいまいなエラーが表示されるため、テストするデバイスにアプリの以前のバージョンがインストールされているがないことを確認してください。 「INSTALL_FAILED_VERSION_DOWNGRADE」および「UnhandledPromiseRejectionWarning:未処理の約束拒否」

82

同じエラーが私に起こっています。どうやら、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 Androidionic cordova platform add Androidを実行しました。少なくとも開発のために役立つことを願っています。

31
avmatte

私はこの問題をplatform/Androidフォルダに移動してproject.properties)ファイルを編集し、com.Android.support:support-v4:+com.Android.support:support-v4:27.1.0に置き換えることで修正しました。

26
Ahmed

あなたが本当にあなたのビルドを動かすためにその問題の素早い修正が必要なだけなら、あなたはあなたのplatform/Android/build.gradleファイルに以下の行を追加しようとするかもしれません:

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

とにかく、ここでバージョンを設定することは持続可能な修正ではありません。

21
stu

奇妙なことですが、同じバージョンで以下の行を追加するとうまくいきます。

これは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'プラグインが原因で問題が発生しました。

15

これは、プラットフォームディレクトリが再構築されたときに残る簡単な修正方法です。すべてのプラグインを調べて問題の原因を突き止める必要はありません。以下の内容でファイル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プラットフォームを再作成し、それは固定されたサポートライブラリを使用します。

8
Brad Pitcher

私は同じエラーに直面していました。 com.Android.support:support-v4:+ のプラグインディレクトリで完全な調査を行い、それを静的バージョンコードに置き換えました。

私の場合、 com.Android.support:support-v4:23.4.0 はうまく機能しました。その後、Androidプラットフォームを削除して再追加する必要はありませんでした。

8
cpro90

私は同じエラーがありますがcordovaビルドにはありません。 com.Android.support:appcompat-v7とdependenciesの新バージョン。互換性のないバージョンはcom.Android.support:appcompat-v7に依存している3番目のパッケージにあります。 @avmatte の解決策で3番目のパッケージを修正することはできません。

互換性のないパッケージを見つけるには、@ 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
doit

以下の行をあなたのプラットフォームに追加してください/ Android/build.gradle

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

まだ問題がある場合は、このコマンドを実行してみてください。

cordova plugin add cordova-Android-support-gradle-release --fetch
4
karan bhatia

Kotlin開発者のためのちょっとしたコツ:

あなたがここでこれらの答えに従うならば、あなたはあなたのプロジェクトにsupport-v4ライブラリがないことは確かですが、あなたはまだこのエラーを見ています、ktxライブラリを見てください。

Ktxライブラリに最新の1.0.0-alpha1バージョンを使用していることがわかり、このエラーが表示されます。私がバージョン0.3に戻った後は、すべて正常に戻りました。

4
Anthonyeef

昨日も私は同じ問題を抱えていました。それはランダムに開始しました、しかし読んでみると、それは@ cpro90によって上で述べられたようにそれがアップデートですることであるように見えます。しかし、私は試してみましたが、必要な手動変更を行う場所を見つけることができませんでした。

結局私は問題が私のcordova-plugin-crosswalk-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が問題のようです。

これが誰かが前進するのに役立つことを願っています。

4
Chris Scutt

あなたのライブラリのいくつかは使っているはずです

com.Android.support:support-v4:+

であるものを見つけて

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

最新のアップデートで特定のバージョンを使用していない場合は、そのライブラリをモジュールとして追加します(そのライブラリの問題も提起してください)。

@avmatteに感謝します。

4
Teja Konjeti

私はIonicフォーラムで解決策を見つけました。これは私にとって唯一の解決策でした:

実行:

イオンコルドバプラットフォームrm Android

実行:

イオンコルドバプラットフォームは[email protected]を追加します

実行:

イオン性Cordovaプラグインはcordova-plugin-androidxを追加します

実行:

イオン性Cordovaプラグインはcordova-plugin-androidx-adapterを追加します

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

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

stackoverflowの回答でも処理されます: https://stackoverflow.com/a/56656680/839691

4
alpere

build.gradleファイルに以下を追加してください。

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

project.propertiesファイルで、cordova.system.library.3cordova.system.library.3=com.Android.support:support-v13:27.+に変更します。

3
aman

@catuがコメントで述べたように、 Phonegap Build usersの場合、 このプラグイン 目的はサポートライブラリの異なるバージョンを含めることによるビルド失敗を防ぐためを試すことができます。 。

2
user276648

Cordova-plugin-file-opener2プラグインをインストールした後も同じ問題がありました。それはやった後に解決しました:オプション1:cordova-Android-support-gradle-releaseプラグインをインストールします。 cordovaプラグインを追加cordova-Android-support-gradle-release --fetch

1
DineshS

buildscript {}ブロックの直後に、platform/Android/app/build.gradleファイルに次のコードを追加してこの問題を解決する:

configurations.all {
    resolutionStrategy {
            force 'com.Android.support:support-v4:27.1.0'
    }
}
1
Kush

イオンを使用していてこのエラーが発生した場合は、次の手順を実行して解決してください。

-cordova platform rm Android
-cordova platform add Android

それは可能な解決策である可能性があります

同じ解決策を持つ別のアプローチはフックを作成することです。それは(プラットフォームの再インストール後も)持続します、あなたはそれをコミットすることができ、プラットフォームを再追加する必要はありません。

%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');
  }
};

設定の初期化フック

%project%\ config.xml

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

プロジェクトにfs依存関係をインストールします。

npm i fs --save-dev

ビルドを実行します。

コルドバビルドアンドロイド

0
pavelety

非常にシンプルで _正しい_ それを解決する方法!

ただsdkを更新してAndroidの最新の2バージョンを追加してください...そしてコンピュータを再起動してください!完了しました...

今、私たちは車とスポーツについて話す時間があります...

0
Ari Waisberg

@Bradピッチャーの答えを更新しました:

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

この問題は一週間私を殺していた。

最終的に私は[email protected]になりました

Android/project.propertiesを変更して変更しました

#cordova.system.library.3=com.google.Android.gms:play-services-analytics:+
cordova.system.library.3=com.google.Android.gms:play-services-analytics:15+

この変更により、やっと闇のttcIndexエラーメッセージピットから抜け出しました。

その後、私はこのエラーを受け取りました

com.Android.builder.dexing.DexArchiveBuilderException: 
  com.Android.builder.dexing.DexArchiveBuilderException

このエラーは、明らかにJavaバージョンの問題が原因でした。次に、Android/build.gradleを次の変更で変更しました

compileOptions {
  #sourceCompatibility JavaVersion.VERSION_1_6
  #targetCompatibility JavaVersion.VERSION_1_6
  sourceCompatibility JavaVersion.VERSION_1_8
  targetCompatibility JavaVersion.VERSION_1_8
}

また、cordova-Android-support-gradle-releaseプラグインはインストールされていますが、必要かどうかはわかりません。

0

ソリューションリンク

これはcompatプラグインによるものです。古いバージョン( 1.2.0 未満)があり、 [email protected] を設定している場合は、そのプラグインを削除してください。

cordovaプラグインrm cordova-plugin-compat --force

cordovaプラグインは[email protected]を追加します

コルドバプラットフォームRMアンドロイド

イオンコルドバプラットフォームは[email protected]を追加

私のケースで働いています。ありがとう:)

0
Pranay Kumar

私は同じ問題を抱えていた、そして与えられた解決策のどれも私のために働かなかった。最新バージョンのAndroid SDK Build-tools(27.0.3)をインストールすることで私の問題は解決しました。

0
Daniel W.

反応ネイティブでこの問題に遭遇していましたが、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(またはplay-services-baseの場合は16.0.1)に変更すると、問題が解決しました

0
Uri Klar