Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

138
Vistas
Cambios en la biblioteca de manejo de reflejos de Java

Bien, tengo una aplicación de Android y comencé a crear un sistema adicional para la aplicación para que los desarrolladores puedan codificar proveedores de contenido que luego la aplicación puede usar para generar contenido diferente. No seguiré todo el procedimiento, pero todo funciona bien así:

1) Creé una biblioteca llamada com.myaddonlib que importé en mi proyecto, en esta biblioteca hay una interfaz y diferentes objetos.

2) Ahora, un desarrollador puede crear un proyecto Java simple en su extremo, importar la biblioteca com.myaddonlib e implementar la interfaz en su clase principal que tiene métodos que devuelven diferentes objetos de la biblioteca.

3) De vuelta en la aplicación de Android, puedo cargar el archivo .jar creado por el desarrollador (después de que se agregue el archivo classes.dex al archivo jar) y con DexClassLoader de Android puedo cargar la interfaz implementada de la siguiente manera:

 DexClassLoader classloader = new DexClassLoader(jarFilePath, tempDirectory, null, context.getClass().getClassLoader()); Class classToLoad = classloader.loadClass("com.apackage.Addon");

donde Addon es la clase creada por el desarrollador del complemento que implementa la interfaz de la biblioteca que reside en un paquete llamado com.apackage . Luego puedo enviar la interfaz de la biblioteca com.myaddonlib a una nueva instancia de classToLoad y llamar a las funciones que implementó el desarrollador del complemento.

Ahora, aquí está el problema, digamos que decidí actualizar la biblioteca de complementos y eliminar una de las variables de una clase, lo que significa que la clase del complemento ahora es diferente de la clase en la biblioteca actualizada (usada en la aplicación). Incluso cuando la variable modificada no se usa, algo hace que la aplicación se bloquee sin ningún error. Solo el hecho de que ambas clases sean diferentes (incluso cuando la única diferencia es solo una variable faltante) hace que algo no funcione correctamente. Ahora bien, este no es un procedimiento fácil de explicar, por lo que entendería que dado mi mal inglés, algunos tienen problemas para seguirlo. Mi problema es que necesito saber cómo evitar este bloqueo debido al cambio de la biblioteca en uno de los dos extremos. Y también cómo Java trata los cambios de objetos en una situación como esta

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Mi solución no resuelve el problema, sino que se asegura de que nunca suceda. El problema que está describiendo se parece al clásico problema servidor-cliente. Tienes un servidor (en tu caso, la aplicación que estás desarrollando) y clientes (los complementos escritos por los desarrolladores). Puede definir una interfaz con muchas funciones y pasar datos en estructuras binarias. Esto sería más eficiente desde una perspectiva de tráfico/análisis; sin embargo, cada vez que cambie la API en el servidor, tendrá que actualizar todos los clientes (o de lo contrario, podrían producirse bloqueos u otros problemas).

Entonces, para resolver este problema en el servidor-cliente, muchos eligen usar llamadas HTTP con objetos JSON que describen los datos. Aunque esta forma es menos eficiente, permite agregar API y admitir muchas versiones de clientes al mismo tiempo.

Usar este enfoque en Android es bastante simple. Defina una API con dos funciones y una única interfaz:

 public String sendDataToLibrary(String jsonString) { // Parse data, perform operation and return a JSON string as the result } public interface GetDataFromLibrary { String onDataFromLibrary(String jsonString); } public void init startLibrary(GetDataFromLibrary callback) { // Set callback in library and call it whenever you have data that needs to be sent out from the library asynchronously }

Como puede ver, si implementa esta interfaz, puede pasar cualquier dato entre la biblioteca y los complementos y nunca cambiará, por lo que no se producirán fallas. Una mejora puede ser forzar el paso del número de versión para permitir que la biblioteca admita la creación de versiones múltiples).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda