Не удалось разрешить локальный AAR, созданный из локального исходного модуля - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть библиотечный модуль, который я хочу включить в пример приложения в качестве зависимости AAR:

:my-library
:sample-app

Итак, в sample/build.gradle я делаю следующее:

repositories {
    flatDir {
        dirs "../my-library/build/outputs/aar" 
    }
}

// I have different flavors that specify whether to use the source or binary (aar) dependency

flavorDimensions "SOURCE_OR_BINARY"
    productFlavors {
        source { }
        binary { }
}

dependencies {
    sourceImplementation project(':my-library')
    binaryImplementation(name: 'my-library-release', ext: 'aar') // <-- this line fails with error
}

tasks.whenTaskAdded { task ->
    def taskName = task.name.toLowerCase()
    if (taskName.toLowerCase().contains("binary")) {
        // Prepare libs as binaries
        task.dependsOn ('my-library:assembleRelease')
    }
}

Это прекрасно работает с ./gradlew в командной строке, но Android Studio сообщает Failed to resolve: :my-library-release: во время синхронизации gradle.Если я выполню ./gradlew assemble в командной строке, затем , синхронизирую Android Studio, синхронизация AS Gradle завершится успешно.

Проблема связана с синхронизацией binaryImplementation(name: 'my-library-release', ext: 'aar').Когда выполняется Gradle Sync, aar еще не существует, потому что он еще не построен.

Есть ли лучший способ сделать это, чтобы избежать ошибки Failed to resolve Android Studio Gradle Sync?

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

Вы можете попробовать импортировать таким образом,

Файл -> Новый модуль -> Импорт .Jar / .AAR пакета

0 голосов
/ 26 ноября 2018

Я предлагаю вам использовать локальный репозиторий maven, а не flatDir.Зависимости, которые поступают из FileCollection и / или flatDir, не так полнофункциональны, как зависимости от «реального» хранилища (например, maven / ivy)

Например:

repositories {
    maven {
        url file("${rootProject.projectDir}/mavenRepo") 
    } 
} 
dependencies {
    binaryImplementation "my-group:my-library:1.0@aar"
    ... 
} 

Вы бызатем сохраните артефакт, используя макет каталога maven .Например:

rootProject/mavenRepo/my-group/my-artifact/1.0/my-artifact-1.0.aar
0 голосов
/ 16 ноября 2018

Вам нужно добавить это в основное приложение build.gradle вашего приложения.

    repositories {
          /...
          /...
         flatDir {
            dirs 'libs'
        }
    }

Допустим, если вы .aar файл в папке lib, то вы можете сделать что-то вроде этого.

implementation files('libs/assembleRelease.aar')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...