Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


Proguard mess Javascript Funciones de interfaz al orientar SDK en Android Manifiesto por encima de 17

Tengo un Webview personalizado en mi proyecto android como se muestra a continuación:

public class MyWebView extends WebView { public MyWebView(Context context) { super(context); } public class JsObject { @JavascriptInterface public void show() { //... } @JavascriptInterface public void hide() { //.... } } 

Que incluye un JavascriptInterface que utilizo para comunicar desde el lado de JavaScript al lado de Android.

En el AndroidManifest tuve la siguiente

 <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="16" /> 

En el proyecto usé proguard que declaró:

 -keepattributes JavascriptInterface -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; } 

Y todo estaba funcionando bien.

Sin embargo, cuando he cambiado mi AndroidManifest a android:targetSdkVersion=18 o 19 y prueba en dispositivos con 18 y más, proguard parece que de alguna manera los métodos de JavaScript que no son accesibles ya.

Si vuelvo a 16 o cualquier cosa menos de 17 todo funciona bien. Además, esto sólo ocurre con proguard. Si no utilizo proguard todo funciona bien incluso con android:targetSdkVersion=18 o 19. ¿Puede alguien ayudar a hacer que funcione cuando la orientación en el manifiesto Android> 17?

3 Solutions collect form web for “Proguard mess Javascript Funciones de interfaz al orientar SDK en Android Manifiesto por encima de 17”

Copio mi respuesta de este tema para usted: https://stackoverflow.com/a/19994873/1735499

Y, si está usando Proguard, recuerde agregar esto

 -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; } -keepattributes JavascriptInterface -keep public class com.mypackage.MyClass$MyJavaScriptInterface -keep public class * implements com.mypackage.MyClass$MyJavaScriptInterface -keepclassmembers class com.mypackage.MyClass$MyJavaScriptInterface { <methods>; } 

Si todavía no está bien, agregue esto

 -keepattributes *Annotation* 

Nota: su MyJavaScriptInterface debe ser clase pública

Ref #: Error de la interfaz de Android Proguard Javascript

Br,

Franco

Estas 4 líneas suelen ser suficientes – y no hay necesidad de hacer la interfaz pública.

 -keepattributes JavascriptInterface -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; } 

En mi caso, sólo:

 -keepclassmembers class com.mypackage.MyJavaScriptInterface { public *; } -keepattributes *Annotation* 

fue suficiente !

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.