生成的 .apk 包括未使用的资源和未使用的 类

Generated .apk includes unused resources and unused classes

我正在为 Android 开发一个非常简单的应用程序,实际上它所做的只是在屏幕上显示当前时间和日期。考虑到这一点,我原以为该应用程序的大小只有几千字节,但事实并非如此。

生成应用程序的 "release" 并在 Android Studio 中使用 Build > Analyze APK... 对其进行分析后,我可以看到大量的 .png 和 .xml 资源文件被放入 .apk 文件中,我从未使用或包含其中任何一个(我的项目只包含 4 个资源文件)。这让我很困扰,因为这些自动包含的资源文件只占用 space.

这些是自动包含的文件夹(蓝色),其中包含我正在谈论的文件:

如您所见,这大约是应用程序大小的 26%。

类似的情况发生在 "classes.dex" 文件中,该文件包含数百(可能数千)个我从未在我的代码中引用的 类。例如,在查看文件包含的内容后,我发现其中包含 "HashMap",将其包含在内是没有意义的,因为我从未在我的代码中导入它。

最后,我的问题是:是否有可能以某种方式避免这些未使用的资源文件和 类 被包含在 .apk 版本中?

注意:我已经在使用

buildTypes {
    release {
        minifyEnabled true
        shrinkResources true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
    }
}

在我的 "build.gradle" 文件中,它确实减少了 .apk 的大小,但是我上面描述的未使用的元素仍然包括在内。

I never used nor included any of them

如果你有 dependencies,那些 类 和资源来自他们。

Is it possible to somehow avoid these unused resource files and classes from being included in the release of the .apk?

消除你的依赖。

例如,当您创建项目时,您可能会看到一个 "Backwards Compatibility (AppCompat)" 复选框,pre-checked。保持选中状态会添加对 appcompat-v7 的依赖并设置您的项目以使用它(例如,您的 activity 扩展 AppCompatActivity 而不是 Activity)。使用 appcompat-v7 有利也有弊;缺点之一是它会给您的项目增加一些开销。