Plusieurs versions d’une application simultanément sur un terminal Android

Comme promis dans mon dernier article, voici un billet qui n’a strictement rien à voir avec hibernate-validator !

On nous a fait récemment une demande qui peut paraître un peu déroutante pour les habitués d’Android. Je m’explique. On a déjà un build Maven qui nous permet très simplement de builder et déployer l’application pour les différents environnements cible : intégration, recette, pré-production et production. Sauf que bien sûr, quand on déploie, la version précédemment installée est remplacée, ce qui nous limite à une seule version de l’application installée sur une tablette à un instant T. Ce qu’on nous a demandé, c’est de pouvoir avoir jusqu’à quatre applications, chacune ciblant un environnement différent, déployées en même temps sur la même tablette.



C’est en fait parfaitement possible, mais il faut ruser un peu. L’unicité d’une application sur un terminal Android – et sur le market soit dit en passant – est assurée par son nom de package. Donc si on veut déployer les quatres applications en même temps, elles doivent avoir chacune un nom de package différent. Si on veut un nom qui varie en fonction du profil Maven, on pense éventuellement à ça :

1
2
3
<manifest
...
package="${application.package}" >

Mais là, ADT est perdu et Eclipse se met à voir tout rouge.

“Mais dis-moi Jamy, comment faire si on ne peut pas faire varier ce nom ?”

Eh bien Fred, on va pouvoir trouver la réponse par ici ! On va s’arranger pour que le nom de package soit modifié juste avant la compilation, automatiquement avec Maven. C’est le moment de mettre un peu les mains dans le cambouis !

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<plugin>
    <groupId>com.google.code.maven-replacer-plugin</groupId>
    <artifactId>maven-replacer-plugin</artifactId>
    <version>${maven-replacer-plugin.version}</version>
    <executions>
        <execution>
            <phase>process-resources</phase>
            <goals>
                <goal>replace</goal>
            </goals>
        </execution>
    </executions>
    <configuration>
        <file>target/filtered-manifest/AndroidManifest.xml</file>
        <replacements>
            <replacement>
                <token>package=".*?"</token>
                <value>package="${application.package}"</value>
            </replacement>
            <replacement>
                <token>android:icon=".*?"</token>
                <value>android:icon="@drawable/${application.icon}"</value>
            </replacement>
        </replacements>
    </configuration>
</plugin>

On en a profité pour modifier l’icône de l’application, pour le fun.
Et donc ça, ça nous permet de configurer proprement et facilement nos profils Maven :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<profile>
    <id>recette</id>
    <properties>
        ...
        <application.name>Capico-RECETTE</application.name>
        <application.icon>icon_recette</application.icon>
        <application.package>com.excilys.condor.android.application.recette</application.package>
    </properties>
</profile>
<profile>
    <id>preprod</id>
    <properties>
        ...
        <application.name>Capico-PREPROD</application.name>
        <application.icon>icon_preprod</application.icon>
        <application.package>com.excilys.condor.android.application.preprod</application.package>
    </properties>
</profile>
<profile>
    <id>prod</id>
    <properties>
        ...
        <application.name>Capico</application.name>
        <application.icon>icon</application.icon>
        <application.package>com.excilys.condor.android.application</application.package>
    </properties>
</profile>

Et voilà le résultat en image !

VN:R_U [1.9.22_1171]
Rating: 0 (from 0 votes)
Share
Ce contenu a été publié dans Android, Maven, Trucs & astuces. Vous pouvez le mettre en favoris avec ce permalien.

Une réponse à Plusieurs versions d’une application simultanément sur un terminal Android

  1. Moi je retiens que maintenant vous avez des tablettes Android sur Capico… De mon temps on n’avait pas le droit à ça :'(

    VN:R_U [1.9.22_1171]
    Rating: 0 (from 0 votes)

Laisser un commentaire