WebViewのJavascriptInterfaceを使用してWebView内HTMLのjavascriptからアプリのメソッドをキックする処理を入れていたら、
APKファイルを作成してインストールした途端にそれが動かなくなる事態に。
デバッグしてみるとこんなメッセージが。
[INFO:CONSOLE(37)] "Uncaught TypeError: Object [object Object] has no method 'kickFromJavaScript'", source: http://hogehoge.jp/ (37)
定義元はJavascriptInterface
@JavascriptInterface
public void kickFromJavaScript() { ... }
原因は、APKファイルを作成する際にProGuardをかけていたから。
ProGuardをかける場合はJavascriptInterfaceのアノテーションを明示的に宣言(?)しておく必要があるらしい。
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
-keepattributes JavascriptInterface