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

时间:2019-11-12 02:32:17

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

在分析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要求使用它们,以便将这些版本号暴露给自动化的包装内容扫描?这些版本号文件的目的是否记录在某处?


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

Analyze APK screenshot

2 个答案:

答案 0 :(得分:2)

您已经知道,.properties文件存储键值参数可以在库内部或从外部代码中读取。举例来说,让我们来看看play-service-ads-identifier库:

play-service-ads-identifier structure

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

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

  

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

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

答案 1 :(得分:-1)

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

如果使用Firebase可以存储用户Analytics(分析)的相关信息,请点击此处enter link description here