¿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?

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.

  • Spannable en android para textView
  • Buscando en el diccionario de Oxford
  • No se puede instanciar actividad- ClassNotFoundException
  • Consumir servicio REST Web y analizar datos XML en Android
  • El soporte de NDK es una característica experimental y todos los casos de uso aún no son compatibles con el error en Android Studio?
  • Cómo capturar el error 'Bitmap demasiado grande para ser cargado en una textura'
  • Android: Parcelable.writeToParcel y Parcelable.Creator.createFromParcel nunca se llaman
  • No se puede crear el convertidor para java.util.List Retrofit 2.0.0-beta2
  • AsyncTask hilo sigue allí después de ejecutar, ¿es normal?
  • ¿Por qué estoy recibiendo la excepción HttpHostConnectException?
  • Picture.writeToStream () no escribiendo todos los mapas de bits
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.