我已经构建了一个纯java库,并编译了两个版本,一个是阴影(使用gradle shadow plugin),一个没有,并将它们部署到我的本地nexus存储库。
在我的Android库项目中,我创建了两个productFlavor,标准和阴影,引用我的nexus存储库中的相应工件。在Android Studio中,只有带有非阴影jar的标准产品风格才会显示外部库中的库。
切换到任何阴影构建变体会导致Android Studio中的依赖项完全丢失,并且引用其中任何一个的所有代码似乎都在AS中被破坏。 (切换构建变体时,必须同步gradle以更改依赖项)。
添加到阴影编译配置的其他依赖项(例如firebase)显示并正常工作。所以这只是一个依赖。在gradle控制台或事件日志中没有打印任何异常。
但是,从命令行学习是一个完全不同的故事。运行./gradlew库:依赖项适当地显示库及其依赖项,我可以从命令行编译和构建所有变体的AAR而不会出现问题。 当android库是我的大项目的子项目时,它工作,但是因为我把它分解成Android Studio中的一个单独项目,看起来它根本不再起作用了。 / p>
build.gradle看起来像这样(排除正常的东西):
android {
publishNonDefault true
productFlavors {
standard {}
shadowed {}
}
}
dependencies {
standardCompile 'groupId:core:1.0.0-SNAPSHOT'
shadowedCompile 'groupId:core-shadowed:1.0.0-SNAPSHOT'
}
FWIW,这是在使用:
Android Studio 2.3.3 Build #AI-162.4069837, built on June 6, 2017
JRE: 1.8.0_92-b14 x86_64
JVM: Java HotSpot(TM) 64-Bit Server VM by Oracle Corporation
Gradle Plugin: 2.3.3
Gradle: 3.5
Build Tools: 25.0.3
我真正能够确定两者之间的唯一不同之处(除了重新定位的包和pom中的不同依赖关系)是阴影jar的META-INF文件夹的内容 - 我想知道是否这可能会令AS感到困惑?特别是shadow插件在MANIFEST.MF中添加了一个Class-Path条目,列出了从fat jar中排除的运行时依赖jar文件,以及包含每个.pom的条目的META-INF / maven /文件夹。那些。