在Gradle 4.x中使用api使用aar库导致缺少依赖项

han*_*ach 4 android module android-gradle-plugin aar

当我使用*.aar文件而不是使用Gradle 4.x的模块构建应用程序并遵循有关implementsapi文档时,我希望使用api包含的aar文件包含所有依赖项,但它没有.

当你这样做

git clone https://github.com/hannesa2/aar_dependency
./gradlew clean assembleDebug
Run Code Online (Sandbox Code Playgroud)

手段

dependencies {
    api project(':mylibrary')
Run Code Online (Sandbox Code Playgroud)

它工作正常.

但是当我使用lib-module的insted时,先前生成的*.aar文件作为依赖

 dependencies {
    api 'com.example.my.mylibrary:mylibrary-debug@aar'
Run Code Online (Sandbox Code Playgroud)

(在演示应用程序中)

git checkout with_aar
./gradlew clean assembleDebug
Run Code Online (Sandbox Code Playgroud)

我碰到了这个

任务:app:transformClassesWithDesugarForDebug线程"main"中的异常java.lang.TypeNotPresentException:在sun.invoke.util.BytecodeDescriptor的sun.invoke.util.BytecodeDescriptor.parseSig(BytecodeDescriptor.java:85)中输入不存在的io.reactivex.ObservableTransformer .parseMethod(BytecodeDescriptor.java:63)位于com.google.devtools的java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1067)的sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:41).在org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)的org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)的build.android.desugar.LambdaDesugaring $ InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:399)

因为我将这些aar工件上传到我们的Maven Nexus公司时遇到了这个问题,所以我创建了这个demo-repo以准确显示出错了什么.在演示应用程序或使用Maven我看到同样的问题.

有人知道我做错了吗?

han*_*ach 10

我能够解决它.主要问题是使用api的 Gradle 4.x的Android O.

dependencies {
    api 'com.squareup.okhttp3:logging-interceptor:3.4.1'
    api "io.reactivex.rxjava2:rxandroid:$versions.libs.rxAndroid"
Run Code Online (Sandbox Code Playgroud)

大多数答案都是关于这样的

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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

但是在结果*.pom中没有包含依赖项,在将此行更改为api后,依赖项包含在已部署的pom中!

configurations.api.allDependencies.each { dependency ->
Run Code Online (Sandbox Code Playgroud)

在此之后,您可以轻松使用aar文件

dependencies {
    api "com.mylib.net:mylib:1.0"
Run Code Online (Sandbox Code Playgroud)