在我的Android项目中,我有一些存储在res / drawable /中的图像,这些图像只能从Webview中加载的HTML文件中 访问。例如(HTML代码):
<img src="file:///android_res/drawable/myfriend.png">
这些图片在优化过程中由Proguard从apk中删除。
有人知道保留这些文件的方法(即使它们没有直接在java代码中使用)吗?
答案 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