【问题标题】:What's the purpose of .properties files in APK packages?APK 包中 .properties 文件的用途是什么?
【发布时间】:2019-11-12 02:32:17
【问题描述】:

在分析 APK 时,我在档案的根目录中发现了一大堆 .properties 文件,这些文件标明了 Google Play 服务、Firebase 和 Google HTTP 客户端的版本号,例如:

version=19.2.0
client=firebase-database
firebase-database_client=19.2.0

这些理论上可以从包中排除:

android {
    packagingOptions {
        exclude "firebase-*.properties"
        exclude "play-services-*.properties"
        exclude "google-http-client.version"
    }
}

但是,issue 暗示这将是“预期行为”。那么从包中排除这些看似无用的文件是否安全 - 或者 Google Play 是否需要它们,以便将这些版本号公开给自动包内容扫描?这些版本号文件的用途是否记录在某处?


这是我正在谈论的内容的屏幕截图:

【问题讨论】:

    标签: android firebase google-play-services apk packaging


    【解决方案1】:

    当时回答问题的文档部分可能不存在:


    来源:Dependency information for Play Console

    使用 AGP 4.0.0 及更高版本构建您的应用时,该插件包含描述编译到您的应用中的库依赖项的元数据。上传您的应用时,Play 管理中心会检查此元数据,以针对您的应用使用的 SDK 和依赖项的已知问题提供警报,并在某些情况下提供可操作的反馈以解决这些问题。

    数据经过压缩,由 Google Play 签名密钥加密,并存储在您发布应用的签名块中。我们建议保留此依赖文件以获得安全和积极的用户体验。但是,如果您不想共享此信息,可以通过在模块的 build.gradle 文件中包含以下 dependenciesInfo 块来选择退出。

    android {
        dependenciesInfo {
    
            // Disables dependency metadata when building APKs.
            includeInApk = false
    
            // Disables dependency metadata when building Android App Bundles.
            includeInBundle = false
        }
    }
    

    【讨论】:

      【解决方案2】:

      如您所知,.properties 文件存储的键值参数可以在库内部或从外部代码中读取。以play-service-ads-identifier库为例:

      属性文件从aar 基本目录复制到apk 根目录。这就是构建系统的工作方式。我在这个库中进行了调查,但没有找到对文件play-services-ads-identifier.properties 中包含的属性的任何引用。我认为这是您使用的所有剩余库的常见情况。我想这些文件的唯一用途是快速检测应用程序使用的库版本。

      此外,我从official documentation 找到了这个注释:

      注意:ProGuard 指令包含在 Play 服务客户端库中以保留所需的类。 Gradle 的 Android 插件会自动将 ProGuard 配置文件附加到 AAR (Android ARchive) 包中,并将该包附加到您的 ProGuard 配置中。在项目创建期间,Android Studio 会自动创建 ProGuard 配置文件和 build.gradle 属性以供 ProGuard 使用。要将 ProGuard 与 Android Studio 结合使用,您必须在 build.gradle buildTypes 中启用 ProGuard 设置。有关详细信息,请参阅 ProGuard 指南。

      如您所见,Gradle 的 Android 插件添加了打包 apk 所需的任何内容,包括 proguard 配置。如果不删除属性,我认为这是一个选择。我不知道他们是否允许系统进行更快的 apk 检查。我查找了有关它的更多文档,但没有找到有关这些属性文件的任何信息。 如果 Play Service 使用它们,则没有记录。老实说,在我的项目中,我只是留下了这些文件,它们不会显着影响 apk 大小。考虑到这些文件的大小很小,我建议您将它们留在原处

      【讨论】:

      • 解释这些文件的实际来源至少值得 +1,而我基本上需要知道它们是否对 Google Play 至关重要。想想我曾经读过他们需要一个来构建最新的库,这就是我怀疑的原因。大多数库没有这些版本号文件,只有 Google 和 Firebase 有它们 - Android 本身不需要它们,因此不清楚这是打包的混乱还是重要的东西。
      • 我寻找有关它的更多文档,但我没有找到有关这些属性文件的任何信息。可能你是对的,这些文件没用。如果它们被 Play Service 使用,则没有记录。老实说,在我的项目中,我只是保留了这些文件,它们不会显着影响 apk 大小。
      • 好吧,我知道在 Google 应该问谁,但我不能像在任何其他社交网络中那样标记人......文件里面有 AAR 文件吗?而且我并没有真正为它们的大小而烦恼,而是因为杂乱的目录索引而烦恼。当这些版本号文件只在 AAR 文件中有用途时,它们在 APK 文件中可能没有用。
      • Play 管理中心可能会使用它们来分析它使用的 APK 和库。我最近从 APK 中排除了这些属性文件,后来收到一条警告说该应用未使用最新版本。
      • 我偶然发现了官方文档......并将其添加为规范答案。
      【解决方案3】:

      .properties 文件主要用于Java 相关技术中,用于存储应用程序的可配置参数。 它们还可以用于存储字符串以进行国际化和本地化。 它以键值参数的形式存储数据。

      如果 Firebase 它存储用户分析相关信息,请在此处阅读更多信息enter link description here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-03-27
        • 2017-01-11
        • 1970-01-01
        • 2018-03-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多