3

我一直在爲此苦苦掙扎太久。我希望任何人都可以幫助我。這裏是我的情況:WebView無法找到通過棒棒糖中的addJavascriptinterface公開的對象

在我們的Android應用,從通過Java/Android的我們的WebView我們的路線XMLHttpRequest的,所以我們可以添加的OAuth2令牌和跟蹤請求。這個工作正常,直到Android 5發佈。

啓動Android 5,下面的異常被升高每當web視圖嘗試與在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.
  • 此代碼打破ph ysical設備運行Android 5和5.1
  • 此代碼工作正常一虛擬設備上運行上虛擬設備的Android 5.0
  • 此代碼中斷運行Android 5.1
  • 有運行的調試或沒有區別生產版本

關於代碼的一些信息: * WebViewFragment從MainActivity.onCreate開始。 * WebViewFragment.onCreateView創建對象暴露於的WebView * JavaScript接口,獲取WebViewClient.onPageFinished 添加*暴露的類是公共 *被暴露類的所有方法都是公開的,有@JavascriptInterface註釋

開始棒棒糖,WebView已與Android脫鉤,因此可通過Play商店進行升級。這也是東西,從錯誤顯示:

DexPathList[[zip file "/system/app/webview/webview.apk"],nativeLibraryDirectories=[/system/app/webview/lib/x86_64, /vendor/lib64, /system/lib64]] 

我看着發行說明發現,如果我們要做的就不同的WebView和addJavaScriptInterface的東西,但我似乎無法找到任何東西。

任何人有任何想法可能是它失敗的原因是什麼?

回答

2

抱歉的是,有在WebView中的一個錯誤:http://crbug.com/491800

這個bug已經是Android 5.1已經出臺,所以原來的5.0工作正常(模擬器)。但在Play Store的物理Lollipop設備上,WebView會更新到更高版本(43),該版本仍然存在問題。 WebView版本44出現了,我認爲這個版本剛剛推出。

但是,有一種解決方法。在接受的AjaxRequest實例的注入方法,你需要更換參數類型爲Object,然後轉換爲AjaxRequest後面的功能(參見this comment爲例)。這樣,WebView將停止嘗試查找當前無法訪問的類。