「cordova build android」を実行-属性android:fontVariationSettingsおよびandroid:ttcIndexが見つかりません


103

を実行する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マシンを使用しており、同じコードの1つだけでこのエラーが発生します。

これ./gradlew cdvPrintPropsが2台のマシンで得られる出力です。

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

この問題を解決するにはどうすればよいですか?


この問題は私にも一日中起こっています。使用しているプラ​​グインに絞り込みました。しかし、私は私のアプリケーションにこのプラグインが必要です。どのプラグインを使用していますか?
Chris R

@ChrisRittenこんにちは、プラグインリストを使用して上記の投稿を完了しました。よろしく。
ステファンPadovani

1
答えのどれも助けになりません、今日これに苦労しています。
khusrav

回答:


106

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

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

ありがとう!これは、Cordovaがバージョンに固定するための合理的なアプローチです。
Hozuki

10
私は自分のプラットフォームフォルダーをソース管理の外に置いているので、これを達成するためbuild-extras.gradleに、プロジェクトルートで追加したコードをhooks\after_platform_add gist.github.com/charlesbedrosian/…
cbedrosian

8
そのようなファイルはありません: "build-extras.gradle"
Joe Sleiman

3
phonegap-buildの他のユーザー向け。その答えは、cordova-android-support- gradle
catu

7
コルドバのAndroid 7.0.0からStéphanePadovaniさんのコメント、それは/プラットフォームで作成されなければならないことに注意してください/アンドロイド/アプリフォルダ@に加えて
ウィルKRU

83

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

オプション1:cordova-android-support-gradle-releaseプラグイン をインストールします。

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

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

オプションの完全なセットについては、ドキュメントをお読みください:Readme

オプション2platform / androidの下の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'
}

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

問題が解決しない場合は、以下を試してください。

cordova platform rm android
cordova platform add android

または

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


2
ベストアンサー。プラグインのインストールは、これに対する最善かつ簡単な解決策です。プラグインを追加すると、自動的にエラーが解決されます。シンプル。プラットフォームを削除および追加する場合に手動で追跡する必要のあるプラットフォームフォルダー内のファイルの作成をいじる必要はありません。
Neel

オプション1がうまくいきました。Cordovaが依存関係を厳密でない方法で定義していることは非常にイライラします。彼らがなぜそうするのか私にはわかりません。数週間前に私のプロジェクトを稼働状態のままにして、デバッグバージョンを再コンパイルするためにプロジェクトに戻って、突然エラーが発生しました。
Norman Breau

レジストリ経由でプラグインcordova-android-support-gradle-releaseを取得できませんでした
netshark1000 2018年

@ netshark1000この問題はプラグインとは関係ありませんが、package.jsonまたはいくつかのプロジェクト構成に関係します。package.jsonを調べて、プラグインがまだインストールされていないことを確認します。存在する場合は、イオンコードバにリロードの準備を依頼してください。問題が解決しない場合は、プラットフォームを削除し、pluginsフォルダーを再度追加してプラットフォームを追加します。これでうまくいくはずです。
Andrew Radulescu 2018年

1
完璧、#1が私を救った
GBarroso

31

私にも同じエラーが発生しています。どうやら、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。少なくとも開発において、それが役に立てば幸いです。


どうもありがとうございました。私の側では、Androidプラットフォームディレクトリ内のプラグインの1つのGradleファイルを変更しました。@avmatteソリューションで機能しない場合は、チェックアウトしてください。
Sandun Priyanka 2018

私のために機能していない、私は同じことをしますが、Androidプラットフォームを再度追加すると、バージョンを27.1.0に削除してもバージョンがv4:24.1.1+に戻ります
Joe Sleiman

このエラーがあります:com.android.support:support-v4:27.1.0が見つかりませんでした。
Joe Sleiman、2018年

28

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


21

ビルドを実行するためにその問題の簡単な修正が本当に必要な場合は、platforms / android / build.gradleファイルに次の行を追加してみてください。

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

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


良いですね。これでうまくいきましたが、ええ、プラットフォームを削除して追加したり、新しいマシンにインストールしたりすると、失われると思います。
ガーナード

これを/ platforms / android / appに配置する必要がありました。持続可能ではないと言うように
user542319

@stuあなたはあなたの答えで言っていません、どこにこのコードを置くべきですか?
Sayed Mohd Ali、

15

奇妙ですが、同じバージョンの以下の行を追加すると機能します。

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


おかげで、これまでアップデートによって上書きされていた依存関係を再ダウンロードするのに役立ちました。build.gradleの編集はお勧めしませんが、以前の解決策を試してみましたが、うまくいきませんでした
Nico

8

私は同じエラーを持っていますが、コルドバのビルドではありません。com.android.support:appcompat-v7と依存関係の新しいバージョンですが、互換性のないバージョンは。に依存com.android.support:appcompat-v7する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

私は同じエラーに直面していました。com.android.support:support-v4:+の plugin-directoryで完全な調査を行い、静的バージョンコードに置き換えました。

私にとって、com.android.support:support-v4:23.4.0は問題なく動作しました。その場合、Androidプラットフォームを削除して再度追加する必要はありませんでした。


8

