Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 防止Proguard移除特定的牵引物_Android_Optimization_Proguard_Drawable - Fatal编程技术网

Android 防止Proguard移除特定的牵引物

Android 防止Proguard移除特定的牵引物,android,optimization,proguard,drawable,Android,Optimization,Proguard,Drawable,在我的Android项目中,我有一些存储在res/drawable/中的图像,它们只能从Web视图中加载的HTML文件中访问。例如(HTML中的代码): 这些图像在优化过程中由Proguard从apk中删除。 有人知道保存这些文件的方法吗(即使它们没有直接在java代码中使用)?我将图像移动到“资产”文件夹中,解决了我的问题: <img src="file:///android_asset/myfriend.png"> 我遇到了类似的问题,只想添加一些位 ProGuard不会剥

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


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


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

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

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

我遇到了类似的问题,只想添加一些位

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

问题是Webkit文件加载器将尝试使用反射加载R$drawable类。如果不向proguard.cfg文件添加任何保留规则,则该类将被重命名,因此Webkit将无法加载资源

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

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

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

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

-keep class **.R$*
-keepclassmembers类**.R$*{
公共静态;
}
-继续上课**$*

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

对原始文件夹使用此Proguard规则:

-keep class com.example.appname.R$raw { *; }
WebView的Url示例:

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

文件夹结构示例:

res/raw/filename.html

res/raw en/filename.html

res/raw hu/filename.html


您应该将这些类型的文件放入资产文件夹,并像mWebView.loadUrl(“file:///android_asset/myfriend.png");你说得对。我将图像移动到“资产”文件夹,解决了我的问题。上面的一行变成:生成签名apk时在proguard cfg中给出异常
-keep class com.example.appname.R$raw { *; }