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"
どうすればこの問題を解決できますか?
以下を build-extras.gradle に入れてください。
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
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 2:build.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:未処理の約束拒否」
同じエラーが私に起こっています。どうやら、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
を実行しました。少なくとも開発のために役立つことを願っています。
私はこの問題をplatform/Androidフォルダに移動してproject.properties
)ファイルを編集し、com.Android.support:support-v4:+
をcom.Android.support:support-v4:27.1.0
に置き換えることで修正しました。
あなたが本当にあなたのビルドを動かすためにその問題の素早い修正が必要なだけなら、あなたはあなたのplatform/Android/build.gradleファイルに以下の行を追加しようとするかもしれません:
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
とにかく、ここでバージョンを設定することは持続可能な修正ではありません。
奇妙なことですが、同じバージョンで以下の行を追加するとうまくいきます。
これは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-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:+ のプラグインディレクトリで完全な調査を行い、それを静的バージョンコードに置き換えました。
私の場合、 com.Android.support:support-v4:23.4.0 はうまく機能しました。その後、Androidプラットフォームを削除して再追加する必要はありませんでした。
私は同じエラーがありますが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}'
...
}
}
上記のコードは依存関係のバージョンを強制します。
以下の行をあなたのプラットフォームに追加してください/ Android/build.gradle
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
まだ問題がある場合は、このコマンドを実行してみてください。
cordova plugin add cordova-Android-support-gradle-release --fetch
Kotlin開発者のためのちょっとしたコツ:
あなたがここでこれらの答えに従うならば、あなたはあなたのプロジェクトにsupport-v4
ライブラリがないことは確かですが、あなたはまだこのエラーを見ています、ktx
ライブラリを見てください。
Ktxライブラリに最新の1.0.0-alpha1
バージョンを使用していることがわかり、このエラーが表示されます。私がバージョン0.3
に戻った後は、すべて正常に戻りました。
昨日も私は同じ問題を抱えていました。それはランダムに開始しました、しかし読んでみると、それは@ 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が問題のようです。
これが誰かが前進するのに役立つことを願っています。
あなたのライブラリのいくつかは使っているはずです
com.Android.support:support-v4:+
であるものを見つけて
gradlew -q dependencies app:dependencies --configuration debugAndroidTestCompileClasspath
最新のアップデートで特定のバージョンを使用していない場合は、そのライブラリをモジュールとして追加します(そのライブラリの問題も提起してください)。
@avmatteに感謝します。
私は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" />
stackoverflowの回答でも処理されます: https://stackoverflow.com/a/56656680/839691
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.+
に変更します。
@catuがコメントで述べたように、 Phonegap Build usersの場合、 このプラグイン 目的はサポートライブラリの異なるバージョンを含めることによるビルド失敗を防ぐためを試すことができます。 。
Cordova-plugin-file-opener2プラグインをインストールした後も同じ問題がありました。それはやった後に解決しました:オプション1:cordova-Android-support-gradle-releaseプラグインをインストールします。 cordovaプラグインを追加cordova-Android-support-gradle-release --fetch
buildscript {}ブロックの直後に、platform/Android/app/build.gradleファイルに次のコードを追加してこの問題を解決する:
configurations.all {
resolutionStrategy {
force 'com.Android.support:support-v4:27.1.0'
}
}
イオンを使用していてこのエラーが発生した場合は、次の手順を実行して解決してください。
-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
ビルドを実行します。
コルドバビルドアンドロイド
非常にシンプルで _正しい_ それを解決する方法!
ただsdkを更新してAndroidの最新の2バージョンを追加してください...そしてコンピュータを再起動してください!完了しました...
今、私たちは車とスポーツについて話す時間があります...
@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'
}
}
この問題は一週間私を殺していた。
最終的に私は[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
プラグインはインストールされていますが、必要かどうかはわかりません。
これはcompatプラグインによるものです。古いバージョン( 1.2.0 未満)があり、 [email protected] を設定している場合は、そのプラグインを削除してください。
cordovaプラグインrm cordova-plugin-compat --force
cordovaプラグインは[email protected]を追加します
コルドバプラットフォームRMアンドロイド
イオンコルドバプラットフォームは[email protected]を追加
私のケースで働いています。ありがとう:)
私は同じ問題を抱えていた、そして与えられた解決策のどれも私のために働かなかった。最新バージョンのAndroid SDK Build-tools(27.0.3)をインストールすることで私の問題は解決しました。
反応ネイティブでこの問題に遭遇していましたが、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)に変更すると、問題が解決しました