防止Proguard移除特定的drawables

时间:2011-06-08 14:17:21

标签: android optimization proguard drawable

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

<img src="file:///android_res/drawable/myfriend.png">

这些图片在优化过程中由Proguard从apk中删除。

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

3 个答案:

答案 0 :(得分:27)

我遇到了类似的问题,并希望只添加一些内容。

资源不会被ProGuard剥夺。 如果您只是解压缩apk,您将看到图像文件仍在那里。

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

通过将文件放入资产文件夹,您绕过R类系统,一切都会正常工作。

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

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

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

-keep class **.R$*

答案 1 :(得分:2)

我将图片移动到'assets'文件夹,解决了我的问题:

<img src="file:///android_asset/myfriend.png">

答案 2 :(得分:0)

用于本地化的简单html(无链接的本地化本地文件/图像)

将此Proguard规则用于原始文件夹:

-keep class com.example.appname.R$raw { *; }

WebView的示例网址:

  

file:///android_res/raw/filename.html

示例文件夹结构:

  

res / raw / filename.html

     

res / raw-en / filename.html

     

res / raw-hu / filename.html