Дескриптор класса 'Landroid / support / customtabs / ICustomTabsCallback /;'не может быть представлен в формате dex - PullRequest
0 голосов
/ 04 октября 2018

Я обновил свою андроид студию до версии 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'

}

Ответы [ 3 ]

0 голосов
/ 10 октября 2018

Попробуйте изменить свою тему в styles.xml, чтобы она расширяла одну из тем MaterialComponents.

<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 голосов
/ 24 июля 2019

Если у кого-то возникла такая проблема с настройкой AndroidX для работы с Jetifier, у вас есть несколько вариантов.

Если вы можете обновить версию Gradle и плагина, вам следует это сделать;это ошибка, которая была адресована 3.3.0 и выше.Вы можете увидеть, какая комбинация версий Gradle / Plugin вам нужна здесь;https://developer.android.com/studio/releases/gradle-plugin.

В моем случае я был привязан к Gradle 4.6 и его максимальной версии плагина 3.2.1 (я использую Unity 2017.4 LTS).В котором я могу применить найденный обходной путь здесь , добавив в свой файл 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 голосов
/ 04 октября 2018

Я решил попробовать команду ./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-rc01 будет использоваться версия 1.0.0, но это не относится к androidx.browser:browser,вместо версии 1.0.0

будет использоваться версия 1.0.0-rc01. Чтобы устранить эту ошибку, я просто удалил транзитивные зависимости, добавив приведенный ниже блок кода в build.gradle

configurations {
    compile.exclude group: 'androidx.browser', module: 'browser'
}
* моего приложения.1027 * Итак, 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 studio (3.2.1 согласно этой статье) и gradle3.2.1 classpath 'com.android.tools.build:gradle:3.2.1'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...