防止Proguard移除特定的drawables

Gil*_*bou 16 optimization android proguard drawable

在我的Android项目中,我有一些存储在res/drawable /中的图像,这些图像只能从Webview中加载的HTML文件中访问.例如(HTML代码):

<img src="file:///android_res/drawable/myfriend.png">
Run Code Online (Sandbox Code Playgroud)

这些图像在优化过程中由Proguard从apk中删除.

有人知道保存这些文件的方法(即使它们没有直接在java代码中使用)吗?

小智 30

我有一个类似的问题,并希望只添加几个位.

资源不会被ProGuard剥夺.如果您只是解压缩您的apk,您将看到图像文件仍然存在.

问题是Webkit FileLoader将尝试使用反射加载您的R $ drawable类.如果您没有向proguard.cfg文件添加任何保留规则,那么将重命名该类,因此Webkit将无法加载您的资源.

通过将文件放入assets文件夹,您可以绕过R类系统,一切都会正常工作.

例如,如果您想为不同的密度使用不同的资源,这不是解决方案.

我建议您只需添加一个非常基本的保留规则来保留R内部类和字段:

-keepclassmembers class **.R$* {
    public static <fields>;
}

-keep class **.R$*
Run Code Online (Sandbox Code Playgroud)


Gil*_*bou 3

我将图像移至“资产”文件夹,这解决了我的问题:

<img src="file:///android_asset/myfriend.png">
Run Code Online (Sandbox Code Playgroud)