Le blog by wookipster

Tips de teks velus.

vendredi 30 août 2013, 00:00

Rendre une app android compatible avec plusieurs versions d'android (2.3 et 4.x)

Bonjour,

Nous avons très récemment publié velibobo sur Android et nous avons eu des retours d'utilisateurs qui ne pouvaient pas utiliser l'application car leur android n'était pas compatible. En effet j'avais choisi de développer en 4.1 et + pour une raison pratique : notre téléphone de test est un galaxy s3 !

Voila comment je m'y suis pris pour faire plaisir à tous nos utilisateurs :

Pour la compatibilité 4.x, seules les notifications étaient incompatibles. Pour résoudre cela j'ai utilisé la librairie android compat. Pour l'ajouter il suffit de faire un click droit sur le projet dans eclipse puis Android Tools et enfin Add Support Library.

Enfin il suffit de changer Notification.Builder par NotificationCompat.Builder :

    NotificationCompat.Builder builder = new NotificationCompat.Builder(
            this)
            .setSmallIcon(R.drawable.ic_notification)
            .setWhen(System.currentTimeMillis()).setAutoCancel(true)
            .setContentTitle("Velibobo")
            .setContentText("Avez vous fait bonne route ?");

    Intent notificationIntent = new Intent(this, DiagActivity.class);
    notificationIntent.putExtra("velib", velibBundle);
    PendingIntent contentIntent = PendingIntent.getActivity(this, 0,
            notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
    builder.setContentIntent(contentIntent);

    // Add as notification
    NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    manager.notify(1, builder.build());

Et hop l'application est compatible Android 4.x ! :)


Pour la compatibilité Android 2.3 c'est un peu plus compliqué :

J'ai décidé d'utiliser ActionBarSherlock pour remplacer l'ActionBar. L'utilisation de sherlock est très facile et très bien expliquée ici.

Ne pas oublier de modifier les thèmes par leur équivalant Sherlock dans toutes les versions (v11 et v14)

Les petits problèmes que j'ai eu sont :

  • bundle.getString(TAG, null); à replacer par bundle.getString(TAG);
  • ShareActionProvider qui ne fonctionne pas en 2.3. Je l'ai donc désactivé pour cette version.

Et surtout le thème inverse qui n'est pas disponible sur android 2.3. J'ai réglé cela en créant des images spécifiques pour chaque thème et en ajoutant un répertoire drawable-xhdpi-v14 pour les images du thème blanc.

Voila c'est presque fini ! il suffit de changer le manifest pour gérer toutes ces versions :

<uses-sdk
    android:minSdkVersion="9"
    android:targetSdkVersion="17" />  

Et vous obtenez une application compatible Android 2.3 -> 4.x avec un design quasi identique sur toutes les versions.

velibobo sur nexus one

Vous pouvez tester la version finale de velibobo

Si vous avez des questions n'hésitez pas à m'écrire à hello [at] velibobo.fr

Antoine,

Velibobo

tweetez   ★   likez