¿Es posible hacer swizzling de método en Android usando Java? Me gustaría interceptar un método de sistema y registrar sus parámetros y luego procesarlo normalmenteMétodo Swizzling en Android usando Java
Respuesta
Creo que esa técnica no se podía usar usando Java en ningún entorno.
Tal vez podría lograr un resultado similar usando AOP.
Pero lo que puedes hacer con eso parece limitado en Android. Ver Aspect-oriented programming in android. De hecho, dado que no compilará el código objetivo (método del sistema), el entretejido en tiempo de compilación (que parece ser todo lo que podría usar en Android) será inútil en este caso. Como es esta respuesta, supongo.
Otro pensamiento ... Supongo que quieres hacer esta registración de manera consistente. Pero si necesita esto para solucionar un problema, puede hacerlo usando un conditional breakpoint in Eclipse.
Una expresión condicional puede contener código Java arbitrario y puede contener más de una sentencia, lo que permite condiciones de punto de interrupción a implementar características como el rastreo. Por ejemplo, una condición puede ejecutar una instrucción de impresión y luego devolver un valor codificado para nunca suspender ("System.out.println (...); return false;").
No sé específicamente si esto funciona con los métodos del SDK de Android. Pero funciona con métodos en Java SDK. Por ejemplo, aquí es simple código:
System.err.println("foo");
Hice un punto de interrupción condicional en PrintStream.print, así:
System.err.println("hello: " + arg0);
return false;
Y la salida de la consola al depurar en el programa es la siguiente:
hello: foo
foo
Tenga en cuenta que dado que el JDK no está compilado con símbolos de depuración, no puedo referirme a los parámetros del método por nombre, pero usando el arg0..argn
.
- 1. My isa-swizzling breaks KVO
- 2. Android/Java: ¿Llamar a un método usando la reflexión?
- 3. Android: Crear archivo usando el método createNewFile()
- 4. Método de Java para android: layout_gravity
- 5. Usando el método smoothScrollBy en la clase ScrollView de Android
- 6. Cómo invocar un método en Java usando la reflexión
- 7. Patrón de método de fábrica en Java usando genéricos, ¿cómo?
- 8. Método de archivo mkdirs() que no funciona en android/java
- 9. ¿Cómo depurar correctamente Java (Android) usando Eclipse?
- 10. Método ArrayList.toArray() en Java
- 11. método clone() en Java
- 12. Método repaint() en Java
- 13. ¿Cómo puedo bloquear archivos en Android usando código java?
- 14. Usando Android Library en un proyecto normal de Java
- 15. Usando el método abs() en java. Mi compilador no conoce el método
- 16. Android RadioButton no posible remover usando el método setChecked (falso)
- 17. Proyecto Android usando httpclient -> http.client (apache), método post/get
- 18. Java. Método
- 19. Android Creando aplicaciones en Android usando Android
- 20. JAVA llamando a un método usando un operador ternario
- 21. ¿Cómo invoco un método estático privado usando reflection (Java)?
- 22. Método más eficiente de dibujar miles de partículas (Java/Android)
- 23. ¿Usando color y color.darker en Android?
- 24. Android ArrayAdapter.Add método no funciona
- 25. Bitmap recycle() en java Android
- 26. método Arcano esPrimo en Java
- 27. Java: método JIT en línea
- 28. Método remoto ilegal en java
- 29. Usando DU en Android
- 30. C++ vs Java en Android
¿Esto también se aplica a los métodos api del android sdk? –