web-dev-qa-db-ja.com

クラス記述子「Landroid / support / customtabs / ICustomTabsCallback /;」 dex形式で表現できません

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'

}
9
Edijae Crusar

私は./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'

5
Edijae Crusar

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

これについての詳細: https://github.com/material-components/material-components-Android/blob/master/docs/getting-started.md

0
SEG.Veenstra

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の功績です。

0
JimmyDeemo