Сбой интерфейса Javascript для Android Proguard

Я использую в своем проекте кусок кода, как описано здесь

http://lexandera.com/2009/01/extracting-html-from-a-webview/

Я создаю файл .apk, устанавливаю его на свое устройство, и он корректно работает. Если я попытаюсь использовать обфускацию с proguard, проект провалится, метод showHTML (String html) MyJavaScriptInterface не будет достигнут.

Моя конфигурация proguard относительно этого

-keep public class com.mypackage.MyClass.MyJavaScriptInterface -keep public class * implements com.mypackage.MyClass.MyJavaScriptInterface -keepclassmembers class * implements com.mypackage.MyClass.MyJavaScriptInterface { ; } 

в соответствии с этим этот ответ на проблему с интерфейсом Javascript для Android proguard .

Решаемые.

Как предложил Эрик, я изменил конфигурационный файл Proguard следующим образом:

 -keep public class com.mypackage.MyClass$MyJavaScriptInterface -keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface -keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { ; } 

Теперь мой проект работает отлично.

Для API 17+ вам также необходимо сохранить annotations @JavascriptInterface:

 -keepattributes JavascriptInterface 

http://developer.android.com/reference/android/webkit/JavascriptInterface.html

Если MyJavaScriptInterface является внутренним classом MyClass, ProGuard ожидает полное имя com.mypackage.MyClass$MyJavaScriptInterface . Соглашение об именах с $ используется в файлах скомпилированных classов, на которых работает ProGuard. Обратите внимание, что ProGuard упоминает имена classов в конфигурации, которые он не может найти во входной банке, предполагая, что эти имена могут быть написаны с ошибкой.

  -keepclassmembers class com.mypackage.MyClass$JavaScriptInterface { public *; } 

Используйте только это. Меня устраивает.

Те, кто не в состоянии обеспечить весь путь пакета.

 -keepclassmembers class **.*$PaymentJavaScriptInterface{ public *; } 

Как было предложено в результате редактирования, из этих предложений, только используя

-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { public *; }

с Важным

Для API 17+ для сохранения аннотаций @JavascriptInterface:

-keepattributes JavascriptInterface

(Что останавливало мое приложение для работы над Marshmallow)

  • Переопределить цвета контекстного меню в Android
  • В чем разница между @ + id / android: list и @ + id / list
  • Кросс-платформенный способ изменения приоритета Java-процесса
  • Ошибка Java. Фактические и формальные списки аргументов различаются по длине
  • Недопустимый символ в пути по индексу 16
  • Не удалось импортировать новый проект Gradle: не удалось найти версию Build Tools * .0.0
  • Как рассчитать разницу во времени в java?
  • Selenium - базовая аутентификация через URL-адрес
  • Как установить тайм-аут HttpResponse для Android в Java
  • Переменные среды для установки Java
  • Почему в Android не работает «System.out.println»?
  • Давайте будем гением компьютера.