android - 收缩资源不适用于库模块
问题描述
我的应用程序中有一些库模块,并且有很多资源未使用。但他们没有在发布版本中删除。
minifyEnabled已在 release buildType 中设置为true,并且shrinkResources在模块中已设置为true 。app
注意:Proguard 工作正常并删除了所有未使用的源代码。(包括库模块源代码)。
PS:我知道我们不能在库模块中使用shrinkResourcesapp
选项,这种收缩是模块的责任。
UPDATE1:我读了这个线程的答案。虽然我没用过getIdentifier()
,但是没有效果。
UPDATE2:根据下面的引用,我检查R
了输出 apk 中的类,我找到id
了未使用资源的引用()。他们为什么在那里?
Proguard 在 Java 端工作。不幸的是,它在资源方面不起作用。因此,如果未使用 res/drawable 中的图像 my_image,Proguard 只会剥离它在 R 类中的引用,但会保留关联的图像。 资源
解决方案
我检查了shrinkResources
选项,它以某种方式工作。
shrinkResources
没有删除未使用的资源,而是清除文件内容。对于未使用的 xml,我在输出 apk 中看到了一个像这样的空 xml:
<?xml version="1.0" encoding="utf-8"?>
<x />
我不知道清除内容而不是删除文件的原因。
这种方法不是最优的,但可以接受。像上面这样的空 xml 占用 47 个字节。
推荐阅读
- css - 当 flex 容器是滚动框时,为什么我不能使用“align-items:stretch”调整 flex 项的高度?
- sql - 替代多个 SQL 自连接来转换表
- javascript - × 错误:React.Children.only 期望接收单个 React 元素子元素
- javascript - 如何使用 gulp 更改 href 链接
- c# - 如何在sqlite表中将数字字符串读取为字符串
- json - 来自文件的 SwiftlyJSON 数据
- asp.net-mvc - ASP.NET MVC 中有生命周期挂钩吗?
- python - pd.read_html 导入长字符串而不是表格
- postgresql - Hangfire Postgres - 服务器死机时重新排队工作
- javascript - 如何在 React-Native 中查看导入文件的变化?