С Gradle, как я могу использовать зависимость / подпроект, который определяет кучу задач, которые выводят .aar? - PullRequest
0 голосов
/ 11 июня 2019

У меня есть существующий проект 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 и ветка , которые соответствуют приведенному выше коду, если вам нужен более подробный код или возможность воспроизвести проблему.

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