Élèves du CNAM, identifiez vous :
Entrez votre identifiant INE (entrez les lettres en majuscule) :

Logo du CNAM

Mise à jour : (Mercredi 13 Février 2019, 14:11)

Licence Creative Commons
Le contenu de cette page est mis à disposition selon les termes de la Licence Creative Commons Attribution - Partage dans les Mêmes Conditions 3.0 France.
CP48 :
Développeur d’applications mobiles
2018-2019

Flux RSS du Site Jean-Ferdy Susini


Cette page est dédiée aux interventions dont j'ai la charge dans le cadre du Certificat Professionnel (CP48) : Développeur d’applications mobiles du CNAM. La page de l'an dernier reste accessible Site 2017-2018.
Sur cette page vous trouverez :

Vous pouvez bookmarker cette page une fois avoir été correctement identifié, cela vous évitera de rentrer à nouveau votre INE.

Nouvelles


NFA022 : Principes et programmation système et réseau pour smart-phones et tablettes tactiles

Support de cours et liens utiles


NFA025 : Mise en œuvre de la programmation de smart-phones et tablettes tactiles

Support de cours et liens utiles

Éléments de correction des EDs

Éléments de correction de l'ED1
Elements de correction : NFA025_2016_ED1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED1/Files.jar (39 Ko)

Exercice 1

La réponse à ce premier exercice diverge un peu de l'énoncé, pour présenter quelques éléments supplémentaires.

Pour des raisons de simplicité de distribution du code tout a été regroupé en seul fichier source : le fichier Combat.java. La classe Combat contient essentiellement une méthode main() qui implante la boucle de gestion du combat.

La structure de la solution proposée est la suivante :
  • une classe Combat implante en quelque sorte le «moteur de jeu» qui va calculer de façon itérative les différentes actions du combat.
  • une classe Personnage définit des objets personnage avec leurs caractéristiques principales :
    • nom
    • classe d'armure
    • points de vie
  • une classe Arme implante une arme avec son bonus d"attaque et les dégâts maximum qu'elle peut infliger.
  • une classe PersonnageArme qui étend la classe Personnage pour lui permettre de tenir un arme.
  • Enfin la classe De implante le tirage de dés en proposant en quelques sortes des fonctions utilitaires (méthodes de classe) basées sur Math.random()
Exercice 2

Pour implanter cet exercice on crée une unique classe Duree. Cette classe possède une méthode main() afin de tester l'implantation de la classe.

Une particularité de cette implantation est la définition d'une classe interne : DureeInvalideException qui implante une Exception qui sera levée à la construction d'un objet durée, si les paramètres de la durée se révèle être invalides. C'est-à-dire si les heures sont négatives ou que les minutes ne sont pas comprises entre 0 et 60.
Exercice 3

Pour implanter cet exercice on crée une unique classe RendezVous.

Cet exercice est très simple et l'immutabilité de la classe RendezVous est assuré par le fait que l'accès au champs de la classe est restreint à privé et qu'aucun setter (méthode permettant de changer directement la valeur d'un champ) n'est fournit.

Comment aurait-on pu forcer un peu plus ce caractère imutable de la classe ?

Exercice 4

Cet exercice a pour but de vous faire découvrir les interfaces et l'usage de classes internes voir de classes anonymes que l'on rencontre très fréquemment dans le monde Android. En soit, l'exercice a pu sembler «capillo-tracté» à certains d'entre vous et c'est compréhensible, mais le débat qui a eu lieu sur le forum était intéressant.

Object
Arme
Combat
De
Personnage
Throwable
Duree
RendezVous
VehiculeRacine
fr.cnam.nfa025.ed1.ex4.Moto$1
fr.cnam.nfa025.ed1.ex4.PoidsLourd$1
RoueImpl
fr.cnam.nfa025.ed1.ex4.Voiture$1
VoitureTest
PersonnageArme
Exception
PoidsLourd
Moto
Voiture
DureeInvalideException
Bus
Camion
Tracteur
Enumeration
Roue
Vehicule
src/fr/cnam/nfa025/ed1/ex1/Combat.java
src/fr/cnam/nfa025/ed1/ex2/Duree.java
src/fr/cnam/nfa025/ed1/ex3/RendezVous.java
src/fr/cnam/nfa025/ed1/ex4/Vehicule.java
src/fr/cnam/nfa025/ed1/ex4/Roue.java
src/fr/cnam/nfa025/ed1/ex4/VoitureTest.java
src/fr/cnam/nfa025/ed1/ex4/Suite.java

 Tous les fichiers  Masquer les fichiers 

