Pregunta Importar mi biblioteca de Android en una aplicación no se reconoce como una biblioteca


Estoy tratando de construir una biblioteca de Android que utiliza un núcleo de la biblioteca de Java (myLibrary-core) He tenido problemas para que mis dependencias se muestren en mi archivo pom generado, pero (creo que) lo arreglé usando la respuesta en esta pregunta: Gradle no incluye dependencias en pom.xml publicado

Ahora estoy tratando de resolver por qué al importar mi biblioteca en una aplicación separada se produce este error. Este es el error que obtengo al importar la biblioteca en un proyecto como una dependencia de Gradle:

Error:Module version com.example:myLibrary:0.1.0 depends on libraries but is not a library itself

Este es mi build.gradle:

apply plugin: 'android-sdk-manager'
apply plugin: 'com.android.library'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:0.12.+'
        classpath 'com.jakewharton.sdkmanager:gradle-plugin:0.12.+'
    }
}

apply plugin: 'maven-publish'

group = 'com.example'
version = '0.1.0'

android {
    compileSdkVersion 19
    buildToolsVersion '19.1.0'

    defaultConfig {
        applicationId "com.example.android"
        minSdkVersion 11
        targetSdkVersion 19
        versionCode 1
        versionName "0.1.0"
    }
    buildTypes {
        release {
            runProguard false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
        exclude 'META-INF/NOTICE'
        exclude 'META-INF/LICENSE.txt'
        exclude 'META-INF/NOTICE.txt'
        exclude 'META-INF/DEPENDENCIES'
    }
}

dependencies {
//    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile 'com.android.support:appcompat-v7:20.0.0'
    compile 'com.example:myLibrary-core:0.1.2'
    compile 'com.android.support:support-v13:20.0.0'
    compile 'com.google.android.gms:play-services:+'
}

// build JAR file
task androidReleaseJar(type: Jar, dependsOn: assembleRelease) {
    from "$buildDir/intermediates/classes/release/"
}

publishing {
    publications {
        maven(MavenPublication) {
            artifact androidReleaseJar {
                classifier "sources"
            }

            //The publication doesn't know about our dependencies, so we have to manually add them to the pom
            pom.withXml {
                def dependenciesNode = asNode().appendNode('dependencies')

                //Iterate over the compile dependencies (we don't want the test ones), adding a <dependency> node for each
                configurations.compile.allDependencies.each {
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', it.group)
                    dependencyNode.appendNode('artifactId', it.name)
                    dependencyNode.appendNode('version', it.version)
                }
            }
        }
    }
}

}

Esto genera el archivo pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>myLibrary</artifactId>
  <version>0.1.0</version>
  <packaging>pom</packaging>
  <dependencies>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>appcompat-v7</artifactId>
      <version>20.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.example</groupId>
      <artifactId>myLibrary-core</artifactId>
      <version>0.1.2</version>
    </dependency>
    <dependency>
      <groupId>com.android.support</groupId>
      <artifactId>support-v13</artifactId>
      <version>20.0.0</version>
    </dependency>
    <dependency>
      <groupId>com.google.android.gms</groupId>
      <artifactId>play-services</artifactId>
      <version>+</version>
    </dependency>
  </dependencies>
</project>

Lo extraño es que si elimino play-services, support-v13 y appcompat-v7, el error desaparece. No puedo pensar en otra cosa que probar, así que estoy feliz de probar cualquier sugerencia hecha.


5
2017-08-30 18:27


origen


Respuestas:


El complemento de Android no puede consumir dependencias POM; solo puede tratar con bibliotecas JAR o AAR. Eso es lo que esto significa: com.example:myLibrary depende de las bibliotecas (appcompat-v7, myLibrary-core, support-v13 y play-services) pero no es una biblioteca en sí misma (el complemento Android Gradle no trata con <packaging>pom</packaging>)

Sé que es confuso porque Android-Gradle digiere el archivo .pom del módulo para resolver sus dependencias y demás, pero no puede tratar con bibliotecas que lo usan como su paquete.

Si desea crear un módulo que pueda ser consumido por el complemento Android-Gradle, deberá empaquetarse como JAR o AAR.


7
2017-09-16 21:23