Предотвратить Proguard, чтобы удалить определенные drawables
В моем проекте Android у меня есть несколько изображений, сохраненных в res/drawable/, доступ к которым возможен только из файла HTML, загруженного в Webview. Например (код в HTML):
<img src="file:///android_res/drawable/myfriend.png">
Эти изображения удаляются Proguard из apk во время оптимизации.
Кто-нибудь знает способ сохранить эти файлы (даже если они не используются непосредственно в коде Java)?
2 ответа
Я переместил изображения в папку "assets", что решило мою проблему:
<img src="file:///android_asset/myfriend.png">
У меня была похожая проблема, и я хотел добавить всего несколько битов.
Ресурсы НЕ убираются ProGuard. Если вы просто разархивируете свой apk, вы увидите, что файлы изображений все еще там.
Проблема в том, что WebLit FileLoader попытается загрузить ваш класс R$drawable с помощью отражения. Если вы не добавите какое-либо правило хранения в файл proguard.cfg, этот класс будет переименован, следовательно, Webkit не сможет загрузить ваш ресурс.
Поместив файл в папку активов, вы обходите систему класса R, и все будет работать.
Это не решение, хотя, например, если вы хотите использовать разные ресурсы для разных плотностей.
Я предлагаю вам просто добавить очень простое правило хранения для сохранения R внутренних классов и полей:
-keepclassmembers class **.R$* {
public static <fields>;
}
-keep class **.R$*
Для локализованных простых HTML-файлов (без связанных локализованных локальных файлов / изображений)
Используйте это правило Proguard для необработанной папки:
-keep class com.example.appname.R$raw { *; }
Пример URL для WebView:
файл:///android_res/raw/filename.html
Пример структуры папок:
res / raw / filename.html
res / raw-en / filename.html
res / raw-hu / filename.html