9
votes

BlackBerry - Script de construction de fourmis pour des applications plus complexes

J'ai du mal à créer un script de construction de fourmis pour nos applications de production.

J'ai beaucoup lu sur la fourmi et BB-Ant-Tools . J'ai suivi de nombreuses questions Stackoverflow sur Ant & BB (référencées ci-dessous dans les commentaires pour "lier" les questions). Je voudrais aider avec un script plus complexe que le "World Hello!" Habituel " Applications de style. Mon processus de construction actuel est entièrement exécuté dans Eclipse et effectué manuellement. P>

Pour cette question, je voudrais demander Comment utiliser la fourmi pour créer un projet qui utilise 2 (ou plus) différentes bibliothèques Les projets (qui doivent également être construits), sans utiliser Eclipse du tout? strong> p>

J'ai une fourmi, BB-Ant-Tools installés. J'ai construit et déployé sur le périphérique un monde Basic Hello, en utilisant ces outils après des exemples de base. J'ai créé un script de construction et certains fichiers de propriété; Mais lorsque j'exécute les scripts, le produit final ne fonctionne pas sur le téléphone (l'interface utilisateur du téléphone se gèle sur l'écran de lancement). P>


J'ai 3 scripts de construction, un pour chaque bibliothèque et une pour l'application principale. Celles-ci sont identiques, à l'exception du nom du projet (et pourraient être combinées dans un script importé commun à un moment donné). Chacun des 3 projets Java possède un fichier de propriétés de fourmis qui lui est associé. J'utilise également 3 fichiers de propriétés communs pour définir les constantes, stocker des informations sur le mot de passe de la signature du JDE et du code. P>

  • communs.properties: p>

    <?xml version="1.0" encoding="ISO-8859-1"?>
    <project name="MyApp" default="build">
    
        <!-- BLACKBERRY ANT TOOLS -->
        <property name="bb-ant-tools.home" location="C:/development/tools/bb-ant-tools" />
        <taskdef resource="bb-ant-defs.xml" classpath="${bb-ant-tools.home}/bb-ant-tools.jar" />
    
        <!-- CONFIG FILES -->
        <property file="${common.basedir}/common.properties" />
        <property prefix="project" file="project.properties" />
    
        <!-- FOLDERS -->
        <property name="dest.dir" location="build" />
    
        <!-- this is empty in the library scripts -->
        <path id="import.jars">
            <fileset dir="../MySDK/build" includes="*.jar" />
            <fileset dir="../MySOAP/build" includes="*.jar" />
        </path>
    
        <path id="src.files">
            <fileset dir="src" includes="**/*" />
            <fileset dir="res" includes="**/*" />
        </path>
    
        <!-- TARGET ACTIONS -->
    
        <target name="build" depends="">
            <mkdir dir="${dest.dir}" />
    
            <!-- work around a bug requiring app icons to be in the output folder -->
            <copy file="${basedir}/res/icon.png" tofile="${dest.dir}/icon.png" />
    
            <rapc 
                    jdehome="${jde.home}"
                    output="${project.output}" 
                    destdir="${dest.dir}" >
    
                <import refid="import.jars" />
                <src refid="src.files" />
                <jdp file="${basedir}/project.properties" />
            </rapc>
        </target>
    
        <target name="sign" depends="build">
            <sigtool
                    codfile="${dest.dir}/${project.output}.cod" 
                    jdehome="${sigtool.jde}" 
                    password="${sigtool.password}" />
        </target>
    
        <target name="clean">
            <delete dir="${dest.dir}" />
        </target>
    
    </project>
    
  • Projet.Properties (pour la bibliothèque de savon): p>

    output=MyApp
    title=App
    type=cldc
    vendor=Richard
    version=1.0.7
    description=A nice app
    icon=icon.png
    
  • projet.properties (pour la bibliothèque de SDK interne): p>

    output=MySDK
    type=midlet
    


5 Réponses :


0
votes

J'espère que vous n'oubliez pas d'expédier vos morts de bibliothèque avec votre application d'application à l'utilisateur final. Parce que sinon une application ne fonctionnera pas.

À propos du bâtiment de la bibliothèque de déclenchement - Je préfère créer des bibliothèques de construction uniquement lorsqu'il est nécessaire - le code ou la dépendance a changé.

