Mam klasy JSBridge (wewnętrzna klasy), które jest JavaScript, interfejs:Proguard zatrzymuje Javascript w WebView z pracy
private class JsBridge implements JsCallback {
/**
* @param handlerName method required
* @param jsonData data passed through from javascript
* @param jsCallback A callback to trigger when handler specified by handlername has finished, could be null
*/
@JavascriptInterface
public void callHandler(final String handlerName, final String jsonData, final String jsCallback) {
Log.d(App.TAG, "Bridge call from JS, received " + handlerName);
}
@JavascriptInterface
public void onPageLoad(final String pageName) {
Log.d(App.TAG, "Bridge call from JS, received onPageLoad - we have the page name " + pageName);
}
Działa to dobrze, dopóki ja uwolnienie zbudować z PROGUARD. Próbowałem po kilku innych odpowiedzi SO i dodałem następujące linie do mojego pliku proguard, ale to nie pomogło. Rezultatem jest wersja debugowania, do którego dostaję wywołania zwrotne, wersja wydania, w której nie otrzymuję wywołań zwrotnych.
-keep public class * implements com.mixcloud.player.view.JsCallback
-keepclassmembers class * implements com.mixcloud.player.view.JsCallback {
<methods>;
}
-keep public class * implements com.mixcloud.player.view.JsCallback
-keepattributes *Annotation*
-keepattributes JavascriptInterface
-keep public class com.mixcloud.player.view.JSRefreshWebView
-keep public class com.mixcloud.player.view.JSRefreshWebView$JsBridge
-keep public class * implements com.mixcloud.player.view.JSRefreshWebView$JsBridge
-keepclassmembers class * implements com.mixcloud.player.view.JSRefreshWebView$JsBridge {
<methods>;
}
Ahh tak myślę, że widziałem to w dokumentacji, zamieszanie było, myślałem, że powinienem umieść pakiet w mojej rzeczywistej klasie interfejsu javascript. To działało po raz pierwszy! – serenskye
Mam dziwny przypadek, wyeksportowałem moją aplikację przy użyciu powyższych konfiguracji i działało w systemie Android 2.3.7, ale nie na nexusie 5 (Android 4.2) – StarWars