代码之家  ›  专栏  ›  技术社区  ›  user9517865

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

  •  2
  • user9517865  · 技术社区  · 7 年前

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

    生成应用程序的“版本”并使用 构建(>);分析APK。。。 在Android Studio中,我可以看到大量的。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”文件中,这确实减少了的大小。但是,我上面描述的未使用的元素仍然包括在内。

    1 回复  |  直到 6 年前
        1
  •  2
  •   CommonsWare    7 年前

    我从来没有使用过,也没有包括其中的任何一个

    如果你有 dependencies ,这些类和资源来自它们。

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

    消除依赖关系。

    例如,创建项目时,可能会显示一个“向后兼容性(AppCompat)”复选框,已预先选中。保持选中状态将添加对 appcompat-v7 并设置项目以使用它(例如,您的活动扩展 AppCompatActivity 而不是 Activity )。使用有利弊 appcompat-v7 ;缺点之一是它会给您的项目增加相当多的开销。