¿Puedo incluir de alguna manera y utilizar varias versiones de una biblioteca .jar determinada?

Aprecio que esto pueda sonar absurdo, pero es posible dejar caer dos versiones diferentes de una biblioteca .jar en un proyecto de Android (donde ambas versiones obviamente tienen nombres de paquetes y clases idénticos o superpuestos), y de alguna manera explícitamente apuntan a uno de ellos cuando Importar las clases de la biblioteca en mis propias fuentes Java?

Mi entorno de desarrollo es Android Studio con Gradle.

Mi razón para considerar hacer esto (si es posible) es porque confío en una biblioteca de controladores .jar suministrada por el proveedor de código cerrado para un dispositivo USB con el que funciona mi aplicación Android. El proveedor ha añadido soporte para versiones de chips más recientes en su último controlador, pero al mismo tiempo han perdido soporte para versiones de chips más antiguas. Esta es una decisión que han tomado por su propia razón y es poco probable que se invierta. Una idea que tengo es de alguna manera llevar a la vez versiones nuevas y viejas de la biblioteca en mi aplicación para que pueda seguir apoyando el hardware más antiguo.

Supongo que algo como esto sería teóricamente posible, pero un asunto complicado, tal vez requerir un .jar para ser descompilados y los nombres de paquetes cambiado?

One Solution collect form web for “¿Puedo incluir de alguna manera y utilizar varias versiones de una biblioteca .jar determinada?”

Para mi asombro, he tenido muy pronto éxito en este uso de la utilidad jarjar como lo sugiere CommonsWare.

La clave para entender cómo hacer esto fue este QA:

Edición manual de un frasco para cambiar nombres de paquetes

Renombre uno de mis .jar s usando las direcciones dadas arriba y ahora los tengo ambos sentados lado a lado en mi proyecto.

No quiero duplicar el contenido de SO, pero para completar, hice lo siguiente:

Obtuvo la última versión de jarjar .

Se ha creado un archivo de configuración llamado rules.txt contiene una sola línea:

 rule uk.co.dog.** uk.co.cat.@1 

Eso es sólo un ejemplo. Dado un .jar con el paquete uk.co.dog.* , El dog cambiará a cat . Obviamente cambie esto para que se adapte a su caso real.

A continuación, utilice la línea de comandos:

 java -jar jarjar.jar process rules.txt in.jar out.jar 

Donde in.jar es la fuente .jar y out.jar es la transformada.

  • Cómo convertir una hora de GMT a EST
  • Android M permiso de la prueba READ_PHONE_STATE (permisos peligrosos)
  • Java Array lista sincronización si está escrito en un hilo y leído en otro
  • ¿Cómo puedo depurar eficazmente el código C que está envuelto con JNI en Eclipse? (Android Dev)
  • ¿Cuál es el número de línea promedio por método / clase?
  • Desvío de paquetes VPN
  • ¿Cuál es el nombre de mi paquete de aplicación en android?
  • Modificar clase en jar: android build failed
  • La aplicación se bloquea cuando se reanuda
  • Qt para Android - el equivalente de startActivityForResult no funciona
  • Android Studio: ¿dónde está la lista de funciones?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.