Le moteur de jeu qui simule le combat entre Beowulf et Grendel

La classe Duree, illustration de la définition d'objets immutables (ancien sujet d'examen)

La classe RendezVous, qui est proposée pour l'essentiel dans le sujet (ancien sujet d'examen)

L'interface Vehicule

L'interface Roue

L'interface Roue

L'interface Roue

Éléments de correction de l'ED2
Elements de correction : NFA025_2016_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2016_ED2/Files.jar (53 Ko)

Exercice 1

La correction de cet exercice est assez directe : le code commenté indique les erreurs qu'il fallait corriger et leur nature.

La trace d'exécution des différents scénarios est obtenu à l'aide du simulateur en utilisant par exemple la personnalité DDMS d'éclipse ou d'Android Studio. Les capture d'écran associées à cet exercice sont des captures du logcat filtrées à l'aide du TAG : CNAM_NFA025_TAG.
Exercice 2
Une fois encore la correction est assez simple et reprend le principe du premier Exercice. La correction propose ici d'appeler l'activité CycleDeVie. On profite de cet exercice pour parler d'une méthode qui n'avait pas été considérée jusque là et que nous découvriront dans le cours sur les Intents mais qui est la méthode onActivityResult() et qui joue bien un rôle particulier dans la gestion du cycle de vie d'une activité.
Exercice 3
Question 1
C'est une question de cours assez facile !
Le fichier AndroidManifest.xml permet au moment de l'installation de l'application sur le terminal au PackageManager du système de connaître les différents composants applicatifs contenus par le package installé. Comme c'est le système Android qui instancie les composants et non le développeur de l'application son rôle est très important car sans une déclaration correcte des composants dans ce fichier, ils seront inutilisables.
Question 2
Comme les exercices sont extraits des sujets d'examen des années passées, les réponses vont parfois dépasser le cadre stricte du cours et anticiper sur les cours à venir. Je n'attends pas de votre part de pouvoir répondre forcément à tout mais au moins au problème principal soulevé par la question.

La question est assez classique. On donne ici un fichier AM_3.xml qui n'est pas associé à une application particulière (ne pas l'ajouter tel quel à un projet, ça ne marcherait pas) mais constitue la réponse à la question. Ce fichier très commenté est en fait très simple à écrire (masquez les commentaires pour vous en convaincre).

Question 3
On rajoute les éléments suivants au fichier AM_3.xml :


Question 4
La question est assez standard et la réponse se trouve dans le fichier MonAvtivite.java.
Question 5
Question assez classique également : la réponse se trouve dans le fichier Navigateur.java.
Exercice 4
On reprend le code de l'exercice de l'ED1 mais on étend un peu la modélisation afin de faciliter l'intégration dans une application Android. On ajoute en particulier la notion d'Arene gérant le combat. L'Arene jouera le rôle de modèle de données, l'activité Combat jouera le rôle de contrôleur et notre interface définit en XML le rôle de vue dans le patron de conception MVC.

Voir directement le code de la solution.

Exercice 5
Question 1

Les erreurs sont commentées dans le code.

