IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Compilation conditionnelle ?


Sujet :

Android

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut Compilation conditionnelle ?
    Bonjour,

    Quelqu'un saurait-il m'indiquer s'il est possible de faire, et comment, de la compilation conditionnelle, comme on fait traditionnellement en C avec #ifdef ?

    Dans le cadre d'un projet couvrant plusieurs technologies, déclarées par des constantes en début de programme, comme par exemple:

    TypeConnexion = WIFI ou Ethernet
    TypeBusIn = X10, Can, USB ou ....

    et n'avoir dans mon code final que la partie qui m'intéresse en fonction des options définies au moment de compiler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si connexion wifi
      si busX10
        traitement spécifique
      Si vus CAn
       traitement spécifique
    etc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Si connexion ethernet
      si busX10
        traitement spécifique
      Si vus CAn
       traitement spécifique
    etc
    Je précise que les conditions en question se retrouveront partout dans le code, d'où la nécessité de devoir utiliser de la compilation conditionnelle et non des librairies dédiées.

    Ceci pour éviter d'avoir un code inutilement lourd avec plein de tests partout (ralentissement) et plein de code inutile (taille). Je précise que c'est l'utilisateur final qui va lancer la compilation et qui va indiquer la valeur des constantes en fonction de son installation (projet open-source), et que cet utilisateur ne dispose pas forcément des compétences pour programmer.

    Si ce n'est pas possible, alors je laisserai le code inutile et je testerai les fonctions en dynamique, parce que même si je n'inclus pas certaines librairies sélectivement, mon code ne compilera pas.

    Merci.

  2. #2
    Membre confirmé
    Avatar de BeeApps
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juillet 2017
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juillet 2017
    Messages : 86
    Points : 615
    Points
    615
    Par défaut
    Salut,

    As-tu regardé du côté des buildVariants ? https://developer.android.com/studio...-variants.html

    Ca permet de compiler l'application avec plusieurs variantes. Par contre, tu ne peux pas utiliser de condition comme #ifdef (à ma connaissance).
    Mais peut-être que cette solution te convient. Je te laisse regarder si tu ne connaissais pas

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Merci beaucoup de ta réponse.

    En fait, ce mécanisme semble approprié (sous réserve que j'aie correctement tout compris) pour générer un nombre limité et prévu de versions, et éventuellement de sous-versions: Genre une release et une debug comportant elle-même deux ou trois possibilités.

    Mon contexte à moi, c'est plutôt que, pour prendre un exemple, on a le choix entre des bus physiques A,B,C,D,E,F... mais que l'utilisateur final ne va en choisir qu'un nombre limité: par exemple: C+D+F
    Et donc ça reviendrait à prévoir d'avance toutes les combinaisons possibles: Déjà avec 8 bus ça me fait 256 combinaisons, et ajoute les autres options disponibles. Et ça me ferait un truc invraisemblable au niveau de mon code, avec codage (si j'ai bien compris) de toutes les fonctions selon tous les cas possibles.

    Bref, ça ne semble pas convenir à la résolution de mon problème, et tu sembles m'indiquer qu'en fait il n'y a pas de solution.
    Les possibilités à ce niveau sont plus flexibles au niveau des langages bas niveau, où ce genre de choses ne pose absolument aucun problème et est utilisé pratiquement dans toutes les librairies.
    Tant pis, il faut "manger" les inconvénients pour profiter des avantages

    Merci encore de m'avoir répondu
    Claude

  4. #4
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 222
    Points
    20 222
    Par défaut
    Les variables de preprocessor n'existent pas en JAVA.

    Tu as plusieurs solutions :
    - les flavors/build variants qui te permettent d'avoir un code différent en fonction du type choisi. Ca peut vite devenir le bordel
    - du paramétrage. Soit via une interface , soit de manière cachée , c'est juste des options à gérer via un if/else dans ton code
    - Passer par du code jni (c ou c++) dans lequel tu pourra gérer des ifdef et que tu utilise ensuite dans ton code java.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2008
    Messages : 612
    Points : 1 050
    Points
    1 050
    Par défaut
    Les variables de preprocessor n'existent pas en JAVA.
    D'accord, alors c'est clair.

    les flavors/build variants qui te permettent d'avoir un code différent en fonction du type choisi. Ca peut vite devenir le bordel
    C'est ce que j'avais cru comprendre et ce que j'expliquais: Pratique mais inadapté dans mon cas de figure

    du paramétrage. Soit via une interface , soit de manière cachée , c'est juste des options à gérer via un if/else dans ton code
    Ça, c'est ce que je fais pour l'instant, mais ça ne réduit pas la taille du code en fonction des options choisies.

    Passer par du code jni (c ou c++) dans lequel tu pourra gérer des ifdef et que tu utilise ensuite dans ton code java.
    Ok, je ne connaissais pas cette possibilité, je vais regarder comment ça fonctionne et voir si ça convient à mon cas (très particulier, j'en conviens aisément, mais c'est aussi une application très spécifique)

    En tout cas, un grand merci pour ta réponse, au moins maintenant je suis fixé de façon claire

    Claude

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Compilation conditionnelle
    Par srvremi dans le forum Langage
    Réponses: 10
    Dernier message: 23/02/2006, 18h51
  2. Compilation conditionnelle
    Par owsion dans le forum Langage
    Réponses: 6
    Dernier message: 25/10/2005, 17h15
  3. [LG] Compilation conditionnelle et multiples unités
    Par Alcatîz dans le forum Langage
    Réponses: 4
    Dernier message: 05/06/2005, 08h58
  4. syntaxe pour compilation conditionnelle ?
    Par tintin72 dans le forum C
    Réponses: 9
    Dernier message: 17/05/2005, 18h12
  5. [CODE] Compilation conditionnelle ?
    Par Cornell dans le forum Langage
    Réponses: 3
    Dernier message: 16/09/2003, 18h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo