首页 > 解决方案 > 收缩资源不适用于库模块

问题描述

我的应用程序中有一些库模块,并且有很多资源未使用。但他们没有在发布版本中删除。

minifyEnabled已在 release buildType 中设置为true,并且shrinkResources在模块中已设置为true 。app

注意:Proguard 工作正常并删除了所有未使用的源代码。(包括库模块源代码)。

PS:我知道我们不能在库模块中使用shrinkResourcesapp选项,这种收缩是模块的责任。

UPDATE1:我读了这个线程的答案。虽然我没用过getIdentifier(),但是没有效果。

UPDATE2:根据下面的引用,我检查R了输出 apk 中的类,我找到id了未使用资源的引用()。他们为什么在那里?

Proguard 在 Java 端工作。不幸的是,它在资源方面不起作用。因此,如果未使用 res/drawable 中的图像 my_image,Proguard 只会剥离它在 R 类中的引用,但会保留关联的图像。 资源

标签: androidproguardminifyandroid-moduleshrinkresources

解决方案


我检查了shrinkResources选项,它以某种方式工作。 shrinkResources没有删除未使用的资源,而是清除文件内容。对于未使用的 xml,我在输出 apk 中看到了一个像这样的空 xml:

<?xml version="1.0" encoding="utf-8"?>
<x />

我不知道清除内容而不是删除文件的原因。
这种方法不是最优的,但可以接受。像上面这样的空 xml 占用 47 个字节。


推荐阅读