Zip sous Android

 

API standard ZIP

L'API standard ZIP de Java est utilisable. Voici un exemple très basique (pour une question de lisibilité) permettant de créer un fichier zip sur la sdcard.

Image non trouvée !L'API standard ne permet pas de gérer les mots de passe d'un fichier ZIP.

Ne pas oublier de mettre dans le fichier AndroidManifest.xml l'autorisation d'accéder en écriture à la carte SD:

<uses-permission androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):name="android.permission.WRITE_EXTERNAL_STORAGE" />

Il ne devrait pas être difficile de faire l'opération d'extraction des fichiers d'un zip.

Image non trouvée !L'opération pouvant être longue. Et donc contrairement à ce code donnée à titre d'exemple volontairement très simpliste (afin de ne pas surcharger le code), il est impératif de faire ce traitement dans un thread autre que le thread UI ! Sinon il y a de grande chance d'avoir un ANR !!!

Il sera possible aussi d'utiliser une dialogue d'attente ou d'indiquer la progression du traitement.

 

Zip4J

Pour résoudre le problème des ZIP avec mot de passe, il existe une librairie zip4j en javaLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) qui est capable d'extraire les fichiers zippés avec mot de passe. Il s'agit de la librairie Zip4J. Vous trouverez des explications ici pour le monde JAVALangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.), donc à adapter pour androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...).

Vous allez me dire, oui mais c'est du JavaLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) donc pour une JVMLangage JAVA est un langage de programmation orienté objet qui s'exécute sur une JVM (Java Virtual Machine ou machine virtuelle JAVA.) ! Vrai, mais certains JAR n'utilisant pas d'interface, pas trop gourmandes en place, ... peuvent être utilisés sous AndroidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...). Les performances ne seront pas exceptionnelles, mais cela marche.

Téléchargez le JAR, puis à l'aide d'un explorateur, glissez celui-ci dans par exemple le répertoire libs de votre projet AndroidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...) de votre application directement dans le package explorer d'eclipse. Celui-ci va vous demander s'il faut faire un lien ou copier la librairie. Copiez là.

Voici un exemple de très simple - et donc là aussi très mauvais - code permettant d'extraire le contenu d'un zip avec mot de passe.

Ne pas oublier de mettre dans le fichier AndroidManifest.xml l'autorisation d'accéder en écriture à la carte SD:

<uses-permission androidSystème d'exploitation basé sur le noyau Linux conçu initialement pour les smartphones et tablettes et qui peut être trouvé sur d'autres appareils (Android TV, Android Auto, ...):name="android.permission.WRITE_EXTERNAL_STORAGE" />

Ce qui n'est pas propre dans le code, toujours un gros risque d'ANR si le zip est important. De plus, je n'utilise pas la méthode retournant le nom de la ressource de la sdcard, et pas de contrôle de disponibilité de celle-ci ! Voir le chapitre sur la sdcard pour plus d'informations.

Là aussi, il sera possible d'utiliser une dialogue d'attente ou d'indiquer la progression du traitement.

Image non trouvée !Il est possible qu'eclipse vous embête avec la librairie en ne la reconnaissant tout simplement pas. Essayez alors de reconstruire le projet (Menu Project/clean) ou encore en ajoutant la librairie dans le buildpath (Project/properties onglet librairie), voire en réorganisant les librairies si risque de conflit (onglet Order and Export) puis reconstruire (Menu Project/clean).