¿Cómo incluir Spongy Castle JAR en Android?

Aparentemente, Spongy Castle es la alternativa de Android al uso de una versión completa de Bouncy Castle.

Sin embargo, al importar el archivo jar recibo todo tipo de errores “no se pueden resolver” porque se basa en paquetes no incluidos en Android, principalmente javax.mail, javax.activation y javax.awt.datatransfer.

Entonces, ¿cuál es la mejor manera de evitar esto? Las respuestas a esta pregunta y esto indican que esos paquetes no deberían usarse en absoluto, y esta pregunta popular ni siquiera considera encontrar la manera de recuperar AWT. Entonces, ¿cómo es que Spongy Castle depende de ellos? La gente está usando Spongy Castle , ¿verdad?

Estos son dos ejemplos muy simples de cómo incluir Spongy Castle en un proyecto:

  • github.com/rtyley/spongycastle-eclipse – Eclipse
  • github.com/rtyley/toy-android-ssh-agent – Maven

Desde v1.47, Spongy Castle se ha dividido en subta jar separados que reflejan exactamente los artefactos de Bouncy Castle (por ejemplo, sc-light-jdk15on.jar , scpg-jdk15on.jar , etc.), y es importante asegurarse de incluir todos los flasks de Spongy Castle necesarios para lo que estás haciendo.

La información completa sobre las dependencias se puede encontrar en:

http://rtyley.github.com/spongycastle/#downloads

Como mínimo, necesitarás el sc-light-jdk15on.jar (la implementación base API ligera) y probablemente scprov-jdk15on.jar (el contenedor JCE alrededor de la API ligera). Si está usando Maven, entonces todo esto de gestión de la dependencia se ocupará de usted.

Las dependencias problemáticas que describe en javax.mail , javax.activation , etc., indican que puede haber elegido un jar incorrecto (por ejemplo, el componente de biblioteca única, en lugar del de “proveedor central”) – como el scprov-jdk15on jar definitivamente no tiene ninguna de esas dependencias raras, y funciona felizmente en Android.

(Descargo de responsabilidad, soy el mantenedor de Spongy Castle, ¡pero también he tenido muchos informes de éxito de otros usuarios!)

Si está utilizando gradle, entonces puede simplemente especificar sus dependencias en el archivo build.gradle esta manera:

 dependencies { .... compile 'com.madgag.spongycastle:core:1.54.0.0' compile 'com.madgag.spongycastle:prov:1.54.0.0' compile 'com.madgag.spongycastle:pkix:1.54.0.0' compile 'com.madgag.spongycastle:pg:1.54.0.0' } 

Puede encontrar la última versión de la biblioteca aquí .

No olvide insertarlo como proveedor de seguridad en su aplicación.

  static { Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1); }