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 :

Générer deux applciations à partir d'un seul code source


Sujet :

Android

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut Générer deux applciations à partir d'un seul code source
    Bonjour,
    Je travaille sur un générateur d'application android. J'ai créé d'une part un template Android (= la base de l'application android, commune poue toutes les applis générées), et de l'autre part, un site web, dont le back injecte des données en JSON pour l'appli android et recompile l'APK (avec apktool).
    Le système fonctionne plutôt bien, mais je me heurte à un problème. L'évolution que je souhaite apporter, c'est de pouvoir
    - soit générer une app Android dont certaienes données peuvent être synchronisées avec un serveur,
    - soit générer une app Android qui ne peut pas être synchronisée avec l'extérieur.

    Dans l'idée, c'est plutôt simple : il ne faut pas que le code java android soit compilé dans l'apk si on n'a pas demandé une application synchronisable. Donc par exemple, s'il existe une fonction synchronizeData() pour le template synchronisé, cette fonction ne doit pas du tout être présente pour le template non synchronisé. Ceci pour une question de sécurité. Imaginez que la génération d'une application synchronisable soit payante (l'autre étant gratuite), il ne faut pas simplement mettre une condition dans le code, ou un flag dans la base de données (pour info, on peut accéder aux bases sqlite d'un android rooté...)

    Bien entendu, je ne veux pas faire deux projet android différents étant donné que 99% du code est le même dans les deux cas.

    Pistes :
    J'ai entendu parler de moteurs qui génèrent du java... mais je n'ai aucun nom...
    Je réfléchi aussi à si je peux utiliser les profils Gradle pour compiler une classe plutôt qu'une autre...

    Comprenez-vous ce que je veux faire ? Avez-vous des idées ?
    Merci d'avance.

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben tu fais un projet "librairie" avec 99% du code.
    Un premier projet APK avec le synchro
    Un second projet APK sans la synchro

    Soit 3 projets
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Merci pour la réponse,

    En réalité le différence entre les deux app n'est vraiment pas énorme. Au niveau de la vue, l'utilisateur a un bouton de synchro sur l'une et sur l'autre il disparait. De même, sur la synchro, il y a une fonctionnalité de tracking GPS, l'autre en est démunie. Si je fais ça, cela nécessite de créer une API, et par conséquent de recréer TOUTES les activités & fragments dans les deux sous projets. Répétition de code à gogo.

    Pourtant, l'idée est plus que logique, mais quand même, il existe bien quelque part un outil qui fait exactement ce que je veux faire ? Tout a déjà été créé, j'en suis persuadé ! Je continue mes recherches...

  4. #4
    Membre éclairé
    Avatar de LeBzul
    Homme Profil pro
    Inscrit en
    Décembre 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Décembre 2008
    Messages : 381
    Points : 832
    Points
    832
    Par défaut
    Il y a plusieurs façons de faire;
    En utilisant ant, tu peux renommer tes packages et modifier les fichiers utilisés lors de la compilation... Tu crées donc 2 Build, un avec le bouton, et un Build sans le bouton.
    Il est possible de faire ca aussi avec Gradle, mais je maitrise encore moins que ant.
    En espérant que ca t'aide.
    "Quand la lune n'est pas là, la nuit mène une existence obscure"

  5. #5
    Modérateur
    Avatar de Hizin
    Homme Profil pro
    Développeur mobile
    Inscrit en
    Février 2010
    Messages
    2 180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Développeur mobile

    Informations forums :
    Inscription : Février 2010
    Messages : 2 180
    Points : 5 072
    Points
    5 072
    Par défaut
    Très facile à faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    buildTypes {    
        withSyncDebug {
            packageNameSuffix ".with"
            debuggable true
            signingConfig signingConfigs.debug
        }
        withoutSyncDebug {    
            packageNameSuffix ".without"
            debuggable true
            signingConfig signingConfigs.debug
        }
     
        withSyncProd {
            packageNameSuffix ".with"
            debuggable false
            signingConfig signingConfigs.prod
        }
        withoutSyncProd {    
            packageNameSuffix ".without"
            debuggable false
            signingConfig signingConfigs.prod
        }
    }
    Un p'tit exemple
    C'est Android, PAS Androïd, ou Androïde didiou !
    Le premier est un OS, le second est la mauvaise orthographe du troisième, un mot français désignant un robot à forme humaine.

    Membre du comité contre la phrase "ça marche PAS" en titre et/ou explication de problème.

    N'oubliez pas de consulter les FAQ Android et les cours et tutoriels Android

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 256
    Points : 74
    Points
    74
    Par défaut
    Oui !

    Hizin, on se rapproche !
    Aujourd'hui j'ai résolu mon problème. En effet j'utilise Gradle. En fait il y a un truc exprès dans Gradle pour faire ça : http://tools.android.com/tech-docs/n...Build-Variants
    La doc est très bien faite. En plus de mes builttypes (debug, recette, préprod et prod), j'ai créé deux flavors : sync et non-sync. Je peux spécifier le nom package, à peu près comme dans les buittypes... etc.

    Mon architecture :
    - main
    + src/
    + ...
    - debug
    - recette
    - preprod
    - prod
    - sync
    + src/
    + ...
    - non-sync

    Mon main/src contient toutes mes classes génériques
    Mon sync/src contient mes classes spécifiques au projet

    Mais là où on voit la puissance de Gradle, c'est qu'à la compilation je mix mes buildtypes/flavors.
    Sous intelliJ : View->Tool Windows -> Build Variants, ou en ligne de commande : gradle aProdSync, ou gradle aDebugNonSync par exemple.

    Ca me permait aussi de gérer finement proguard selon le type de compilation choisi

    Notez aussi que selon la doc on peut directement faire des dossiers
    debugSync/
    prodSync/
    etc...

    Merci pour votre aide !

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

Discussions similaires

  1. Construire deux fichiers à partir d'un seul
    Par MilkyMars dans le forum Lisp
    Réponses: 5
    Dernier message: 09/04/2013, 10h14
  2. Générer plusieurs clés à partir d'un seul nom
    Par khaled_prg dans le forum Débuter avec Java
    Réponses: 10
    Dernier message: 17/10/2012, 12h55
  3. Générer 2 jars à partir d'un seul pom.xml
    Par Alanis dans le forum Maven
    Réponses: 3
    Dernier message: 15/06/2009, 11h10
  4. peut on faire deux actions à partir d'une seule form
    Par sniper_marra dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2008, 19h20
  5. [ImageMagick] Générer deux images à partir du même script
    Par molesqualeux dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 07/01/2006, 01h42

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