Проблема Play-Services-Maps и Android Studio 3.3 с AndroidX, связанная с библиотекой аннотаций - PullRequest
0 голосов
/ 16 января 2019

Я недавно обновил свой проект для сборки из Android Studio 3.3, в который были внесены следующие изменения (запрашивается при запуске Android Studio):

зависимость build.gradle:

classpath 'com.android.tools.build:gradle:3.3.0'

Gradle-обертка:

distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.1-all.zip

Это вызвало ряд ошибок в модуле функций при попытке синхронизации с использованием Google Maps. Я использую версию 16.0.0 play-services-maps:

implementation "com.google.android.gms:play-services-maps:16.0.0"

Ошибки, которые появлялись при попытке синхронизации gradle, были:

ERROR: Unable to resolve dependency for ':featureModule@flavorDebugFeature/compileClasspath': Could not resolve androidx.annotation:annotation:1.0.0.

ERROR: Unable to resolve dependency for ':featureModule@flavorDebugFeature/compileClasspath': Could not resolve androidx.annotation:annotation:1.0.1.

ERROR: Unable to resolve dependency for ':featureModule@flavorDebugFeature/compileClasspath': Could not resolve androidx.core:core:1.0.0.

ERROR: Unable to resolve dependency for ':featureModule@flavorDebugFeature/compileClasspath': Could not resolve androidx.core:core:1.0.1.

Это повторяется для каждой возможной комбинации вариантов вкуса в этом модуле.

Стоит отметить, что этот проект был перенесен на androidX несколько месяцев назад и работал нормально.

Исправление ошибок заключается в добавлении следующего к зависимостям gradle для этого неисправного модуля:

implementation "androidx.annotation:annotation:1.0.1"
implementation "androidx.core:core:1.0.1"

Приложение прекрасно компилируется и запускается на устройстве. Отлично. До тех пор, пока мы не попытаемся запустить lint в сборке CI перед выпуском проекта, и мы не столкнемся с проблемой: сообщение об ошибке:

Execution failed for task ':featureModule:lintFlavorDebug'.
> Lint infrastructure error
  Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
... [several lines omitted for brevity]
 Caused by: java.lang.IllegalStateException: Expected task 'processFlavorDebugAndroidTestJavaRes' output files to contain exactly one file, however, it contains no files.
    at org.gradle.api.internal.file.AbstractFileCollection.getSingleFile(AbstractFileCollection.java:65)
    at com.android.build.gradle.internal.variant.BaseVariantData.getJavaResourcesForUnitTesting(BaseVariantData.java:700)
    at com.android.build.gradle.internal.ide.ModelBuilder.createAndroidArtifact(ModelBuilder.java:992)
    at com.android.build.gradle.internal.ide.ModelBuilder.createVariant(ModelBuilder.java:617)
    at com.android.build.gradle.internal.ide.ModelBuilder.buildAndroidProject(ModelBuilder.java:399)
    at com.android.build.gradle.internal.ide.ModelBuilder.buildAll(ModelBuilder.java:212)
    at com.android.tools.lint.gradle.LintGradleExecution.createAndroidProject(LintGradleExecution.java:352)
    at com.android.tools.lint.gradle.LintGradleExecution.analyze(LintGradleExecution.java:85)
    ... 59 more

Эта проблема исчезнет, ​​если мы удалим 2 новые зависимости (плюс Google Maps, что, по-видимому, является причиной требования к ядру и библиотекам аннотаций).

Я провел некоторый поиск и здесь, и через Google, и исключение Expected task 'processFlavorDebugAndroidTestJavaRes' output files to contain exactly one file, however, it contains no files. было замечено другими, и их решение состоит в том, чтобы убедиться, что базовый файл build.gradle имеет флаг baseFeature true в defaultConfig , который уже присутствует в моем проекте.

Теперь я застрял в поисках решения этой проблемы, куда идти дальше.

...