Biblioteca .jar de Android dentro de la biblioteca .jar – Dependencias anidadas

Recientemente hice una pregunta muy similar, pero no estaba seguro de cómo expresarlo. Después de haber recibido algunos comentarios e investigado algunas de las posibles soluciones, ahora estoy preguntando de nuevo con lo que creo que es una mejor explicación de la cuestión.

Mi aplicación de Android utiliza mi biblioteca (parentLib), esta biblioteca se construye métodos de referencia de otra biblioteca (childLib). Por lo tanto, la propia aplicación utiliza parentLib (biblioteca .jar), que a su vez utiliza childLib (otra biblioteca .jar).

El problema aquí es que cuando la aplicación intenta utilizar cualquier cosa que involucre la biblioteca anidada (childLib), recibe un NoClassDefFoundError, que bloquea la aplicación. Creo que este problema se debe a que la aplicación no puede resolver la dependencia anidada.

Realmente no puedo usar proyectos de la biblioteca de Android, ya que necesito que el código fuente sea tan ofuscado y difícil de entender como sea posible. También he intentado crear estas bibliotecas con Android Studio, sólo para tristemente no reciben mejores resultados.

Mis opciones (creo) son:

Combinar las bibliotecas

Podría combinar childLib y parentLib en una única biblioteca .jar, separándolos en paquetes diferentes. Esto sería difícil sin embargo, ya que en la práctica hay alrededor de 6 bibliotecas anidadas para mi pretendida App.

Insista en que el Cliente use varias bibliotecas

En lugar de decirle al cliente: "Aquí hay una biblioteca simple (parentLib) que puedes usar", podría decir: "Aquí hay 7 diferentes bibliotecas para importar (parentLib, childLib, etc.), de lo contrario nada funcionará". No exactamente profesional!

Otras opciones

¡Daría la bienvenida a cualquier otra sugerencia que alguien tenga!

Gracias por adelantado.

El NoClassDefFoundError significa que la clase estuvo presente durante la compilación, pero no está disponible en el classpath al intentar ejecutarlo.

Por lo tanto, necesita decir gradle para compilar esas bibliotecas y empaquetarlas dentro del apk.

Copie todos los frascos de biblioteca que necesita en la carpeta libs de la raíz de su proyecto. A continuación, edite el archivo gradle.build y añada lo siguiente:

dependencies { compile fileTree(dir: 'libs', include: '*.jar') } 

Esto hará que todas las bibliotecas necesarias se agreguen a su apk. De esta forma, las clases que necesitas estarán presentes en el classpath cuando ejecutes el código que las necesita.

  • Google Maps de Google - Error al inflar el fragmento de clase
  • Cómo convertir de java.util.HashMap a android.content.ContentValues?
  • Intensidad y daños de la vibración Android
  • HttpURLConnection conexión de cable en Android
  • Cambiar a un fragmento específico da extraño java.lang.NullPointerException
  • Reutilización de vistas en Android Listview con 2 diseños diferentes
  • Cómo llamar a un método en MainActivity de otra clase?
  • Cómo llamar a un json webservice a través de android
  • ¿Qué algoritmos hash están disponibles en Android?
  • Cómo administrar el contenido comprimido en Android
  • Error al seleccionar texto de Textview (java.lang.IndexOutOfBoundsException: setSpan (-1 ... -1) comienza antes de 0)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.