Androidのアプリ開発関連のブログ

@JavascriptInterface

11月から?
対象APIレベルが26(Android 8.0?)以上のAPKしか公開できなくなるとかで、公開中アプリを
android:targetSdkVersion="26"
を追加してリビルドした。

ビルド環境無くなってたんで再構築してやったのだが、
1個問題の生じるアプリがあってハマった。

WebViewでJavaScriptからJavaメソッドを実行する必要のあるアプリなのだが、うまく行って無い観じで、ログには
I chromium: [INFO:CONSOLE(45)] "Uncaught TypeError: JsObject.ChangeEdit is not a function"
が出てた。
Javaメソッドが定義できてない。

import android.webkit.JavascriptInterface;
して、
JavaScriptから呼び出すJavaメソッドの前に
@JavascriptInterface
アノテーションをつけたら解決した。

JavaScriptからJavaメソッドを実行する方法ググってると、ほとんどの情報がpublic classのpublicメソッドを実行しているが、
今回のアプリはMainActivityの中にある内部クラスだったので、それが問題かとも思って分離も試したが関係なかった。
それで時間食った・・・

Android 4.2以上のAPIレベルをターゲットにした場合は
@JavascriptInterface
をつけたpublicメソッドしか呼び出せない模様。
Javaエラーでもないしエラー無しでビルドできちゃうから困る。