Cómo añadir una dependencia (Maven or JCenter) en un plugin de Cordova en Android

Si estás desarrollando la parte de Android de un plugin para cordova que necesita una librería escrita en Java (como por ejemplo una librería que no ofrece una versión en Javascript o que no es tan amigable como necesitas), tendrás que agregarla como dependencia para poder usarlo en tu clase Main de Java en tu plugin.

En vez de descargar el código fuente de la API (o librería como tal), empaquetarlo en un archivo .jar y agregarla (lo cual funciona muchas veces) en tu plugin, puedes hacer tu plugin más dinámico y sostenible agregando la librería como una dependencia en tu archivo plugin.xml.

Agregando una dependencia

Cómo se especifica en la documentación oficial de Cordova "Cómo añadir una dependencia", la manera preferida y recomendada para hacerlo es usando el tag <framework/>.

En este caso, vamos a usar la siguiente dependencia en nuestro proyecto: AWS SDK For Java » 1.10.75. Esta dependencia puede ser agregada usando el identificador 'com.amazonaws:aws-java-sdk:1.10.75' al archivo gradle (que al usar cordova debemos hacer usando el tag de framework). Así que todo lo que necesitamos hacer, es agregar dentro de nuestro plugin.xml las siguiente línea en la plataforma Android:

<platform name="android">
     <framework src="com.amazonaws:aws-java-sdk:1.10.75" />
</platform>

Ahora la dependencia será usada cuando se compile la aplicación y podrás usarla en tu plugin en cualquier clase de Java:

import com.amazonaws.services.s3; // Ahora usaremos cosas de AmazonServices

public miClaseJava extends CordovaPlugin{

}

Ahora solo agrega el plugin a tu proyecto e intenta compilar. Si y solo si el repositorio que acabas de agregar está registrado en mavenCentral, todo debería funcionar bien.

Si no tienes tanta suerte el día de hoy y tu proyecto no compila, puede que tengas un problema de repositorio porque la librería no está alojada en el repositorio de Maven, así que por favor sigue leyendo.

Problema con repositorios de JCenter

Si tu dependencia no ha sido encontrada mientras compilas, puede ser que no tengas el repositorio correcto en tu archivos gradle. Por ejemplo, en este caso vamos a usar un plugin alojado en un repositorio de JCenter, para ello el identificador de la librería será  'com.microsoft.onedrivesdk:onedrive-picker-android:v2.0' , está agregara el selector de archivos de One Drive para android, sin embargo si simplemente la agregas a tu proyecto esta no compilará. Porqué?

repositories {
  jcenter() // Necesitamos agregar el repositorio de jcenter a nuestro archivo gradle
}

dependencies {
  compile ('com.microsoft.onedrivesdk:onedrive-picker-android:v2.0')
}

Al leer la documentación de la librería, especifican que necesitas usar el repositorio de jcenter para descargarla, esto debería resolver el problema y la aplicación debería compilar correctamente.

jcenter() es similar a mavenCentral(). Si quieres más información, visita JCenter para más detalles. El equipo de jCenter dicen ofrecer y tener mejor rendimiento que la central de Maven.

Agrega un archivo gradle personalizado para tu plugin

Como mencionamos anteriormente, necesitarás agregar el repositorio en el archivo gradle de tu proyecto, sin embargo no podemos modificar el gradle del usuario que usa el plugin. Por lo tanto, crearemos un archivo gradle personalizado en la carpeta de tu plugin (con el nombre plugin.gradle) con el contenido de gradle personalizado, en este ejemplo vamos a usar un selector de archivos nativos, este necesita acceso al repositorio de JCenter, así que nuestro archivo plugin.gradle será:

repositories {
    jcenter()
}

dependencies {
    compile 'com.nononsenseapps:filepicker:3.1.0'
}

Finalmente, registra tu archivo gradle en el archivo plugin.xml (cambia el directorio de acuerdo a la localización del archivo plugin.gradle):

<framework src="src/android/plugin.gradle" custom="true" type="gradleReference"/>

Ahora intenta compilar nuevamente y tu librería (obtenida de JCenter) debería estár disponible ahora en tu clase de Java.

Agregar repositorio manualmente

En caso de que necesites modificar manualmente tu archivo gradle (mala practica, pero que en caso de que realmente necesites agregar un repositorio que no está alojado en Maven sin crear un archivo gradle personalizado porque estás en apuros), navega en tu proyecto a la carpeta tu-proyecto/platforms/android y abre el archivo build.gradle. Aproximadamente en la linea 48-50, encontrarás la propiedad repositories:

// Allow plugins to declare Maven dependencies via build-extras.gradle.
repositories {
 mavenCentral()
}

Solo encontrarás por defecto el repo de mavenCentral(), por lo tanto necesitarás agregar jcenter() y todo funcionará como esperado:

// Allow plugins to declare Maven dependencies via build-extras.gradle.
repositories {
 mavenCentral()
 jcenter()
}

Ahora intenta compilar de nuevo y todo debería funcionar bien ahora. Que te diviertas !

Esto podría ser de tu interes

Conviertete en un programador más sociable