我有一个项目,其中包含许多可绘制对象,它们的名称以“a”或“b”开头(例如a1_back,a2_back,b1_start,b2_start等等)。这些可绘制对象不在代码中使用,但在以下代码中使用:
String name = image.getName();//getName() returns for examle "a1_back"
res = getResources().getIdentifier(name, "drawable", getPackageName());
所以,在代码中没有使用特定的字符串“a1_back”。这就是为什么当我设置“shrinkResources true”时,所有以“a”和“b”开头的可绘制对象都被删除了。
我已经读到你可以指定什么资源保持使用以下xml文件:
<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@layout/l_used_c"
tools:discard="@layout/unused2" />
但是我有很多可绘制对象,不想单独指定每一个。有没有一种方法可以在“tools:keep”中设置一个模式(以保留所有以“a”或“b”开头的可绘制对象),或者让它保留项目中的所有可绘制对象,但删除其他未使用的资源?
提前感谢!:)
3条答案
按热度按时间bnl4lu3b1#
有一个解决方法可以使用。为所有要保留的可绘制对象添加前缀
这里的诀窍是
资源收缩机制分析所有前缀为“_”的可绘制项都可以使用,并且不涉及这些文件。
rekjcdws2#
动态访问资源时,请使用Android User Guide中使用此示例说明的技巧
2guxujil3#
其他答案也可以,但如果您想加倍确保资源得到保留,您可以使用XML中的显式指令来指导构建工具。
Google在这里描述了如何使用keep.xml文件进行模式匹配:https://developer.android.com/studio/build/shrink-code#keep-resources
这是Google使用的例子,注意
*
的使用:您还可以查看构建文件
build/outputs/mapping/debug/resources.txt
,了解哪些资源被保留,哪些资源没有被保留,以及为什么要保留。