我的 APK 的 META-INF 中的 androidx.XXXX.version 文件是什么?

Ale*_*ohn 5 android androidx

当使用 AndroidX 库构建 APK 时,我会得到很多小文本文件,例如META-INF/androidx.core_core.version. 这些文件的目的是什么?androidx如何使用它们?

Ale*_*pov 4

我最近也很好奇,所以浏览了一下源代码。

版本信息注入的第一次尝试就在这里;它是通过在 AndroidManifest.xml 中添加元数据标签来实现的。

然后是一对 ( 1 , 2 ) 提交,其中添加了一个任务(到 Gradle 插件中,在许多/所有? androidx 库之间共享),其唯一目的是生成 *.version 文件。这种方法取代了早期的元数据标签注入,原因是(来自提交消息):

以前,支持库通过向每个库添加元数据标签来跟踪其使用情况,但这会导致某些库出现问题,因为包管理器中与服务和元数据相关的成本很高。

要解决此问题,请将版本信息存储在 jar META-INF/group_name.version 内的 java 资源中。

然而,这并没有回答问题 - 因为这些提交都没有提到将版本信息存储在 androidx 库中的原因。
我还尝试在 androidx 代码库中搜索 *.version 用法,但不幸的是找不到任何有趣的东西。

最终,*.version 生成任务的作者很友善地阐明了他们的目的:

它们的主要目的是让我们能够跟踪 Play 商店中的应用程序正在使用哪些版本的 androidx 库,或者当有人提交失败的重现 APK 时。我们最近还开始在工作室端使用组合检查工具来检测给定库版本应该提供哪些功能。

  • 谢谢,这很有道理。由于 proguard,他们无法在 Play 商店中使用代码检查。 (3认同)