Предложено в https://stackoverflow.com/a/19579355/6103242
-keep class **.R$*
- не самое элегантное решение, поскольку оно дает ProGuard команду сохранить все классы R независимо от того, в каком пакете они находятся.
Имея ту же проблему с WebView, я вижу ошибку в Logcat:
... E / AndroidProtocolHandler: Невозможно открыть URL ресурса: файл: ///android_res/raw/$MISSING_RESOURCE_NAME.css
java.lang.ClassNotFoundException: не нашел класс
«my.app.package.R $ raw» по пути: DexPathList [[...
Инструкция с максимальными ограничениями, которую я добавил в свой файл proguard-rules.pro
:
-keepnames class my.app.package.R$raw { public static <fields>; }
Очевидно, что класс R
содержит только поля, и все эти поля имеют тип public static
, на практике не должно быть разницы между приведенным выше и
-keepnames class my.app.package.R$raw { *; }
Тем не менее, вот я
- НЕ отключать сжатие и запутывание для всех остальных внутренних классов в
R
, кроме raw
.
таргетинг R
только в одном конкретном пакете.
Такой подход должен быть лучше в случае, если в вашем проекте более одного модуля, который предоставляет собственные ресурсы, которые могут не понадобиться для одного конкретного APK, который вы строите (имея, скажем, более одного модуля android_application - Исходники APK - и в вашем проекте).
Чтобы понять разницу между -keepnames
и -keep
, пожалуйста, обратитесь к
«Различие между различными директивами ProGuard« -keep »*
Вт 29 мая 04:10:50 мск 2018
https://jebware.com/blog/?p=418