Подтвердить что ты не робот

Gradle для Android AAR в зависимости от AAR, оба в одном удаленном репозитории?

В отношении транзитивных зависимостей с файлами AAR в Gradle есть несколько вопросов:

Я тоже столкнулся с подобными проблемами, пытаясь настроить транзитивные зависимости от файлов AAR в удаленном репозитории. У меня есть приложение А, в зависимости от библиотеки B, которое, в свою очередь, зависит на Библиотеке C. Библиотека C находится в репозитории Maven. Библиотека B находится в одном и том же репо, с POM , который содержит зависимость от Библиотеки C. В приложении А есть библиотека B в своих зависимостях. Тем не менее, запуск gradle clean assembleDebug приводит к: "Версия модуля [Библиотека B] зависит от библиотек, но не является самой библиотекой".

Я попытался поставить щедрость на один из этих вопросов, надеясь на ясность, без везения.

Мое предположение состоит в том, что есть два возможных источника трудности: я и те, у кого есть вышеупомянутый вопрос SO, видят:

  • Транзитные зависимости AAR от удаленного репозитория просто сломаны

  • Транзитные зависимости AAR от работы удаленного репозитория, но в наших файлах POM, файлах build.gradle есть что-то, что-то, что нарушает зависимости

Вопрос: Кто-нибудь знает об артефакте AAR в каком-либо публичном репозитории (например, Maven Central), который зависит от другого артефакта AAR, также в том же публичном репозитории?

Меня не интересует AAR, который зависит от чего-то в локальном репозитории, например AAR в Maven Central, который зависит от com.android.support:support-v4. В моем случае, если библиотека B и библиотека C находятся в моем локальном репозитории Maven (~/.m2), все работает нормально.

Согласно Xav, то, что я делаю, должно работать. Поэтому я надеюсь, что кто-нибудь может указать мне на рабочий пример, чтобы я мог использовать его, чтобы определить, где все остальные могут ошибаться.

ПРИМЕЧАНИЕ. Я знаю, что запрос ресурсов вне сайта verboten. В этом случае я не ищу ресурс сам по себе, а в качестве примера рабочей конфигурации, чтобы помочь отладить нерабочую конфигурацию. Если у вас есть другой способ написать ответ, показывающий рабочую конфигурацию, это было бы потрясающе!

Спасибо!

4b9b3361

Ответ 1

Похоже, что моя проблема прояснилась с помощью Gradle 1.9 и com.android.tools.build:gradle:0.7.+. В лучшем случае я больше не могу воспроизвести проблему.

Ответ 2

У меня нет публичного примера, но этот сценарий успешно настроен во внутреннем хранилище Nexus. Вот настройка:

Приложение - Android-приложение LibraryB - проект библиотеки Android picasso - библиотека с открытым исходным кодом с площади (доступна на Maven Central) LibraryA - проект библиотеки Android

Приложение зависит от LibraryB и picasso LibraryB зависит от LibraryA

Вот POM для LibraryB (загруженный из Nexus)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example</groupId>
   <artifactId>LibraryB</artifactId>
   <version>0.1</version>
   <packaging>aar</packaging>
   <dependencies>
      <dependency>
         <groupId>com.example</groupId>
         <artifactId>LibraryA</artifactId>
         <version>3.0.1</version>
         <scope>compile</scope>
      </dependency>
      <dependency>
         <groupId>com.squareup.picasso</groupId>
         <artifactId>picasso</artifactId>
         <version>2.1.1</version>
         <scope>compile</scope>
      </dependency>
   </dependencies>
</project>

Вот build.gradle для LibraryB

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android-library'
apply plugin: 'maven'

version versionProp
group 'com.example'

repositories {
    mavenCentral()
    maven {
        url(exampleReleaseRepoUrl)
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
    }
    release {
        runProguard false
        proguardFile 'proguard-rules.txt'
        proguardFile getDefaultProguardFile('proguard-android.txt')
    }
}

dependencies {
    compile 'com.example:LibraryA:3.0.1'
    compile 'com.squareup.picasso:picasso:2.1.1'
}

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: uri(exampleReleaseRepoUrl)) {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
            snapshotRepository(url: uri(exampleSnapshotRepoUrl)) {
                authentication(userName: nexusUsername, password: nexusPassword)
            }
        }
    }
}

Вот POM для LibraryA (загруженный с Nexus)

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <groupId>com.example</groupId>
   <artifactId>LibraryA</artifactId>
   <version>3.0.1</version>
   <packaging>aar</packaging>
   <dependencies>
      <dependency>
         <groupId>com.android.support</groupId>
         <artifactId>support-v4</artifactId>
         <version>19.0.0</version>
         <scope>compile</scope>
      </dependency>
   </dependencies>
</project>

build.gradle для LibraryA очень похож на тот, что указан в LibraryB выше.

Артефакты и POM для LibraryA и LibraryB были загружены с помощью следующей команды Gradle

gradle uploadArchives

Конструкция для приложения выглядит так:

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.6.+'
    }
}
apply plugin: 'android'

repositories {
    mavenCentral()
    maven {
        url(exampleReleaseRepoUrl)
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion "19.0.0"

    defaultConfig {
        minSdkVersion 8
        targetSdkVersion 19
    }
    buildTypes {
        release {
            runProguard false
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }
    productFlavors {
        defaultFlavor {
            proguardFile 'proguard-rules.txt'
        }
    }
}

dependencies {
    compile 'com.android.support:support-v4:19.0.0'
    compile 'com.android.support:appcompat-v7:19.0.0'
    compile 'com.example:LibraryB:0.1'
}

Если вам нужна дополнительная информация, дайте мне знать.

Ответ 3

Начиная с Android Studio 0.4.4 с использованием зависимостей .AAR так же просто, как и с использованием зависимостей .JAR. Просто поместите его в каталог \libs и укажите его в build.gradle:

compile files('libs/YOUR_LIBRARY_NAME.aar')