C’est au tour du troisième billet dans la série sur Au coeur du système Android.

Introduction

De très nombreuses personnes se demandent comment il est possible d’enregistrer une application installée sur un système Android dans un fichier au format APK.

Solution

Je vous propose un simple bout de code qui enregistre toutes les applications installées.

//Récupère la liste des applications installées
PackageManager appInfo = getPackageManager();
List<PackageInfo> list = appInfo.getInstalledPackages(PackageManager.GET_PROVIDERS);
for (PackageInfo pack : list) {
    if (pack.applicationInfo.publicSourceDir!=null) {
    	try {
 		//Construit le nom du fichier APK
 		String apkFileName = pack.applicationInfo.publicSourceDir.substring(pack.applicationInfo.publicSourceDir.lastIndexOf("/")+1);
 		InputStream in = new FileInputStream(new File (pack.applicationInfo.publicSourceDir));
 		//Enregistre le fichier APK sur la carte mémoire
 		OutputStream out = new FileOutputStream(new File(Environment.getExternalStorageDirectory()+"/"+apkFileName));
 		int count = 0;
 		byte[] buf = new byte[512];
 		while ( (count = in.read(buf,0,512))!=-1) {
 			out.write(buf, 0, count);
 		}
 		out.close();
 		in.close();
 	} catch (FileNotFoundException e) {
 		e.printStackTrace();
 	} catch (IOException e) {
 		e.printStackTrace();
 	}
    }
}

Notez que seules les applications publiques peuvent être enregistrées sur la carte mémoire. En effet, Google propose moyennant finance de protéger une application publiée sur l’Android Market en la rendant privée. Ainsi, il n’est pas possible de l’enregistrer dans un fichier APK.

Conclusion

Ce genre de manipulation avec le système Android n’est pas très documentée. Beaucoup de développeurs se demandent comment le faire puisque certaines applications proposent de sauvegarder les applications installées au format APK sur la carte mémoire. Et bien maintenant vous saurez le faire ! 😉