当我使用 *.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"
这篇关于在 Gradle 4.x 中使用 aar 库导致缺少使用 api 的依赖项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持html5模板网!
更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 IncompIncompatibleClassChangeError after updating to Android Build Tools 25.1.6 GCM / FCM(更新到 Android Build Tools 25.1.6 GCM/FCM 后出现 Incompatible
如何在 gradle 中获取当前风味How to get current flavor in gradle(如何在 gradle 中获取当前风味)
如何修复“意外元素<查询>在“清单How to fix quot;unexpected element lt;queriesgt; found in lt;manifestgt;quot; error?(如何修复“意外元素lt;查询gt;在“清单中找到错误
基于 Android Gradle 中多风味库的多风味应用Multi flavor app based on multi flavor library in Android Gradle(基于 Android Gradle 中多风味库的多风味应用)
Android 依赖在编译和运行时有不同的版本Android dependency has different version for the compile and runtime(Android 依赖在编译和运行时有不同的版本)
本地 aar 库的传递依赖Transitive dependencies for local aar library(本地 aar 库的传递依赖)