Question 2
La méthode onSaveInstanceState(Bundle) permet de sauvegarder l'état courant de l'activité avant un arrêt imprévu. Lorsque l'activité est arrêtée par le système pour des raisons externes au comportement même de l'activité (l'activité est masquée par une autre, le système arrête l'activité pour récupérer de l'espace mémoire, le système arrête l'activité pour prendre en charge une rotation de l'orientation de la GUI…), cette méthode est appelée et le système fournit alors une référence à un objet de type Bundle (jouant le rôle de coffre fort) où le développeur de l'activité stockera les éléments importants de l'état de l'activité pour reprendre son exécution plus tard. Cette méthode n'est pas appelée par exemple si l'activité quitte normalement (appel à la méthode finish())
Exercice 6
Question 1

C'est une question de cours assez classique. Bien penser à préciser le rôle de ce fichier du point de vue du système d'exploitation Android. Pourquoi est-il nécessaire que tous les composants soient déclarés dans ce fichier...

Voir ensuite le fichier AM_6.xml pour avoir une idée du fichier à écrire.
Question 2
voir le fichier correspondant dans les réponses.
Question 3
Question de cours : Expliquer la nature de cet objet (une structure de type dictionnaire associant des valeurs à des clés). il est de type Parcelable. Le type Parcelable implique qu'il peut être transformé en un flux binaire et par l'usage du mécanisme des Binder, il permet d'extirper des données d'un processus pour les mettre en lieu sur (préservé par le système android)... Illustrer par exemple son rôle dans la gestion de la rotation de l'interface graphique passant du mode portrait au mode paysage. Lister les opérations réalisées et en particulier celles où intervient le Bundle
NFA025_2016_ED2}: Screen1
NFA025_2016_ED2}: Screen2
NFA025_2016_ED2}: Screen3
NFA025_2016_ED2}: Screen4
NFA025_2016_ED2}: Screen5
NFA025_2016_ED2}: Screen6
NFA025_2016_ED2}: Screen7
NFA025_2016_ED2}: Screen8
NFA025_2016_ED2}: Screen9
NFA025_2016_ED2}: Screen10
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
ED2
CycleDeVie
./AndroidManifest.xml
./res/layout/main.xml
./res/layout/ex2main.xml
./res/layout/combat.xml
./res/values/strings.xml
./src/fr/cnam/nfa025/ed2/ED2.java
./src/fr/cnam/nfa025/ed2/CycleDeVie.java
./src/fr/cnam/nfa025/ed2/MonActivite.java
./src/fr/cnam/nfa025/ed2/Navigateur.java
./src/fr/cnam/nfa025/ed2/ActiviteCombat.java
./src/fr/cnam/nfa025/ed2/Arene.java
./src/fr/cnam/nfa025/ed2/Combattant.java
./src/fr/cnam/nfa025/ed2/Personnage.java
./src/fr/cnam/nfa025/ed2/Soldat.java
./src/fr/cnam/nfa025/ed2/Arme.java
./src/fr/cnam/nfa025/ed2/ResultatAttaque.java
./src/fr/cnam/nfa025/ed2/De.java
./res/drawable/ic_launcher.png
./res/drawable/nav_icon.png
./AM_3.xml
./src/fr/cnam/nfa025/chasse/ChasseAuTresor.java
./src/fr/cnam/nfa025/throwit/MenuPrincipal.java
./AndroidManifest.xml

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application. Dans ce fichier manifest on retrouve regroupé en une seule application les activités de 4 exercices.

L'interface graphique correspondante à l'activité ED2

L'interface graphique correspondante à l'activité CycleDeVie

L'interface graphique correspondante à l'activité Combat

Le fichier chaînes de caractères :

L'activité principale

L'activité du deuxième exercice

L'activité MonActivite du troisième exercice

L'activité Navigateur du troisième exercice

L'activité ActiviteCombat du quatrième exercice

L'Arene isole le moteur de jeu (modèle et évolution du monde) du controleur qu'est l'activité. Ainsi seules 2 interfaces permettent d'accèder aux données de l'extérieur.

Interface définissant les informations accessibles d'un combattant

Implantation de base de l'interface Combattant

hérite de Personnage en lui ajoutant une arme

implante une arme

Interface définissant les informations accessibles à la suite d'une attaque.

classe gérant des tirages de dés.

icône générée automatiquement à la création du projet

icône de l'activité Navigateur

Réponse à la question 2 de l'exercice 3 ne constitue pas un projet en soit, il s'agit juste d'une réponse typique à la question qui était posée.

Correction des erreurs de la question 5.

Squelette de l'activité décrite dans la question 6.

Réponse à la question 2 de l'exercice 5, ne constitue pas un projet en soit, il s'agit juste d'une réponse typique à la question qui était posée.

Elements de correction : NFA025_2018_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2018_ED2/Files.jar (9 Ko)

Exercice 7
Malgré le contexte peut-être surprenant de l'application, l'exercice reste un très grand classique.

