收缩资源不适用于库模块

Posted

技术标签:

【中文标题】收缩资源不适用于库模块【英文标题】:shrink resources does not work for libraries modules 【发布时间】:2020-04-14 12:02:32 【问题描述】:

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

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

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

P.S:我知道我们不能在库模块中使用 shrinkResources 选项,这种收缩是 app 模块的责任。

UPDATE1:我读到了this thread's answers。虽然我没用getIdentifier(),但是没有效果。

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

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

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

这到底是怎么回事? :/ 我们大部分未使用的资源是.png 文件,根据您的回答,其中一些已转换为 1x1 像素黑色 png。但是我可以在apk中找到很多未更改的png文件。

以上是关于收缩资源不适用于库模块的主要内容,如果未能解决你的问题,请参考以下文章

如何让所有项目二维收缩到最大的项目内容?

怎样在SQL Server 2000中收缩数据库

收缩数据库日志

sql2000收缩数据库会对数据影响吗

如何收缩 SQL Server 中的 Tempdb 数据库

sql server 收缩数据库 需要多长时间