收缩资源不适用于库模块
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文件。以上是关于收缩资源不适用于库模块的主要内容,如果未能解决你的问题,请参考以下文章