La correction est dans les commentaires du fichier HoloWorld.java

Vous pouvez vérifier le comportement de l'IDE et du terminal en copiant le fichier source dans un projet Android.
Exercice 8
Cet exercice porte sur la définition du fichier AndroidManifest.xml associée à l'application « Guide Touristique ». C'est un fichier fondamental permettant l'installation de votre application sur un terminal Android ; il doit donc être correctement renseigné et pour ce faire, il est capital que vous en compreniez le contenu. La réponse à cet exercice est donc directement donné dans le source suivant :



Exercice 9
Question 1
La question ne comporte pas de difficultés particulières. Il s'agit essentiellement d'une question de cours sur le rôle du fichier AndroidManifest.xml et qui se termine par la production d'un code équivalent au suivant :



Question 2
Les erreurs sont notées sous la forme de commentaires dans le fichier fr/cnam/nfa025/ed2/part2/Trousse.java.
Exercice 10
Question 1
Question classique les réponses sont commentées dans le fichier source fr/cnam/nfa025/ed2/part2/Menu.java
Question 2
Question de cours.
La méthode onSaveInstanceState(Bundle) est une méthode importante de la gestion du cycle de vie d'une activité car elle permet de mettre en sécurité des informations importante portée par l'activité lorsque celle-ci perd l'attention de l'utilisateur. Dès que l'activité se retrouve masquée (partiellement ou totalement), le système crée un objet de type Bundle et appelle cette méthode afin que l'activité puisse y stocker les données qu'elle doit préserver. En effet, l'activité pourra être à tout moment arrêtée par le système à partir du moment où elle a perdu l'attention de l'utilisateur. Les données ainsi sauvée pourront être retrouvées au redémarrage de l'activité (méthode onCreate(Bundle) et/ou méthode onRestoreInstanceState(Bundle)).
Exercice 11
Question 1
Là encore on retrouve une question très classique. qui aboutira à écrire le fichier AndroidManifest.xml ayant la forme suivante :


Question 2
Question classique dont la réponse est donnée par le fichier fr/cnam/nfa025/ed2/part2/MusicController.java
Question 3
cf captue d'écran.
NFA025_2018_ED2}: Screen1
NFA025_2018_ED2}: Screen2
NFA025_2018_ED2}: Screen3
Object
Context
Outils
ContextWrapper
ContextThemeWrapper
Activity
MusicController
Menu
Trousse
HoloWorld
./AndroidManifest.xml
res/layout/controller.xml
res/layout/main.xml
res/values/strings.xml
src/fr/cnam/nfa025/ed2/part2/Trousse.java
src/fr/cnam/nfa025/ed2/part2/Outils.java
src/fr/cnam/nfa025/ed2/part2/MusicController.java
src/fr/cnam/nfa025/ed2/part2/Menu.java
src/fr/cnam/nfa025/ed2/part2/HoloWorld.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

layout android

layout android

values android

source code Trousse.java

source code Outils.java

source code MusicController.java

source code Menu.java

source code HoloWorld.java

Corrections faites en classe

Éléments de correction de l'exercice combat dans l'arène en Java standard

Éléments de correction de l'exercice 1 ED-2
Elements de correction : NFA025_2019_ED2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED2/Files.jar (2 Ko)

Object
Context
ContextWrapper
ContextThemeWrapper
Activity
ED2
AndroidManifest.xml
src/fr/cnam/nfa025/ED2/ED2.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 





Éléments de correction de l'exercice 4 ED-2
Elements de correction : NFA025_2019_ED2_4

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA025_2019_ED2_4/Files.jar (5 Ko)

Object
Personnage
Utilitaire
Arene
De
Context
Arme
PersonnageArme
ContextWrapper
ContextThemeWrapper
Activity
ActiviteCombat
AndroidManifest.xml
src/fr/cnam/nfa025/ed2/combat/Arene.java
src/fr/cnam/nfa025/ed2/combat/Utilitaire.java
src/fr/cnam/nfa025/ed2/combat/ActiviteCombat.java
res/layout/main.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers 








NFA024 : Principes et programmation système et réseau pour smart-phones et tablettes tactiles

Support de cours et liens utiles

Éléments de correction des TPs

