gpt4 book ai didi

Android Build 因 Artifact 而失败 - 缺少依赖项

转载 作者:太空狗 更新时间:2023-10-29 13:04:30 27 4
gpt4 key购买 nike

我的 Android 项目有子模块,它们在 git 和 artifactory 中。子模块的 gradle 依赖项包含这些。

kapt 'com.google.dagger:dagger-compiler:2.15'
implementation 'com.google.maps.android:android-maps-utils:0.5'
implementation 'com.airbnb.android:lottie:2.5.3'

本地版本构建风格(当从 git 中拉取子模块时)构建良好。但是远程发布构建(从 Artifact 中提取子模块的地方)失败了。

远程发布 flavor 是:

release {
debuggable false
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
multiDexKeepProguard file('multidex.pro')
}

错误是部分库文件无法引用。

can't find superclass or interface dagger.internal.Factory Warning: _ProvideFakeTrackerFactory: can't find superclass or interface dagger.internal.Factory Warning: _ProvidePropMapPresenterFactory: can't find superclass or interface dagger.internal.Factory Warning: : can't find referenced class dagger.Provides Warning: : can't find referenced class dagger.Module Warning: .FirebaseTracker: can't find referenced class com.google.firebase.analytics.FirebaseAnalytics Warning: .FirebaseTracker$subscribeToScreenEvents$1: can't find referenced class com.google.firebase.analytics.FirebaseAnalytics Warning: .: can't find referenced class com.airbnb.lottie.LottieAnimationView Warning: .DetailFragment_MembersInjector: can't find referenced class dagger.MembersInjector Warning: .map.DaggerPropMapComponent$Builder: can't find referenced class dagger.internal.Preconditions Warning: .MapFragment: can't find referenced class com.google.android.gms.location.LocationServices Warning: .MapFragment: can't find referenced class com.google.android.gms.location.FusedLocationProviderApi

由于这些库文件已经在子模块的 gradle 依赖项中,我如何在不在应用程序的 gradle 中重新声明这些库的情况下成功构建?

谢谢。

最佳答案

你在谈论传递依赖。这是很多工程师在编译时常犯的错误。

请记住,在子模块中声明的任何存储库指针也必须在父应用程序中声明。存储库 URL 不包含在父模块中。因此,如果您有一个从子模块访问的自定义 Maven 存储库,则需要在父应用程序中复制该 URL。

此外,如果子模块具有依赖项,则这些依赖项称为传递依赖项,或“我的依赖项的依赖项”。这些不会包含在编译的最终 APK 或 AAR 文件中。默认情况下将它们排除在外。这是正常的默认行为。

您当然可以创建一个 FAT-JAR 或 FAT-AAR 文件来包含传递依赖项,但这通常是不好的做法,我不推荐这样做。

如果您要生成正确的 Maven 文件,您只需在以下行中添加:

myDependencyNamespaceinGradle{ 传递性=真

此标志告诉它包含此依赖项的依赖项。重要的*仅当您在子项和主机 Maven 存储库中有适当的 Maven 结构化文件以了解要包含哪些子项依赖项时,这才有效。

现在如果你在本地工作时需要它编译,但你知道它会由父级提供,你可以将它指定为

提供了mydependency代替编译我的依赖。

这告诉它在调试时进行编译,但不要将其打包,因为依赖项将作为父提供的依赖项的一部分出现在最终输出中。

另一个重要因素是确保您的混淆器文件设置正确,不会删除注释和基于反射的代码。 Dagger 需要在这些文件中做好保险,以免在缩小时被删除。请通过在发布时禁用缩小和 proguard 来确认这一点。如果它工作正常,那么你的问题与 proguard 文件有关,如果仍然有问题,那么很可能是你的传递依赖管理。

希望对您有所帮助,如果您需要进一步说明,请告诉我。

关于Android Build 因 Artifact 而失败 - 缺少依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50140558/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com