Android Studio не видит зависимости (а Gradle знает!)
Я создал чистую библиотеку Java и скомпилировал две версии: одну затененную (с использованием плагина gradle shadow), другую - нет, и развернул их в моем локальном хранилище Nexus.
В моем проекте библиотеки Android я создал два продукта productFlavors, стандартный и затененный, которые ссылаются на соответствующие артефакты в моем хранилище Nexus. В Android Studio только стандартный вариант продукта с не затененным jar показывает библиотеки во внешних библиотеках.
Переключение на любой из вариантов теневой сборки приводит к тому, что зависимости полностью отсутствуют в Android Studio, и весь код, ссылающийся на любой из них, кажется, нарушен в AS. (При переключении вариантов сборки приходится менять синхронизацию для изменения зависимостей).
Другие зависимости, добавленные в теневую конфигурацию компиляции, такие как firebase, обнаруживаются и работают просто отлично. Так что это только одна зависимость. Ничего необычного не печатается в консоли Gradle или журнале событий.
Однако Gradle из командной строки - это совсем другая история. Запуск библиотеки./gradlew: зависимости показывает соответствующие библиотеки и их зависимости , и я могу без проблем скомпилировать и собрать свои AAR для всех вариантов из командной строки. Он работал, когда библиотека Android была подпроектом моего более крупного проекта, но, поскольку я разбил его на отдельный проект в Android Studio, похоже, он больше не работает.
Build.gradle выглядит так (исключая обычные вещи):
android {
publishNonDefault true
productFlavors {
standard {}
shadowed {}
}
}
dependencies {
standardCompile 'groupId:core:1.0.0-SNAPSHOT'
shadowedCompile 'groupId:core-shadowed:1.0.0-SNAPSHOT'
}
FWIW, это использует:
Android Studio 2.3.3 Build #AI-162.4069837, built on June 6, 2017
JRE: 1.8.0_92-b14 x86_64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Gradle Plugin: 2.3.3
Gradle: 3.5
Build Tools: 25.0.3
Единственное, что я действительно смог определить, что отличается между этими двумя (помимо перемещенных пакетов и различного набора зависимостей в pom), это содержимое папки META-INF теневого фляги - интересно, может ли это быть сбивает с толку КАК? В частности, плагин shadow добавляет запись Class-Path в MANIFEST.MF, в которой перечислены файлы jar зависимостей времени выполнения, которые были исключены из толстого jar, а также папку META-INF/maven/, содержащую записи с.pom для каждого из те, а также.