Éléments de correction du TP1 : illustration du cycle de vie
Elements de correction : NFA024_2018_TP1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2018_TP1/Files.jar (4 Ko)

Object
Context
Util
ContextWrapper
ContextThemeWrapper
Activity
FirstTest
./AndroidManifest.xml
res/layout/main.xml
res/layout/main_1.xml
res/values/strings.xml
res/values-fr/strings.xml
res/values-land/strings.xml
src/fr/cnam/nfa024/tp1/Util.java
src/fr/cnam/nfa024/tp1/FirstTest.java

 Tous les fichiers  Masquer les fichiers 

Le manifest android de l'application.

layout android

layout android

values android

values android

values android

source code Util.java

source code FirstTest.java

Éléments de correction du TP2 : la calulatrice
Elements de correction : NFA024_2016_TP2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2016_TP2/Files.jar (16 Ko)

Attention pour répondre aux exercices de ce TP nous allons nous appuyer sur une caractéristique du système Android dont il ne faut pas trop abuser : nous allons gérer nos trois activités comme une et une seule application présentant 3 points d'entrée principaux dans son manifeste. Pour l'utilisateur, cela apparaitra comme 3 applications dans le lanceur d'application. Ceci est un « détournement » d'un mécanisme standard d'Android.

Pour cela il faut se référer aux cours sur les « Intents » de NFA025. Dans le AndroidManifest.xml, quand on déclare une activité, on va rajouter un « intent-filter » particulier sur l'activité qui va servir de point d'entrée de l'application (c'est-à-dire l'activité pour laquelle une icône sera placée dans le lanceur d'application Android). La déclaration xml correspond à peu près au code suivant :



    
        
        
    

Dans cette solution, nous déclarons une activité par exercice dans le même manifest, ce qui nous conduit à créer 3 points d'entrée.

Exercice 1

L'implantation est assez directe, l'interface est décrite avec un LinearLayout. Ce premier exemple montre comment est gérer une interaction utilisateur simple (à l'aide du android:onClick)

Exercice 2

Le second exercice va un peu plus loin en proposant une interface graphique plus complexe dans le dossier ex2.xml et une interaction où l'on va discriminer le bouton cliqué par un identifiant. Les identifiants sont créés par le processus de compilation en analysant dans les fichiers les layouts de type @+id/nom_de_l_identifiant.

Remarques :
  • De nombreux « tutos » sur internet vous conseillent de toujours manipuler vos identifiants dans les ressources XML toujours sous la forme @+id/nom_de_l_identifiant. Ce n'est pas forcément une bonne idée ! Certes vous n'avez plus à vous préoccuper de savoir si l'identifiant existe ou pas. Mais d'un autre côté vous perdez une capacité du processus de compilation à vérifier la correction des références aux identifiants. Je vous conseille donc d'utiliser la notation @+id/nom_de_l_identifiant la première fois que vous manipuler l'identifiant. Puuis d'utiliser la notation @id/nom_de_l_identifiant (c.a.d sans le symbol +) pour référencer cet identifiant. Ainsi, si vous vous trompé dans le nom de l'identifiant, le compilateur pourra vous signaler le problème.
  • Je vous conseille également d'adopter rapidement une convention pour le nommage de vos identifiants et de vous y tenir. Personnellement, je propose la nomenclature suivante :
    • n'utiliser que des lettres minuscules, le symbole underscore '_', et les chiffres (mais jamais en premier caractère)
    • la première partie reprend le nom du layout dans lequel l'identifiant est défini. Par exemple, dans main.xml les identifiants commenceront par main_.
    • ensuite donner un nom significatif pour l'objet en question.
    • enfin donner un suffixe rappelant le type de l'objet par exemple '_btn' ou '_et'
    L'intérêt est de pouvoir se rappeler facilement dans le code Java l'origine de l'identifiant et le type de l'objet. Une utilisation importante de ces identifiants est de permettre de retrouver une référence vers l'objet java implantant l'objet d'interface. Dans le code Java cela se fait grâce à la méthode findViewById(int). Or cette méthode retourne une référence de type View. Si cette classe est la racine de tous les widgets Android, on a généralement besoin de « caster » (forcer la prise en compte d'un type plus spécialisé) la valeur de retour en une sous classe de la classe View. Par exemple pour un bouton (classe Button) on écrira : (Button)findViewById(R.id.main_valid_btn). La nomenclature ici ('_btn') permet de se rappeler que le type d'objet est la classe Button.
