La interfaz de JavaScript no funciona con Android 4.2
Estoy frente a un grave error de Android Jelly Bean 4.2, aquí en mi programa estoy usando JavaScript para obtener la altura de la página web y está perfectamente trabajando desde Android 2.2 a 4.1, pero cuando traté de usar el mismo código en android 4.2 por lo que La interfaz JavaScript no funciona.
¿Cómo puedo solucionar este problema?
- Android webview.loadUrl no cargará otra página web
- ¿Cómo detectar el número de versión de Android en Firefox para Android?
- Cómo buscar una fecha de un datepicker en NativeScript
- IPhone WebApp en la pantalla de inicio Persistencia
- ¿Existe un límite de longitud de la clave (cadena) en el objeto JS?
- Reanudar la vista web de Android cuando se detiene por OS / ejecutar JavaScript en la aplicación en segundo plano?
- Detener evento táctil de ser interceptado por ViewPager si hay evento táctil en la vista web
- ¿Cómo hace la interfaz ReadableMap en React-native convertir JS a JAVA?
- Algunos dispositivos Android extremadamente lentos al representar elementos de lienzo
- Cómo enviar notificación push en dos segmentos en momentos diferentes en un día en analizar
- API de Google Map para aplicaciones Ionic
- Android Webview HTML Cargando Javascript Problema
- Cómo obtener el tipo mime en Cordova getPicture
De la documentación de Android 4.2:
Precaución: Si ha establecido su targetSdkVersion a 17 o superior, debe agregar la anotación @JavascriptInterface a cualquier método que desee que disponga de su código de página web (el método también debe ser público). Si no proporciona la anotación, el método no será accesible por su página web cuando se ejecute en Android 4.2 o superior.
Fuente: Android WebView Doc
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
De acuerdo con el doc: Android doc Desde Android 4.2 tienes que anotar tu método con @JavascriptInterface (y tu método tiene que ser público).
Configuración de Proguard que funciona para mí con la API de destino 17+:
-keep @interface android.webkit.JavascriptInterface -keepclassmembers class * { @android.webkit.JavascriptInterface <methods>; }
- Enumere todas las actividades dentro de un APK desde el shell
- Listando los permisos de la aplicación de Android vía adb