我的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中提取子模块时)构建正常。但远程发布版本(子模块从神器中拉出)失败。
远程发布的味道是:
release {
debuggable false
minifyEnabled true
useProguard true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
multiDexKeepProguard file('multidex.pro')
}
错误是某些库文件无法引用。
无法找到超类或界面匕首 .internal.Factory警告: _ProvideFakeTrackerFactory:无法找到超类或 interface dagger.internal.Factory警告: _ProvidePropMapPresenterFactory:无法找到超类 或界面dagger.internal.Factory警告:: 不能 找到引用的类dagger.P rovides警告:不能&#t; t 找到引用的类dagger .Module警告: .FirebaseTracker:无法找到引用的类 com.google.firebase.analytics.FirebaseAnalytics警告: .FirebaseTracker $ subscribeToScreenEvents $ 1:无法找到 引用的类com.google.firebase.analytics.FirebaseAnalytics 警告:。:无法找到引用的类 com.airbnb.lottie.LottieAnimationView 警告: .DetailFragment_MembersInjector:无法找到引用 class dagger.MembersInjector警告: .map.DaggerPropMapComponent $ Builder:无法找到 引用类dagger.internal.Preconditions警告: .MapFragment:无法找到引用的类 com.google.android.gms.location.LocationServices警告: .MapFragment:无法找到引用的类 com.google.android.gms.location.FusedLocationProviderApi
由于这些库文件已经存在于子模块的gradle依赖项中,如何在不在应用程序的gradle中重新声明这些库的情况下成功构建?
感谢。
答案 0 :(得分:2)
您正在谈论传递依赖关系。对于许多工程师来说,这是一个常见的错误。
请记住,子子模块中声明的任何存储库指针也必须在父应用程序中声明。存储库URL不包含在父模块中。因此,如果您有一个从子模块访问的自定义maven存储库,则需要在父应用程序中复制该URL。
此外,如果子模块具有依赖关系,则这些属性称为传递依赖关系,或者"我的依赖关系的依赖关系"。这些不包含在已编译的最终APK或AAR文件中。它们默认排除在外。这是正常的默认行为。
您当然可以创建FAT-JAR或FAT-AAR文件以包含传递依赖项,但这通常是不好的做法,我不推荐它。
如果要生成正确的Maven文件,只需添加以下行:
myDependencyNamespaceinGradle { transitive = true }
此标志告诉它包含此依赖项的依赖项。 重要* 这仅适用于您在子级和主机maven repo中具有正确的maven结构化文件以了解要包含哪些子级依赖项。
现在,如果您在本地工作时需要编译,但是您知道它将由父级提供,您可以将其指定为
提供了我的依赖性 代替 编译我的依赖。
这告诉它在调试时编译,但不要用它打包它,因为依赖项将作为父提供的依赖项的一部分在最终输出中。
另一个重要因素是确保正确设置proguard文件,以便不删除注释和基于反射的代码。 Dagger需要在这些文件中保险,以便在缩小时间内删除。请通过在发布时禁用缩小和proguard来确认这一点。如果它工作正常,那么你的问题与proguard文件有关,如果它仍有问题,那么很可能是你的传递依赖管理。
希望有所帮助,如果您需要更加清晰,请告诉我。
答案 1 :(得分:0)
尝试使用此gradle
artifactory
plugin
,
我希望它可以帮助你。
refer the link
Gradle Artifactory插件允许您部署构建工件并为Artifactory构建信息,还可以从Artifactory解析构建依赖项。
构建脚本代码段以在所有Gradle版本中使用
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "org.jfrog.buildinfo:build-info-extractor-gradle:latest.release"
}
}
apply plugin: "com.jfrog.artifactory"
构建脚本代码段,以便在Gradle 2.1及更高版本中使用
plugins {
id "com.jfrog.artifactory" version "latest.release"
}
如需进一步的帮助,请参阅链接。