2017-10-07 5 views
2

Wenn ich eine App mit einem * .aar-Datei zu erstellen, statt des Moduls mit Gradle 4.x und im Anschluss an die docu über implementiert und api, Ich erwarte mit api die enthaltene aar-Datei hat alle Abhängigkeiten enthalten, aber es hat nicht.eine aar Bibliothek Ursache Verwenden Sie Abhängigkeiten mit api in Gradle 4.x fehlen

Wenn Sie das tun

git clone https://github.com/hannesa2/aar_dependency 
./gradlew clean assembleDebug 

bedeutet

dependencies { 
    api project(':mylibrary') 

es richtig funktioniert.

Aber wenn ich insted von lib-Modul die vorherige erzeugt * .aar Datei als Abhängigkeit

dependencies { 
    api 'com.example.my.mylibrary:[email protected]' 

verwenden (in demo app tun nur)

git checkout with_aar 
./gradlew clean assembleDebug 

Ich laufe in diesem

Aufgabe: app: transformClassesWithDesugarForDebug Ausnahme im Thread "main" java.lang.TypeNotPrenentE xception: Typ io.reactivex.ObservableTransformer nicht vorhanden bei sun.invoke.util.BytecodeDescriptor.parseSig (BytecodeDescriptor.java:85) bei sun.invoke.util.BytecodeDescriptor.parseMethod (BytecodeDescriptor.java:63) bei Sonne. invoke.util.BytecodeDescriptor.parseMethod (BytecodeDescriptor.java:41) bei java.lang.invoke.MethodType.fromMethodDescriptorString (MethodType.java:1067) bei com.google.devtools.build.android.desugar.LambdaDesugrading $ InvokedynamicRewriter. visitInvokeDynamicInsn (LambdaDesugaring.java:399) bei org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn (Unknown Source) bei org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn (Unknown Source)

Da ich normalerweise mit dem Hochladen der AAR-Artefakte in unsere Firma Maven Nexus hineingelaufen bin, habe ich diese demo-repo erstellt, um genau zu zeigen, was falsch ist. In Demo-App oder mit Maven sehe ich das gleiche Problem.

Weiß jemand, was ich falsch gemacht habe?

+2

AAR Datei verbrauchen ** doens't enthalten ** die transitiven Abhängigkeiten. Veröffentlichen Sie es in einem maven Repo –

+0

Mein aar verwendet z. RxJava, diese RxJava ist bereits in einem anderen Maven. Also ich denke, Ihre Empfehlung "Veröffentlichen Sie es in einem Maven Repo" ist erfüllt, oder liege ich falsch? Gibt es einen Weg für den aar-Verbraucher, ihn zu benutzen, ohne z. B. mit RxJava-Abhängigkeiten umzugehen? –

Antwort

5

Ich konnte es lösen. Das Hauptproblem war Android O mit Gradle 4.x api

dependencies { 
    api 'com.squareup.okhttp3:logging-interceptor:3.4.1' 
    api "io.reactivex.rxjava2:rxandroid:$versions.libs.rxAndroid" 

Die meisten Antworten sind über so etwas wie dieses

publishing { 
    publications { 
     mipartner(MavenPublication) { 
      groupId '...' 
      artifactId '..' 
      version 1.0 
      artifact "$buildDir/outputs/aar/myLib-release.aar" 

      //generate pom nodes for dependencies 
      pom.withXml { 
       def dependenciesNode = asNode().appendNode('dependencies') 
       configurations.compile.allDependencies.each { dependency -> 
        def dependencyNode = dependenciesNode.appendNode('dependency') 
        dependencyNode.appendNode('groupId', dependency.group) 
        dependencyNode.appendNode('artifactId', dependency.name) 
        dependencyNode.appendNode('version', dependency.version) 
       } 
      } 
     } 
    } 

    repositories{ 
     maven { 
      url "https://some.url.com" 
     } 
    } 
} 

verwenden, aber hier in der resultierenden * .pom gibt es keine Abhängigkeiten inklusive, nach Änderung dieser Zeile auf api sind die Abhängigkeiten in deployed pom enthalten!

configurations.api.allDependencies.each { dependency -> 

danach können Sie bequem die aar Datei

dependencies { 
    api "com.mylib.net:mylib:1.0" 
Verwandte Themen