Я публикую многомодульную библиотеку Android. Сценарий использования: я хочу запустить пример приложения (в режиме отладки) против выпуска AAR (которые защищены) моей библиотеки. Конечная цель - проверить, какие именно артефакты будут опубликованы.
Мои модули и их требуемые типы сборки:
:my-library (release)
:mock-server (debug)
:sample (debug)
:sample
зависит от :my-library
и :mock-server
. :mock-server
также зависит от :my-library
.
Для этого я настроил размер вкуса:
android {
flavorDimensions "SOURCE_OR_BINARY"
productFlavors {
source {
// indicates that project dependencies are used directly
}
binary {
// dependencies added via here will be AARs
}
}
dependencies{
binaryImplementation(name: ':my-library', ext: 'aar')
sourceImplementation project(':my-library')
implementation project(':mock-server')
}
task prepareBinaryDependencies(dependsOn: [
":my-library:assembleRelease" // to generate AARs
]) {}
//
tasks.whenTaskAdded { task ->
def taskName = task.name.toLowerCase()
if (taskName.toLowerCase().contains("binary")) {
// Prepare libs as binaries
task.dependsOn prepareBinaryDependencies
task.doFirst {
prepareBinaryDependencies
}
}
}
Это прекрасно работает с ./gradlew
в командной строке, но Android Studio часто сообщает о Failed to resolve: :my-library-release:
во время синхронизации gradle. Если я выполню ./gradlew assemble
в командной строке, , а затем синхронизирую Android Studio, синхронизация AS Gradle завершится успешно.
Кажется, я здесь что-то не так делаю. Есть ли способ сделать это лучше, чтобы избежать ошибки синхронизации Failed to resolve
Android Studio Gradle?