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

Транзитивные зависимости, не разрешенные для библиотеки aar с использованием gradle

Я исследовал некоторое время и, вероятно, видел наиболее популярные ответы здесь, связанные с aar и транзитивными зависимостями, но почему-то мне пока не ясно, как это сделать.

Итак:

У меня есть андроидная библиотека с заданным gradle config:

apply plugin: 'android-library'
apply plugin: 'android-maven'

version = "1.0.0"
group = "com.somepackage"

buildscript {
    repositories {
        mavenCentral()
        mavenLocal()
    }

    dependencies {
        classpath 'com.github.dcendents:android-maven-plugin:1.0'
    }
}

android {
    compileSdkVersion 19
    buildToolsVersion '19.0.3'

    defaultConfig {
        minSdkVersion 10
    }
}

repositories {
    maven { url 'http://www.bugsense.com/gradle/' }
}

dependencies {
    provided 'com.google.android.gms:play-services:+'
    provided 'com.android.support:appcompat-v7:+'
    compile 'com.google.code.gson:gson:2.2.4'
    compile 'com.bugsense.trace:bugsense:3.6'
    compile 'commons-net:commons-net:3.3'
}

Затем я развертываю его в локальном репозитории maven с помощью gradle install. POM файл развернутой библиотеки выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.sprezzat</groupId>
  <artifactId>app</artifactId>
  <version>1.0.0</version>
  <packaging>aar</packaging>
  <dependencies>
    <dependency>
      <groupId>com.bugsense.trace</groupId>
      <artifactId>bugsense</artifactId>
      <version>3.6</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>commons-net</groupId>
      <artifactId>commons-net</artifactId>
      <version>3.3</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.google.code.gson</groupId>
      <artifactId>gson</artifactId>
      <version>2.2.4</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
</project>

И, наконец, gradle config моего приложения для Android, использующего вышеуказанную библиотеку в качестве зависимости:

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

repositories {
    mavenCentral()
    mavenLocal()
}

android {
    compileSdkVersion 15
    buildToolsVersion "19.0.2"

    defaultConfig {
        minSdkVersion 10
        targetSdkVersion 18
    }
}

dependencies {
    compile 'com.google.android.gms:play-services:+'
    compile 'com.android.support:appcompat-v7:+'
    compile 'com.somepackage:LIBRARY_NAME:[email protected]'
}

И после развертывания приложения по телефону я получаю NoClassDefFoundError для классов, связанных с компиляцией зависимостей моей библиотеки Android.

Проверка моих зависимостей приложений Android с помощью gradle dependencies:

apk - Classpath packaged with the compiled main classes.
+--- com.google.android.gms:play-services:+ -> 4.3.23
|    \--- com.android.support:support-v4:19.0.1 -> 19.1.0
+--- com.android.support:appcompat-v7:+ -> 19.1.0
|    \--- com.android.support:support-v4:19.1.0
\--- com.somepackage:LIBRARY_NAME:1.0.0

В соответствии с приведенным выше деревом все транзитивные зависимости не обнаруживаются. Где проблема и как это должно быть сделано правильно?

4b9b3361

Ответ 1

Я решил свою проблему, установив атрибут transitive для моей зависимости aar:

compile ('com.somepackage:LIBRARY_NAME:[email protected]'){
    transitive=true
}

Ответ 2

вы не должны использовать "@aar", если использование "@" становится " только обозначение Artifact", если вы хотите использовать "@" и хотите иметь транзитивную зависимость, вы должны добавить "transitive = true"

Ответ 3

Попробуйте это, если вы используете aar локально:

compile(project(:your-library-name)) {
    transitive=true
}