У меня есть существующий проект A, который зависит от подпроекта B (aauto-sdk). Ранее B создавался с использованием некоторой магии, которая загружает его с github и выполняет правильные действия, но проект github по умолчанию больше не используется, и мне приходится использовать более старую версию. Считайте, что вверх по течению не работает. Я решил просто клонировать проект в его собственный каталог, а затем добавить этот каталог проекта в качестве модуля (, например ). Идея состоит в том, чтобы просто скопировать известное рабочее состояние проекта B в дерево файлов проекта A, что исключает необходимость синхронизации проекта A с непредсказуемым проектом github.
В этот момент я получаю сообщение об ошибке сборки вроде этого:
Построить вывод
FAILURE: Build failed with an exception.
* What went wrong:
Could not determine the dependencies of task ':app:compileReleaseJavaWithJavac'.
> Could not resolve all task dependencies for configuration ':app:releaseCompileClasspath'.
> Could not resolve project :aauto-sdk.
Required by:
project :app
> Unable to find a matching configuration of project :aauto-sdk: None of the consumable configurations have attributes.
Он поставляется с ошибками синхронизации, которые выглядят так:
Синхронизация
CONFIGURE SUCCESSFUL in 1s
ERROR: Unable to resolve dependency for ':app@debug/compileClasspath': Could not resolve project :aauto-sdk.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@debugAndroidTest/compileClasspath': Could not resolve project :aauto-sdk.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@debugUnitTest/compileClasspath': Could not resolve project :aauto-sdk.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@release/compileClasspath': Could not resolve project :aauto-sdk.
Show Details
Affected Modules: app
ERROR: Unable to resolve dependency for ':app@releaseUnitTest/compileClasspath': Could not resolve project :aauto-sdk.
Show Details
Affected Modules: app
После долгих поисков я понял, что этот подпроект может быть несколько необычным по нескольким причинам:
- У него нет определения
buildTypes
в его файле build.gradle, в то время как основной модуль проекта определяет тип сборки release
, и это, похоже, вызывает вышеуказанную ошибку.
- Более того, у подпроекта даже нет уровня приложения build.gradle, а только уровень проекта build.gradle.
- Подпроектный уровень build.gradle содержит набор задач, которые выполняют некоторую нетривиальную логику типа «скачать-извлечь-массаж-переупаковку» перед тем, как в конечном итоге вывести файл .aar.
- В build.gradle подпроекта есть раздел
publishing
, который выполняет кучу вещей Maven.
Итак, подпроект build.gradle имеет такие строки:
$ project_dir / AAUTO-SDK / build.gradle
...
task buildAar(dependsOn: [collectResources, makePublicTxt, buildJar,
makeProguardTxt], type: Zip) {
from outDir
include 'AndroidManifest.xml', 'R.txt', 'public.txt', 'proguard.txt',
'classes.jar', 'res/**'
archiveName 'aauto.aar'
destinationDir buildDir
}
task clean {
doLast {
delete buildDir
}
}
task build(dependsOn: buildAar)
...
Я подозреваю, что если я смогу заставить Gradle выполнить задачу build
в build.gradle подпроекта в нужное время, и тогда мой корневой проект будет использовать полученный файл .aar, все может быть хорошо. Может быть. Я надеюсь.
Вот некоторые соответствующие выдержки из текущего файла build.gradle уровня модуля моего корневого проекта:
$ project_dir / приложение / build.gradle
android {
...
compileSdkVersion 28
buildToolsVersion '28.0.3'
defaultConfig {
applicationId "com.google.android.kk"
minSdkVersion 16
targetSdkVersion 28
versionCode 38
versionName "2.0.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
repositories {
flatDir {
dirs 'libs'
}
jcenter()
google()
repositories {
maven {
url "https://jitpack.io"
}
}
}
...
}
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.realm:realm-gradle-plugin:5.11.0"
}
}
dependencies {
...
implementation project(path: ':aauto-sdk')
...
}
Строка implementation project(path: ':aauto-sdk')
кажется недостаточной. Как мне сделать эту работу?
Вот репозиторий github и ветка , которые соответствуют приведенному выше коду, если вам нужен более подробный код или возможность воспроизвести проблему.