Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 我们能否构建一个依赖关系为v3的AAR,而不存在与客户端应用程序依赖关系v2冲突的风险?_Android_Gradle_Dependencies_Aar_Shadowjar - Fatal编程技术网

Android 我们能否构建一个依赖关系为v3的AAR,而不存在与客户端应用程序依赖关系v2冲突的风险?

Android 我们能否构建一个依赖关系为v3的AAR,而不存在与客户端应用程序依赖关系v2冲突的风险?,android,gradle,dependencies,aar,shadowjar,Android,Gradle,Dependencies,Aar,Shadowjar,我们想制作一个Android存档库(AAR)并分发给我们的客户。 在这个Android库中,我们使用了一些第三方依赖项,我们希望保护它们不受任何版本冲突的影响。我们也不希望将依赖项自动更新到最新版本 例如,这个场景:我们正在使用(并且需要)依赖项的版本3和同一依赖项的客户机版本2——出于某种原因,这些版本不是 兼容,我们的客户端无法更新到版本3。 或者:客户机也在使用来自另一个提供商的AAR 这反过来又使用了版本2的依赖关系,而将其更新到版本3将破坏另一个AAR。 要求软件链的每一部分都与相同的

我们想制作一个Android存档库(AAR)并分发给我们的客户。 在这个Android库中,我们使用了一些第三方依赖项,我们希望保护它们不受任何版本冲突的影响。我们也不希望将依赖项自动更新到最新版本

例如,这个场景:我们正在使用(并且需要)依赖项的版本3和同一依赖项的客户机版本2——出于某种原因,这些版本不是 兼容,我们的客户端无法更新到版本3。 或者:客户机也在使用来自另一个提供商的AAR 这反过来又使用了版本2的依赖关系,而将其更新到版本3将破坏另一个AAR。 要求软件链的每一部分都与相同的依赖版本兼容并非总是可能的

当使用普通JAR时,通过在构建步骤中使用包含并重新定位依赖项,可以很容易地避免这种情况。 但对于AAR,我发现最好的方法是根据以下内容创建自定义gradle ShadowJar任务: 并在编译实际AAR之前执行重新定位步骤。但这使得您的应用程序源文件需要直接导入重新定位的依赖项,即:import remocated.org.com.dependency

然而,这并不是我们所认为的AAR:s常见问题场景的最佳解决方案,如上所述。 我们希望搬迁步骤发生在开发阶段之后,即建设AAR时。我还没有找到一个令人满意的方法来做这件事。
真的没有更好的解决方案吗?

这接近于模糊处理所做的,重新定位(或重新命名,但有点相同)并重新链接包,以便不破坏依赖关系。我可能会尝试为您使用的版本3库正确启用模糊处理(不包括所有其他不需要模糊处理的东西)。这样,您的开发就可以按原样使用版本3,而不必处理重新定位,并且您的客户可以通过重新定位获得AAR。我很难说出如何实现这一点,因为我只在构建APK(而不是AAR)时使用了模糊处理,但我认为这是可能的


一个额外的做法是将此构建逻辑与开发构建逻辑分离,可能类似于创建另一个gradle模块,并使用模块依赖关系获取由开发创建的构建AAR,然后执行在AAR和版本3库中重新定位包的步骤。

感谢您的输入。据我所知,您所描述的正是我们希望它的工作方式,即版本3在AAR的构建阶段被混淆。但这似乎是不可能的,启用Proguard后,只有应用程序代码被混淆,而库被保存并定义在AAR.pom文件中。但是,如果使用问题中描述的ShadowJar,则可以进行重新定位,Proguard也会正确地混淆库。关于您的好处,我不确定如何在完成的AAR中完成包的重新定位,因为ShadowJar只在JAR上工作。但我很乐意看到一个有效的例子。@Mats Hi,你能解决这个问题吗?如果是,怎么做?谢谢你的邀请question@ErcanAkk你好,对不起,不是真的。我们已经重构了需要敏感依赖项的JAR代码,如上所述使用ShadowJar重新定位它。如果你真的不需要它,我不能推荐它,因为它有点麻烦。如果你找到更好的方法,请告诉我。