Я слишком долго боролся с этим. Надеюсь, кто-нибудь может мне помочь. Вот моя ситуация:WebView не может найти объекты, открытые через addJavascriptinterface в Lollipop
В нашем Android-приложении мы отправляем XMLHttpRequests из нашего WebView через Java/Android, чтобы мы могли добавить токен OAuth2 и отслеживать запросы. Это отлично работало, пока Android 5 не был выпущен.
Запуск Android 5, следующее исключение поднимается всякий раз, когда WebView пытается взаимодействовать с выставленной объекта в JavaScript:
java.lang.ClassNotFoundException: Didn't find class "com/company/android/AndroidXMLHttpRequest$AjaxRequest" on path: DexPathList[[zip file "/system/app/webview/webview.apk"],nativeLibraryDirectories=[/system/app/webview/lib/x86_64, /vendor/lib64, /system/lib64]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
at com.android.org.chromium.base.SystemMessageHandler.nativeDoRunLoopOnce(Native Method)
at com.android.org.chromium.base.SystemMessageHandler.handleMessage(SystemMessageHandler.java:53)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.os.HandlerThread.run(HandlerThread.java:61)
Suppressed: java.lang.ClassNotFoundException: Invalid name: com/company/android/AndroidXMLHttpRequest$AjaxRequest
at java.lang.Class.classForName(Native Method)
at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
... 6 more
Результаты на различных конфигурациях:
- Этот код работает отлично на Физические и виртуальные устройства под управлением Android < 5.
- Этот код разбит на ysical устройства работает Android 5 и 5.1
- Этот код прекрасно работает на виртуального устройства работает Android 5.0
- Этот код перерывы на виртуальных устройств работает Android 5,1
- Там нет никакой разницы между запуска отладки или производство строить
Некоторая информация о коде: * WebViewFragment получает инициирована в MainActivity.onCreate
. * WebViewFragment.onCreateView
создает объект, который будет подвергаться воздействию WebView * интерфейс JavaScript будет добавлен в WebViewClient.onPageFinished
* Класс, который подвергается воздействию является общественной * Все методы класса, которые подвергаются воздействию являются общедоступными и имеют @JavascriptInterface
аннотацию
Начиная Lollipop , WebView был отделен от Android, поэтому его можно обновить через Play Store. Это также то, что показывает от ошибки:
DexPathList[[zip file "/system/app/webview/webview.apk"],nativeLibraryDirectories=[/system/app/webview/lib/x86_64, /vendor/lib64, /system/lib64]]
Я смотрел на примечания к выпуску, чтобы обнаружить, если мы должны сделать что-то другое в отношении WebView и addJavaScriptInterface, но я не могу найти что-нибудь.
У кого-нибудь есть идеи, что может быть причиной того, что это не удается?