问题描述
当我使用 *.aar 文件而不是使用 Gradle 4.x 的模块并遵循 docu 关于 implements 和 api,我希望使用 api 包含的 aar 文件包括所有依赖项,但没有.
When I build an app with a *.aar file instead of the module with Gradle 4.x and following the docu concerning implements and api, I expect using api the included aar file has all dependencies included, but it hasn't.
当你这样做时
git clone https://github.com/hannesa2/aar_dependency ./gradlew clean assembleDebug
表示
dependencies { api project(':mylibrary')
它工作正常.
但是当我使用 lib-module 的 insted 之前生成的 *.aar 文件作为依赖项时
But when I use insted of lib-module the previous generated *.aar file as dependency
dependencies { api 'com.example.my.mylibrary:mylibrary-debug@aar'
(在 demo app 中即可)
git checkout with_aar ./gradlew clean assembleDebug
我遇到了这个
任务 :app:transformClassesWithDesugarForDebug线程main"中的异常 java.lang.TypeNotPresentException:类型 io.reactivex.ObservableTransformer 不存在在 sun.invoke.util.BytecodeDescriptor.parseSig(BytecodeDescriptor.java:85)在 sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:63)在 sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:41)在 java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1067)在 com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:399)在 org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)在 org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(未知来源)
Task :app:transformClassesWithDesugarForDebug Exception in thread "main" java.lang.TypeNotPresentException: Type io.reactivex.ObservableTransformer not present at sun.invoke.util.BytecodeDescriptor.parseSig(BytecodeDescriptor.java:85) at sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:63) at sun.invoke.util.BytecodeDescriptor.parseMethod(BytecodeDescriptor.java:41) at java.lang.invoke.MethodType.fromMethodDescriptorString(MethodType.java:1067) at com.google.devtools.build.android.desugar.LambdaDesugaring$InvokedynamicRewriter.visitInvokeDynamicInsn(LambdaDesugaring.java:399) at org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(Unknown Source) at org.objectweb.asm.MethodVisitor.visitInvokeDynamicInsn(Unknown Source)
因为我通常在将 aar 工件上传到我们公司 Maven Nexus 时遇到这个问题,所以我创建了这个 demo-repo 以准确显示问题所在.在演示应用程序或使用 Maven 中,我看到了同样的问题.
Because I ordinary run into this with uploading the aar artifacts into our company Maven Nexus, I created this demo-repo to show exactly what's wrong. In demo app or using Maven I see the same issue.
有人知道我做错了吗?
推荐答案
我能够解决它.主要问题是使用 api
I was able to solve it. The main issue was Android O with Gradle 4.x using api
dependencies { api 'com.squareup.okhttp3:logging-interceptor:3.4.1' api "io.reactivex.rxjava2:rxandroid:$versions.libs.rxAndroid"
大多数答案都与这样的事情有关
Most answers are concerning something like this
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" } } }
但是在生成的 *.pom 中没有包含依赖项,在将此行更改为 api 后,依赖项包含在部署的 pom 中!
but here in the resulting *.pom there are no dependencies included, after change this line to api the dependencies are included in deployed pom !
configurations.api.allDependencies.each { dependency ->
在此之后您可以轻松使用 aar 文件
after this you can easily consume the aar file
dependencies { api "com.mylib.net:mylib:1.0"