これは、プラットフォームディレクトリが再構築され、原因を特定するためにすべてのプラグインを経由する必要がない場合でも、簡単に修正できる方法です。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プラットフォームを再作成すると、固定されたサポートライブラリが使用されます。


サブディレクトリのフックは非推奨ですconfig.xmlを使用してください<platform name="android"> <hook src="hooks/copy_build_extras.js" type="before_build" /> </platform>
Exlord

テスト済みで、コードが無効になってprocess.argv[2]いるbuildようです。
Exlord

申し訳ありませんが@Exlord新しいスタイルのフックを使用するには多少の調整が必要になると思いますが、現在、この正確なコードをサブディレクトリのフックで使用していて、うまく機能しています。
ブラッドピッチャー

8

Ionic Forumで解決策を見つけました。これが私にとって有効な唯一の解決策でした。

実行:

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

実行:

イオンコルドバプラットフォーム追加android@8.0.0

実行:

イオンコルドバプラグイン追加Cordova-plugin-androidx

実行:

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

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

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


これが私の古いIonic 3アプリで機能する唯一のソリューションです。ありがとうございました!
Sampath

ionic 3の使用:この問題は解決されましたが、別の問題が発生しました*何が問題か:タスク ':app:compileDebugJavaWithJavac'の実行が失敗しました。>コンパイルに失敗しました。詳細については、コンパイラエラー出力を参照してください。
プレムサニル

1
@PremSanilこれが問題の原因かどうかはわかりませんが、Android StudioのSDK Managerでビルドツール28.0.3をダウンロードしたことを確認してください。
アルペレ

@alpereノードのバージョンをv10.17.0に更新し、未使用のプラグインを削除する必要がありました(Ionic 3ブルーテーマを使用)
Prem Sanil

5

一部のライブラリは使用する必要があります

com.android.support:support-v4:+

どちらであるかを見つける

gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath

そして、最新のアップデートで特定のバージョンを使用していない場合は、そのライブラリをモジュールとして追加します(また、そのライブラリで問題を引き起こします!;))

@avmatteに感謝!

編集:ライブラリのバージョンを強制するようにgradleを要求することもできます

ext {
    supportVersion {latest_version_here}
} // In root project.gradle

configurations.all {
    resolutionStrategy {
        force "com.android.support:support-v4:$supportVersion"
    }
}

4

私は昨日突然同じ問題を抱えていました。ランダムに始まりましたが、読んでみると、@ 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

Kotlin開発者向けのヒント:

ここでこれらの回答に従う場合support-v4、プロジェクトにライブラリがないことは確かですが、それでもこのエラーが表示される場合は、ktxライブラリを確認してください。

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


解決に失敗しました:androidx.fragment:fragment-ktx:0.3を「1.0.0-alpha1」に変更すると、同じ問題が発生します。
Mahmood Ali、

@MahmoodAliは他の依存関係を調べますか?私は自分の状況を投稿しています。Googleは他のパッケージでも同じように間違っている可能性があります。
アントニエフ

@MahmoodAliリンクに感謝しますが、androidxが今年のGoogle IOで発表される前に、プロジェクトのほとんどがktx libの使用を開始すると思います。ktxとサポートライブラリの混在を避けるのは難しいことです。おそらく、androidxへの移行がこの種の例外の最終的な解決策になるはずです。
アントニエフ

4

あなたのplatforms / android / build.gradleに以下の行を追加してください

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

問題が解決しない場合は、次のコマンドを実行してください。

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

3

あなたの中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.+ます。


2

PhoneGapのビルド @catuコメントにmentionnedとしてのユーザー、あなたは試すことができます。このプラグインの目的があるサポートライブラリの異なるバージョンを含むことによって引き起こされたビルドの失敗を防ぐために


1

buildscript {}ブロックの直後に、platforms / android / app / build.gradleファイルに次のコード行を挿入して、この問題を修正します。

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

1

cordova-plugin-file-opener2プラグインをインストールした後、同じ問題が発生しました。それを実行した後、それは取り消されました:オプション1:cordova-android-support-gradle-releaseプラグインをインストールします。cordovaプラグインはcordova-android-support-gradle-release --fetchを追加します


0

同じソリューションを持つ別のアプローチは、フックを作成することです。これは永続的であり(プラットフォームの再インストール後)、コミットでき、プラットフォームを再度追加する必要はありません。

%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

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

SDKを更新し、Androidの最新2バージョンを追加して、コンピューターを再起動するだけです!完了...

車とスポーツについて話す時間があります...


0

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


0

ソリューションリンク

これは互換プラグインによるものです。古いバージョン(1.2.0未満)の場合はそのプラグインを削除し、cordova-android @ 6.3.0を設定します

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

cordovaプラグインはcordova-plugin-compat@1.2.0を追加します

コルドバプラットフォームrm android

イオンコルドバプラットフォーム追加android@6.3.0

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


0

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

0

反応ネイティブでこの問題に遭遇しました、それは私の次の行によって引き起こされました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

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

最終的に私は結局 android@6.4.0

変更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プラグインはインストールされていますが、必要かどうかはわかりません。


-1

という名前のフォルダ内の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>

その要素で、FOUR行を削除android:します。

その変更を行った後、エラーなしで再構築できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.