プロジェクトでは、ここで説明するコードを使用します
http://lexandera.com/2009/01/extracting-html-from-a-webview/
.apkファイルを作成し、デバイスにインストールすると、正しく機能します。プロジェクトが失敗するのを防ぐために難読化を使用しようとすると、MyJavaScriptInterfaceのメソッドshowHTML(String html)に到達しません。
それに関する私のproguard構成
-keep public class com.mypackage.MyClass.MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass.MyJavaScriptInterface
-keepclassmembers class * implements com.mypackage.MyClass.MyJavaScriptInterface {
<methods>;
}
これによると、この答え Android proguard Javascriptインターフェイスの問題 。
解決済み。
Ericが提案したように、私はProguard構成ファイルを次のように変更しました。
-keep public class com.mypackage.MyClass$MyJavaScriptInterface
-keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface {
<methods>;
}
今、私のプロジェクトは完璧に機能しています。
API 17以降の場合、@ JavascriptInterfaceアノテーションも保持する必要があります。
-keepattributes JavascriptInterface
http://developer.Android.com/reference/Android/webkit/JavascriptInterface.html
MyJavaScriptInterfaceがMyClassの内部クラスである場合、ProGuardは完全修飾名com.mypackage.MyClass$MyJavaScriptInterface
を予期します。 $
の命名規則は、ProGuardが動作するコンパイル済みクラスファイルで使用されます。 ProGuardは、入力jarで見つからない構成内のクラス名に言及していることに注意してください。これは、これらの名前のつづりが間違っている可能性があることを示しています。
-keepclassmembers class com.mypackage.MyClass$JavaScriptInterface {
public *;
}
これだけを使用してください。わたしにはできる。
パッケージパス全体を提供するのが面倒な人。
-keepclassmembers class **.*$PaymentJavaScriptInterface{
public *;
}
問題の編集によって提案されたように、それらの提案のうち、
-keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { public *; }
と重要-
API 17以降で@JavascriptInterfaceアノテーションを保持する場合:
-keepattributes JavascriptInterface
(マシュマロで動作するように私のアプリを停止していました)