How to configure proguard for javascript interface?
android, obfuscation, proguard
Solution
Both your configurations could have worked if they hadn't contained typos:
ProGuard requires fully qualified names:
`NonObfuscateable` -> `com.project.NonObfuscateable`
Compiled classes use '$' as a separator for inner classes:
`com.project.Activity_Webview.JavaScriptInterface` -> `com.project.Activity_Webview$JavaScriptInterface`
In the console log, ProGuard prints out notes about such suspected typos.
A more general solution for keeping annotated Javascript interface methods:
-keepclassmembers class * {
@android.webkit.JavascriptInterface <methods>;
}
Problem
I have a implemented a Webview which takes use of JavascriptInterface. It's working fine when not obfuscating, but at once Proguard is active, it does not work. I've looked here at other answers, but i still can't get it working. Some of the WebView class: ``` public class Activity_Webview { private WebView webView; public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); webView = (WebView) findViewById(R.id.webview); webView.getSettings().setJavaScriptEnabled(true); webView.addJavascriptInterface(new JavaScriptInterface (), "HTMLOUT"); webView.setWebViewClient(mWebViewClient); } public class JavaScriptInterface implements NonObfuscateable{ @JavascriptInterface public void processHTML(String html) { handleFinishFromWebView(html); } } ``` What i've tried in Proguard: ``` -keep public class * implements com.project.NonObfuscateable -keepclassmembers class * implements NonObfuscateable { public void processHTML(java.lang.String); } ``` I've also tried this (when not implementing NonObfuscateable interface: ``` -keep public class com.project.Activity_Webview.JavaScriptInterface -keep public class * implements com.project.Activity_Webview.JavaScriptInterface -keepclassmembers class * implements com.project.Activity_Webview.JavaScriptInterface { <fields>; <methods>; } ``` Does anybody have an idea of what could be wrong? Thanks in advance