APK 包中的 .properties 文件的用途是什么?

What's the purpose of .properties files in APK packages?

在分析 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 表明它会是 "intended behavior"。那么从包中排除这些看似无用的文件是否安全 - 或者 Google Play 是否需要它们,以便将这些版本号暴露给自动包内容扫描?这些版本号文件的用途是否记录在某处?


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

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

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

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

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

此外,我从 official documentation 中找到了这篇笔记:

Note: ProGuard directives are included in the Play services client libraries to preserve the required classes. The Android Plugin for Gradle automatically appends ProGuard configuration files in an AAR (Android ARchive) package and appends that package to your ProGuard configuration. During project creation, Android Studio automatically creates the ProGuard configuration files and build.gradle properties for ProGuard use. To use ProGuard with Android Studio, you must enable the ProGuard setting in your build.gradle buildTypes. For more information, see the ProGuard guide.

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

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


来源:Dependency information for Play Console

When building your app using AGP 4.0.0 and higher, the plugin includes metadata that describes the library dependencies that are compiled into your app. When uploading your app, the Play Console inspects this metadata to provide alerts for known issues with SDKs and dependencies your app uses, and, in some cases, provide actionable feedback to resolve those issues.

The data is compressed, encrypted by a Google Play signing key, and stored in the signing block of your release app. We recommend keeping this dependencies file for a safe and positive user experience. However, if you’d rather not share this information, you can opt out by including the following dependenciesInfo block in your module’s build.gradle file.

android {
    dependenciesInfo {

        // Disables dependency metadata when building APKs.
        includeInApk = false

        // Disables dependency metadata when building Android App Bundles.
        includeInBundle = false
    }
}