Предотвратить 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

Другие вопросы по тегам