Exercice 3

La difficulté principale de cet exercice provient de la définition de la même interface avec des « layouts » différents. Les fichier main.xml, main_ll.xml et main_rl.xml contiennent les 3 définitions. Une seule sera active à la fois.

Une autre difficulté importante réside dans la définition de la « logique » de l'application. Dans la proposition d'exercice, on utilise plusieurs méthodes pour gérer l'interaction utilisateur. Ces méthodes permettent de factoriser (écrire un seul code pour gérer le même type de comportement), le comportement de certains boutons. Par exemple, la méthode toucheChiffre() permettra de gérer la saisie de chaque chiffre. La méthode opération permettra de factoriser le comportement de l'appui sur les touches d'opération…

L'idée pour la construction des nombre est de cumuler les chiffres jusqu'à ce qu'une opération ait lieu et de mémoriser le dernier chiffre construit pour calculer.

NFA024_2016_TP2}: Screen1
NFA024_2016_TP2}: Screen2
NFA024_2016_TP2}: Screen3
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
AfficheNombre
Calculatrice
SimpleCalc
AndroidManifest.xml
res/layout/ex1.xml
res/layout/ex2.xml
res/layout/main_ll.xml
res/layout/main_rl.xml
res/layout/main.xml
res/values/colors.xml
res/values/strings.xml
src/fr/cnam/nfa024/calculatrice/AfficheNombre.java
src/fr/cnam/nfa024/calculatrice/SimpleCalc.java
src/fr/cnam/nfa024/calculatrice/Calculatrice.java

 Tous les fichiers  Masquer les fichiers 

Le fichier manifest android commence par déclarer 3 activités.

La description statique de l'interface graphique de la première activité (AfficheNombre) :

La description statique de l'interface graphique de la deuxième activité (SimpleCalc) :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de LinearLayout :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de RelativeLayout :

La description statique de l'interface graphique de la troisième activité (Calculatrice), composée à base de TableLayout :

Le fichier couleur contenant la déclaration de couleurs en format RGB :

Enfin la liste des chaînes de caractères

L'activité AfficheNombre

L'activité SimpleCalc

L'activité Calculatrice

Corrections faites en classe

Éléments de correction du TP1 : illustration du cycle de vie
Elements de correction : NFA024_2019_TP1

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP1/Files.jar (3 Ko)

NFA024_2019_TP1}: Screen1
NFA024_2019_TP1}: Screen2
NFA024_2019_TP1}: Screen3
NFA024_2019_TP1}: Screen4
Object
Context
ContextWrapper
ContextThemeWrapper
Activity
HelloWorld
AndroidManifest.xml
src/fr/cnam/nfa024/TP1/HelloWorld.java
res/layout/main.xml
res/values/strings.xml
res/values-fr/strings.xml

 Tous les fichiers  Masquer les fichiers 






Éléments de correction du TP2 : la calculatrice
Elements de correction : NFA024_2019_TP2

 ?  Description  Fichiers  Classes  Captures d'écran  Tout voir  Rien voir Fichiers : NFA024_2019_TP2/Files.jar (5 Ko)

NFA024_2019_TP2}: Screen1
NFA024_2019_TP2}: Screen2
NFA024_2019_TP2}: Screen3
NFA024_2019_TP2}: Screen4
NFA024_2019_TP2}: Screen5
NFA024_2019_TP2}: Screen6
NFA024_2019_TP2}: Screen7
Object
Context
Utils
ContextWrapper
ContextThemeWrapper
Activity
BasicCalc
Message
Calculatrice
AndroidManifest.xml
src/fr/cnam/nfa024/TP2/Message.java
src/fr/cnam/nfa024/TP2/Calculatrice.java
src/fr/cnam/nfa024/TP2/Utils.java
src/fr/cnam/nfa024/TP2/BasicCalc.java
res/layout/main.xml
res/layout/calc.xml
res/layout/basic_calc.xml
res/values/strings.xml

 Tous les fichiers  Masquer les fichiers