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

时间:2018-03-19 17:15:33

标签: java android android-studio apk

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

生成"发布"应用程序,并使用 Build>进行分析在Android Studio中分析APK ... ,我可以看到大量的.png和.xml资源文件被放入.apk文件中,我从未使用也没有包含任何这些(我的项目只包含4个资源文件)。这让我感到困扰,因为这些自动包含的资源文件只会占用空间。

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

screenshot

正如您所看到的,这大约占应用程序大小的26%。

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

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

注意:我已经在使用

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

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

1 个答案:

答案 0 :(得分:1)

  

我从未使用过或包括其中任何一个

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

  

是否有可能以某种方式避免将这些未使用的资源文件和类包含在.apk的发行版中?

消除您的依赖关系。

例如,当您创建项目时,您可能已经看到了"向后兼容性(AppCompat)"复选框,预先检查。保留选中此选项会增加appcompat-v7的依赖关系并设置项目以使用它(例如,您的活动扩展为AppCompatActivity而不是Activity)。使用appcompat-v7有利有弊;其中一个缺点是它会给你的项目增加一些开销。