【发布时间】:2021-11-24 05:00:16
【问题描述】:
我有一个带有库模块的 SampleApp:
:app
:library
该库正在使用以下依赖项和以下代码:
implementation "com.google.android.gms:play-services-safetynet:17.0.1"
----
import android.content.Context
import com.google.android.gms.safetynet.SafetyNet
class ClassUsingSafetynet {
fun trigger(context: Context) {
SafetyNet.getClient(context)
}
}
SampleApp 在某处调用trigger:
val triggerClass = ClassUsingSafetynet()
triggerClass.trigger(context)
只要 SampleApp 直接声明它对库模块的依赖关系,就可以正常工作:
implementation project(path: ':library')
但是如果我将库 aar 部署到我的本地 maven 并相应地声明依赖项,如下所示:
implementation ('com.myapplication:library:1.0.3@aar') { transitive = true }
我收到以下崩溃
java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/safetynet/SafetyNet;
at com.library.ClassUsingSafetynet.trigger(ClassUsingSafetynet.kt:10)
at com.myapplication.MainActivity.onCreate$lambda-0(MainActivity.kt:38)
这里是发布 gradle 任务:
afterEvaluate {
publishing {
publications {
release(MavenPublication) {
groupId 'com.myapplication'
artifactId 'library'
version '1.0.3'
artifact 'build/outputs/aar/library-release.aar'
pom.withXml {
def dependenciesNode = asNode().appendNode('dependencies')
configurations.api.allDependencies.each {
def dependencyNode = dependenciesNode.appendNode('dependency')
dependencyNode.appendNode('groupId', it.group)
dependencyNode.appendNode('artifactId', it.name)
dependencyNode.appendNode('version', it.version)
}
}
}
}
repositories {
mavenLocal()
}
}
}
我尝试使用 api 而不是 implementation 作为 SafetyNet 依赖项。没有区别。
我尝试设置/不设置{transitive = true}。没有区别。
我尝试设置/不设置@aar。没有区别。
我试图不创建 pom 文件。没有区别。
暂时没有应用ProGuard。
对我来说特别奇怪的是“SafetyNet”是库的私有依赖项。我的应用甚至不需要知道它。
【问题讨论】:
标签: android maven gradle dependency-management