Android studioをバージョン3.3 canary 13
に更新しました(このドキュメントの執筆時点で最新)。プロジェクトのGradleバージョンを更新するように求められ、バージョン3.3.0-alpha13
に更新しました
classpath 'com.Android.tools.build:gradle:3.3.0-alpha13'
プロジェクトを実行しようとすると、エラーで失敗しました
Error: Class descriptor 'Landroid/support/customtabs/ICustomTabsCallback/;' cannot be represented in dex format.
キャッシュを無効化し、プロジェクトをクリーンアップして再構築しようとしましたが、何も機能しませんでした。以下は私のアプリのbuild.gradleです
dependencies {
implementation fileTree(include: ['*.jar'], dir: 'libs')
androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0-alpha3', {
exclude group: 'com.Android.support', module: 'support-annotations'
})
implementation 'androidx.appcompat:appcompat:1.0.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.Android.material:material:1.0.0'
}
私は./gradlew build --stacktrace
コマンドを試すことにし、ICustomTabsCallback
クラスがandroidx.browser:browser:1.0.0-rc01
ライブラリによって使用されていることを確認しました。
> Transform browser.aar (androidx.browser:browser:1.0.0-rc01) with DexingTransform
AGPBI: {"kind":"error","text":"Class descriptor \u0027Landroid/support/customtabs/ICustomTabsCallback/;\u0027 cannot be represented in dex format.","sources":[{}],"tool":"D8"}
> Task :app:mergeExtDexDebug FAILED
AGPBI: {"kind":"error","text":"Class descriptor \u0027Landroid/support/customtabs/ICustomTabsCallback/;\u0027 cannot be represented in dex format.","sources":[{}],"tool":"D8"}
FAILURE: Build failed with an exception.
次に、./gradlew app:dependencies
コマンドを使用して、依存関係に競合がないかどうかを確認したところ、エラーが見つかりました。
+--- androidx.appcompat:appcompat:1.0.0-rc01 -> 1.0.0 (*)
| \--- androidx.browser:browser:1.0.0-rc01
| +--- androidx.core:core:1.0.0-rc01 -> 1.0.0 (*)
| +--- androidx.annotation:annotation:1.0.0-rc01 -> 1.0.0
| +--- androidx.interpolator:interpolator:1.0.0-rc01 -> 1.0.0 (*)
| +--- androidx.collection:collection:1.0.0-rc01 -> 1.0.0 (*)
| \--- androidx.legacy:legacy-support-core-ui:1.0.0-rc01 -> 1.0.0 (*)
上記の抜粋は、debugCompileClasspath
構成の依存関係の一部を示しています。 androidx.appcompat:appcompat
には推移的な依存関係としてandroidx.browser:browser
が含まれていることがわかります。
androidx.appcompat:appcompat:1.0.0-rc01 -> 1.0.0
は、バージョン1.0.0
の代わりにバージョン1.0.0-rc01
が使用されることを意味しますが、androidx.browser:browser
はそうではありません。バージョン1.0.0-rc01
の代わりにバージョン1.0.0
が使用されます
このエラーを解決するために、アプリのbuild.gradle
に以下のコードブロックを追加して、推移的な依存関係を削除しました
configurations {
compile.exclude group: 'androidx.browser', module: 'browser'
}
だから私のアプリのbuild.gradleはこのようになります
apply plugin: 'com.Android.application'
apply plugin: 'kotlin-Android'
apply plugin: 'kotlin-Android-extensions'
apply plugin: 'kotlin-kapt'
apply plugin: 'realm-Android'
Android {
//....
}
configurations {
compile.exclude group: 'androidx.browser', module: 'browser'
}
dependencies {
// ....
}
その後、同期、クリーンアップ、プロジェクトの再構築を行いました。
[〜#〜]更新[〜#〜]
答えがあなたの問題を解決しない場合、他のオプションは、Androidスタジオの安定バージョン(この執筆による3.2.1))とGradle 3.2.1を使用することですclasspath 'com.Android.tools.build:gradle:3.2.1'
styles.xml
のテーマを変更して、MaterialComponentsテーマの1つを拡張するようにしてください。
<style name="AppTheme" parent="Theme.MaterialComponents.Light.DarkActionBar">
別のオプション:
Theme.MaterialComponents
Theme.MaterialComponents.NoActionBar
Theme.MaterialComponents.Light
Theme.MaterialComponents.Light.NoActionBar
Theme.MaterialComponents.Light.DarkActionBar
AndroidXをJetifierで動作させるときにこの問題が発生した場合は、いくつかのオプションがあります。
Gradleとプラグインのバージョンを更新できる場合は、更新する必要があります。これは3.3.0以降で修正されたバグです。ここで必要なGradle /プラグインバージョンの組み合わせを確認できます。 https://developer.Android.com/studio/releases/gradle-plugin 。
私の場合、私はGradle 4.6に縛られていましたが、それはプラグインのバージョンが3.2.1で最高です(私はUnity 2017.4 LTSを使用しています)。見つかった回避策 here をbuild.gradleファイルに追加して、どこに適用できますか?
buildscript {
dependencies {
classpath 'com.Android.tools.build:gradle:3.2.1'
classpath 'com.Android.tools.build.jetifier:jetifier-processor:1.0.0-beta02'
}
}
これを指摘した上記のコメントの@TheHebrewHammerの功績です。