à propos de la solution pour vous, je voudrais juste avoir un fichier battue où je vais Trigger ant trois fois avec différents fichiers de build.xml et de fichiers de courant appropriés (car les scripts de fourmis ont des répertoires relatifs). Donc, ce serait comme suit: xxx


1 commentaires

THX Oui, je sais expédier les mordus de la bibliothèque. Obtenir le dernier ensemble de fichiers ensemble est une autre tâche manuelle pour le moment, ce qui est une autre raison pour laquelle je passe à Ant. Je ne l'ai pas inclus dans cette question, car j'ai déjà le script pour obtenir cette manipulation de fichier, décompresser, updatejar, etc. travaillant.



1
votes

C'est ce que j'utilise sur plusieurs projets.

<target name="sign" description="Sign the cod file">
    <sigtool codfile="${build.dir}/${cod.name}_bbminterface.cod" password=""/>
    <sigtool codfile="${build.dir}/${cod.name}_bbmimpl.cod" password=""/>
    <sigtool codfile="${build.dir}/${cod.name}.cod" password="" />
</target>


3 commentaires

THX - Le script fonctionne bien sur des projets simples - j'ai une application simple avec la bibliothèque installée et en cours d'exécution sur le périphérique. Je ne peux toujours pas obtenir plus complexe pour construire, alors à la recherche d'autres bugs que je pourrais avoir.


J'utilise votre outil BB Ant et ça marche bien. Mais pouvez-vous m'aider à maintenir comment gérer la structure du répertoire de ressources dans cet outil, par exemple j'ai ajouté toutes les images dans le dossier "res / img /" maintenant, lorsque je génère un fichier .Cod, il a ajouté toutes les images dans le dossier racine, je veux dire qu'il n'a pas maintenu le répertoire. Structure comme celle-ci "res / img"


Il y a des postes sur les ressources. Je pense que toutes les ressources sont placées dans la racine du fichier JAR, vous perdez ainsi votre structure de dossier. Mais je suis aussi coincé sur ce problème pour le moment.



1
votes

Pour répondre à ma question sur Constructions de déclenchement des projets inclus , de mon fichier de construction principal, la solution consiste à utiliser la tâche subtiliser , qui est une commande type standard.

Par exemple, le code ci-dessous (j'oublie de l'endroit où je l'ai copié, mais ce n'est pas le mien, et cela fonctionne) déclenchera le fichier build.xml dans chacun des dossiers fournis et exécutera l'exportation -Toutez cible dans ce fichier de construction. xxx

il nécessite une propriété appelée projet.deps pour être déclarée par virgule Liste des dossiers. La DIGNET est définie en regardant en arrière un dossier à partir de la version principale.xml et à la recherche de chacun des sous-dossiers dans Project.deps .

ant trouvera ensuite le fichier build.xml dans chacun de ces dossiers et l'exécutera, à la recherche de la cible exportation-toolt-toort-to exportation.

dans chacun des nouveaux export- Toutes les sous-tâches , la propriété exporter.dir auront été définies, ce qui permet de passer des informations à partir de la version principale.xml dans les sous-tâches.


0 commentaires

0
votes

J'ai vu la question sur la manière de sauvegarder la structure du répertoire des ressources dans le commentaire de Dhiral à La réponse de Joe's's's's . Il y a quelques jours, j'ai trouvé une solution de contournement ici ( Développement BlackBerry avec Ant & Eclipse ) Dans les commentaires à la poste:

yuri wrote:
I found a way 

You just need to copy the resources temporarily to the output folder, and delete them
after the build is over. The key is that the resources must be in the working folder
of the compiler.

Posted 18 Jan 2008 at 5:08 pm ¶


0 commentaires

1
votes

Afin de maintenir la structure de ressources au lieu d'ajouter le dossier "res" en tant que dossier de source, procédez comme suit:

  1. Créez un fichier JAR temporaire de toutes les ressources à l'aide de la commande ant 'jar': p>

    <fileset dir="temp/@{brand}" includes="res.jar"/>
    
  2. Ajoutez le pot temporaire en tant qu'élément source de l'élément "SRC" de la commande RACC: p>

    <jar destfile="temp/@{brand}/res.jar"
        basedir="../@{brand}/res"
        compress="false"
        filesonly="false"
        includes="**/*"/>
    


0 commentaires