Зависимость проекта Android Gradle от библиотеки AAR завершается с выпуском 3.5.x - PullRequest
1 голос
/ 15 октября 2019

У меня есть модуль библиотеки Android для Gradle, который зависит от библиотеки Android другого проекта:

androidlib-a depends on androidlib-b

Зависимость androidlib-a

implementation project(path: ':androidlib-b', configuration: "default")

Следующее исключение выдается на этапе конфигурации после обновления доИнструменты сборки Android 3.5.0 из 3.3.0:

Что пошло не так: не удалось определить зависимости задачи ': androidlib-a: lint'. Не удалось разрешить все артефакты для конфигурации ': androidlib-a: releaseCompileClasspath'. Не удалось преобразовать артефакт 'androidlib-b.aar (project: androidlib-b)' для соответствия атрибутам {artifactType = jar}. Не удалось выполнить для IdentityTransform: C: \ LocalData \ projects \ project \ androidlib-b \ build \ output \ aar \ androidlib-b-release.aar. C: \ LocalData \ projects \ project \ androidlib-b \ build \ output \ aar \ androidlib-b-release.aar.

Я изменяю зависимость androidlib-a на:

implementation project(':androidlib-b')

Сборка для androidlib-a из командной строки теперь работает, но у меня возникает следующая проблема при синхронизации студии Android:

ОШИБКА: более одного варианта проекта: androidlib-b соответствуетатрибуты потребителя: - Конфигурация ': androidlib-b: releaseRuntimeElements' вариант android-assets: - Несоответствующие атрибуты: - Найден artifactType 'android-assets', но не требуется. - Найден com.android.build.api.attributes.VariantAttr 'release', но не требуется. - Совместимые атрибуты: - Обязательный com.android.build.api.attributes.BuildTypeAttr 'release' и найдено совместимое значение 'release'. - Требуется com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' и найдено совместимое значение 'Aar'. - Требуется org.gradle.usage java-runtime и найдено совместимое значение java-runtime. - Конфигурация ': androidlib-b: releaseRuntimeElements' вариант android-классы: - Несоответствующие атрибуты: - Найден artifactType 'android-classes', но не требуется. - Найден com.android.build.api.attributes.VariantAttr 'release', но не требуется. - Совместимые атрибуты: - Обязательный com.android.build.api.attributes.BuildTypeAttr 'release' и найдено совместимое значение 'release'. - Требуется com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' и найдено совместимое значение 'Aar'. - Требуется org.gradle.usage java-runtime и найдено совместимое значение java-runtime. - Конфигурация ': androidlib-b: releaseRuntimeElements' вариант android-consumer-proguard-rules: ...

После изменения у меня также возникает проблема в другом модуле, который зависит от androidlib-a, и пытаетсяскопировать зависимости следующим образом:

task copyToLib() {
    afterEvaluate {
        dependsOn ":androidlib-a:assembleRelease"
    }
    doLast {
        delete libDir
        def config = rootProject.project(":project").configurations.releaseRuntimeClasspath
        println config.toList()
        copy {
            into libDir
            from config
        }
    }
}

preBuild.dependsOn "copyToLib"

Не удалось выполнить задачу ': anothermodule: copyToLib'. Не удалось разрешить все файлы для конфигурации ': androidlib-a: releaseRuntimeClasspath'. Более одного варианта проекта: androidlib-b соответствует атрибутам потребителя: - Конфигурация ': androidlib-b: releaseRuntimeElements' вариант android-assets: - Несоответствующие атрибуты: - Найден artifactType 'android-assets', но он не требуется. - Найден com.android.build.api.attributes.VariantAttr 'release', но не требуется. - Совместимые атрибуты: - Обязательный com.android.build.api.attributes.BuildTypeAttr 'release' и найдено совместимое значение 'release'. - Требуется com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' и найдено совместимое значение 'Aar'. - Требуется org.gradle.usage java-runtime и найдено совместимое значение java-runtime. - Конфигурация ': androidlib-b: releaseRuntimeElements' вариант android-классы: - Несоответствующие атрибуты: - Найден artifactType 'android-classes', но не требуется. - Найден com.android.build.api.attributes.VariantAttr 'release', но не требуется. - Совместимые атрибуты:- Требуется com.android.build.api.attributes.BuildTypeAttr 'release' и найдено совместимое значение 'release'. - Требуется com.android.build.gradle.internal.dependency.AndroidTypeAttr 'Aar' и найдено совместимое значение 'Aar'. - Требуется org.gradle.usage 'java-runtime' и найдено совместимое значение 'java-runtime'.

Те же проблемы присутствуют в выпусках инструментов сборки Android 3.5.1.

Полная версия androidlib-a:

apply plugin: 'com.android.library'

version = releaseVersion

android {
    compileSdkVersion 27
    buildToolsVersion '28.0.3'

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName releaseVersion
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

dependencies {
    implementation project(path: ':androidlib-b', configuration: "default")
}

Полная версия androidlib-b:

apply plugin: 'com.android.library'

version = releaseVersion

android {
    compileSdkVersion 27
    buildToolsVersion '28.0.3'

    defaultConfig {
        minSdkVersion 19
        targetSdkVersion 27
        versionCode 1
        versionName releaseVersion
    }

    buildTypes {
        release {
            minifyEnabled false
        }
    }
}

1 Ответ

0 голосов
/ 24 октября 2019

Я не могу сказать, является ли это вашей проблемой, но Android Studio 3.5 по умолчанию включает сжатие и минимизацию R8, заменяя Proguard - и включая его, я бы сказал, даже при отладочных типах сборки, по крайней мере, в некоторых частях -.

В этой версии проблема связана с AAR. Android Studio не может найти зависимости JAR, содержащиеся в AAR. Предполагается, что эта проблема должна быть исправлена ​​в Android Studio 3.6.0-alpha05 или выше на канале Canary, доступном для загрузки на веб-сайте Android Studio.

Также Если AAR не содержат JAR-зависимостей, у вас все еще может быть NoClassDefFoundException илиNoSuchMethodError во время выполнения, когда ваша библиотека AAR пытается использовать некоторые сторонние библиотеки. Эта проблема еще не устранена, но вы можете применить следующий обходной путь:

Просто добавьте следующую строку в ваши gradle.properties в корневом каталоге, синхронизируйте проект и перезапустите:

android.enableD8.desugaring=false

Вы также можете решить обе проблемы, загрузив AAR в любой репозиторий, такой как локальный репозиторий или облачные репозитории, такие как JFrog или частный сервер Nexus (если ваша библиотека является частной), или даже в Maven или аналогичный общедоступный репозиторий (если ваша библиотека общедоступна), какэти ошибки влияют только на AAR, включенные вручную, а не на загруженные из репозитория

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