Développons en Java 2.30 | |
Copyright (C) 1999-2022 Jean-Michel DOUDOUX | (date de publication : 15/06/2022) |
|
Niveau : | Supérieur |
J2ME est la plate-forme Java pour développer des applications sur des appareils mobiles tels que des PDA, des téléphones cellulaires, des terminaux de points de vente, des systèmes de navigation pour voiture, ...
C'est une sorte de retour aux sources puisque Java avait été initialement développé pour piloter des appareils électroniques avant de devenir une plate-forme pour le développement et l'exécution d'applications polyvalentes.
Un environnement J2ME est composé de plusieurs éléments :
Pour répondre à la plus large gamme d'appareils cibles, J2ME est modulaire grâce à trois types d'entités qui s'utilisent par composition :
Ce chapitre contient plusieurs sections :
Le langage Java a été développé à son origine pour la programmation d'appareils électroniques de grande consommation (langage Oak). Cependant au fil des années, Java a évolué pour être principalement utilisé pour le développement d'applications standalone et serveurs. La plate-forme Java ME peut ainsi être vue comme un retour aux buts originaux de Java.
Historiquement, Sun a proposé plusieurs plates-formes pour le développement d'applications sur des machines possédant des ressources réduites, typiquement celles ne pouvant exécuter une JVM répondant aux spécifications complètes de la plate-forme Java SE.
En 1999, Sun propose de mieux structurer ces différentes plates-formes sous l'appellation J2ME (Java 2 Micro Edition). Courant 2000, la plate-forme J2ME est créée pour le développement d'applications sur appareils mobiles ou embarqués tels que des téléphones mobiles, des PDA, des terminaux, ... : elle est donc la descendante des différentes plates-formes antérieures relatives aux appareils mobiles. Seule la plate-forme JavaCard n'est pas incluse dans Java ME et reste à part.
Java ME cible de très nombreux appareils électroniques possédant différentes caractéristiques dans une même plate-forme.
En juin 2005, la plate-forme J2ME a été renommée, comme les autres plates-formes Java, en Java ME (Java Micro Edition).
La plate-forme Java Mobile Edition (J2ME/Java ME) cible le marché des appareils électroniques et embarqués tels que les pagers, les téléphones cellulaires, les PDA, les set top boxes, etc ... Elle est composée de plusieurs éléments :
La plate-forme Java ME cible des appareils électroniques mobiles ou embarqués dont les caractéristiques peuvent être particulièrement différentes et qui représentent un nombre très important d'appareils différents. La grande difficulté est donc de définir une plate-forme qui propose des services pour le plus grand nombre d'appareils possible.
La seule solution pour répondre à cette problématique est de rendre la conception de la plate-forme modulaire. L'ensemble des appareils sur lequel peut s'exécuter une application écrite avec J2ME est tellement vaste et disparate que J2ME est composé de plusieurs parties : les configurations et les profiles qui sont spécifiés par le JCP. J2ME propose donc une architecture modulaire.
J2ME définit deux grandes familles d'appareils :
La modularité de la plate-forme est assurée par trois concepts :
L'inconvénient de ce principe est qu'il déroge à la devise de Java "Write Once, Run Anywhere". Ceci reste cependant partiellement vrai pour des applications développées pour un profile particulier. Il ne faut cependant pas oublier que les types de machines cibles de J2ME sont tellement différents (du téléphone mobile au set top box), qu'il est surement impossible de trouver un dénominateur commun. Ceci associé à l'explosion du marché des machines mobiles explique les nombreuses évolutions en cours de la plate-forme.
Java ME ne définit pas un nouveau langage de programmation mais adapte la technologie Java aux appareils mobiles et embarqués.
Java ME tente de conserver autant que possible la compatibilité avec Java SE. Pour répondre aux besoins spécifiques des appareils mobiles, Java ME remplace certaines API ou en propose de nouvelles.
Une application Java ME est organisée en plusieurs couches logicielles :
Application Java ME
Packages optionnels, API tiers
Profiles
Configuration
Machine virtuelle (VM)
Appareil
Une application est développée en reposant sur une configuration qui cible une large famille d'appareils cibles, un ou plusieurs profiles qui fournissent des fonctionnalités de base et des packages optionnels ou des API tiers pour des fonctionnalités spécifiques.
Chaque configuration peut être utilisée avec un ensemble de packages optionnels qui permet d'utiliser des technologies particulières (Bluetooth, services web, lecteur de codes barre, etc ...). Ces packages sont le plus souvent dépendant du matériel.
Les API tiers ne font pas partie de Java ME mais elles s'appuient sur elle ou l'étendent pour définir des API spécifiques à un appareil ou une fonctionnalité.
Par rapport à Java SE, Java ME utilise des machines virtuelles différentes. Certaines classes de base de l'API sont communes avec cependant de nombreuses omissions dans l'API Java ME.
Java ME définit des environnements qui servent de socles pour développer des applications portables :
Java ME est la plate-forme Java la plus récente.
De plus amples informations peuvent être obtenues sur le site :
https://www.oracle.com/java/technologies/javameoverview.html
Les configurations définissent les caractéristiques de bases d'un environnement d'exécution pour un certain type de machine possédant un ensemble de caractéristiques et de ressources similaires. Elles se composent d'une machine virtuelle et d'un ensemble d'API de base.
Deux configurations sont actuellement définies :
La CLDC 1.0 est spécifiée dans la JSR 030 : elle concerne des appareils possédant des ressources faibles (moins de 512 Kb de RAM, faible vitesse du processeur, connexion réseau limitée et intermittente) et une interface utilisateur réduite (par exemple un téléphone mobile ou un PDA "entrée de gamme"). Elle s'utilise sur une machine virtuelle KVM. La version 1.1 est le résultat des spécifications de la JSR 139 : une des améliorations les plus importantes est le support des nombres flottants.
La CDC est spécifiée dans la JSR 036 : elle concerne des appareils possédant des ressources plus importantes (au moins 2Mb de RAM, un processeur 32 bits, une meilleure connexion au réseau), par exemple un set top box ou certains PDA "haut de gamme". Elle s'utilise sur une machine virtuelle CVM.
Les profiles se composent d'un ensemble d'API particulières à un type de machines ou à une fonctionnalité spécifique. Ils permettent l'utilisation de fonctionnalités précises et doivent être associés à une configuration. Ils permettent donc d'assurer une certaine modularité à la plate-forme J2ME.
Il existe plusieurs profiles :
Profil | Configuration |
JSR |
|
MIDP 1.0 | CLDC |
37 |
Package javax.microedition.* |
Foundation Profile | CDC |
46 |
|
Personal Profile |
CDC |
62 |
|
MIDP 2.0 | CLDC |
118 |
|
Personal Basis Profile | CDC |
129 |
|
RMI optional Profile | CDC |
66 |
|
Mobile Media API (MMAPI) 1.1 | CLDC |
135 |
Permet la lecture de clips audio et vidéo |
PDA | 75 |
||
JDBC optional Profile | CDC |
169 |
|
Wireless Messaging API (WMA) 1.1 | CLDC |
120 |
Permet l'envoi et la réception de SMS |
Les utilisations possibles des profils sont :
|
|
|
MIDP est un profile standard qui n'est pas défini pour une machine particulière mais pour un ensemble de machines embarquées possédant des ressources et une interface graphique limitée.
Sun a développé un profil particulier nommé KJava pour le développement spécifique sur Palm. Ce profile a été remplacé par un nouveau profil nommé MIDP for Palm OS.
Le Foundation Profile est un profil de base qui s'utilise avec CDC. Ce profil ne permet pas de développer des IHM. Il faut lui associer un des deux profils suivants :
PersonalJava est remplacé par le Personal Profile.
Le choix du ou des profils utilisés pour les développements est important car il conditionne l'exécution de l'application sur un type de machine supporté par le profil.
Cette multitude de profils peut engendrer un certain nombre de problèmes lors de l'exécution d'une application sur différents périphériques car il n'y a pas la certitude d'avoir à disposition les profils nécessaires. Pour résoudre ce problème, une spécification particulière issue des travaux de la JSR 185 et nommée Java Technology for the Wireless Industry (JTWI) a été développée. Cette spécification impose aux périphériques qui la respectent de mettre en oeuvre au minimum : CLDC 1.0, MIDP 2.0, Wireless Messaging API 1.1 et Mobile Media API 1.1. Son but est donc d'assumer une meilleure compatibilité entre les applications et les différents téléphones mobiles sur lesquelles elles s'exécutent.
Sun propose un outil pour développer des applications J2ME utilisant CLDC/MIDP. Cet outil peut être téléchargé à l'url suivante : https://www.oracle.com/java/technologies/java-archive-downloads-javame-downloads.html
La version 1.0.4 de cet outil permet de développer des applications utilisant MIDP 1.0.
L'installation ci-dessous concerne la version 1.0.4.
Il faut exécuter le fichier j2me_wireless_toolkit-1_0_4_01-bin-win.exe
Il faut suivre les instructions suivantes, guidées par l'assistant d'installation :
Il faut exécuter l'outil KToolBar.
Pour créer un projet, il faut cliquer sur le bouton "New Project" ou sur l'option "New Project" du menu "File".
Il faut saisir le nom du projet et le nom qualifié de la midlet puis cliquer sur "Create Project".
Il faut ensuite créer la ou les classes dans le répertoire src de l'arborescence du projet.
Pour construire le projet, il faut cliquer sur le bouton "Build".
Pour exécuter le projet, il suffit de choisir le type d'émulateur à utiliser et cliquer sur le bouton "Run".
Exemple : avec l'émulateur de téléphone par défaut.
Cliquer sur l'application "Test" | puis cliquer sur le bouton entre les flèches |
Il est aussi possible d'utiliser l'émulateur Palm POSE (Palm O.S. Emulator). L'outil demande le chemin d'accès à POSE,
Puis l'outil génère un fichier .prc.
Enfin, il lance l'émulateur et installe le fichier pour l'exécuter.
Pour plus de détails, voir la section sur MIDP for Palm OS.
La version 2.0 permet d'utiliser MIDP 1.0 ou 2.0 ainsi que les API optionnels Mobile Media et Wireless Messaging . Il peut être intégré dans d'autres IDE tels que Sun Studio Mobile Edition ou JBuilder.
La version 2.1 permet d'utiliser CLDC 1.1 et l'API J2ME Web service et de développer des applications pour des périphériques qui respectent les spécifications JTWI.
La version 2.1 du J2ME Wireless Toolkit nécessite la présence sur le système d'un J2SE 1.4 minimum.
Elle permet le développement d'applications répondant aux spécifications de la JSR-185 (Java Technology for the Wireless Industry) qui inclue : CLDC 1.1, MIDP 2.0, WMA 1.1 MMAPI 1.1.
Elle permet aussi l'utilisation de la JSR-172 (J2ME Web Services Specification).
Lancer l'application j2me_wireless_toolkit-2_1-windows.exe. Un assistant guide l'utilisateur dans les différentes étapes de l'installation :
L'installation créé les répertoires suivants :
appdb\ |
contient les bases de données de type RMS des applications |
apps\ |
contient les applications développées comme applications de démo |
bin\ |
contient les outils du WTK |
docs\ |
contient la documentation du WTK et des API |
lib\ |
contient les bibliothèques des API |
L'outil Ktoolbar est un petit IDE qui permet de compiler, pré-vérifier, packager et exécuter des applications utilisant le profile MIDP. Il ne permet pas l'édition du code des applications : il faut utiliser un éditeur externe pour réaliser cette tâche.
La première chose à faire pour créer une application est de créer un nouveau projet. Pour cela, il faut sélectionner l'option « File/New Project » du menu ou cliquer sur le bouton « New Project » dans la barre d'outils.
Il faut saisir le nom du projet et le nom de la classe de la Midlet.
La création du projet permet la création d'une structure de répertoires dans le sous-répertoire apps du répertoire du WTK. Dans ce répertoire apps, un répertoire est créé nommé du nom du projet. Ce répertoire contient lui-même plusieurs sous-répertoires :
%WTK%/apps/nom_projet/bin |
contient le fichier jar, jad et le fichier manifest |
%WTK%/apps/nom_projet/classes |
contient les classes compilées |
%WTK%/apps/nom_projet/lib |
contient les bibliothèques utiles à l'application |
%WTK%/apps/nom_projet/res |
contient les ressources utiles à l'application |
%WTK%/apps/nom_projet/src |
contient les sources des classes |
La page des propriétés du projet est différente de celle proposée dans la version 1.0. Pour l'utiliser, il faut utiliser l'option « Project/settings » ou cliquer sur le bouton « Settings » de la barre d'outils.
L'onglet « API sélection » permet de sélectionner la plate-forme cible ainsi que les API particulières qui vont être utilisées par l'application.
Le « target plateform » permet de sélectionner le type de plate-forme cible utilisée :
L'onglet « Required », « Optionnal » et « User defined » permet de préciser les attributs respectivement obligatoires, optionnels et particuliers à l'application dans le fichier manifest sous la forme de paires clé/valeur.
L'onglet « Midlets » permet de saisir les Midlets qui composent la suite de Midlets de l'application.
Pour créer et éditer le code des classes qui composent l'application, il faut utiliser un outil externe dans le répertoire %WTK%/apps/nom_projet/src, en respectant la structure des répertoires correspondant aux packages des classes.
La compilation et la pré-vérification des sources se fait en utilisant l'option « Build » du menu « Project » ou en cliquant sur le bouton « Build ».
Si aucune erreur de compilation n'est détectée, il est possible d'exécuter le code en utilisant l'option « Run » du menu « Project » ou en cliquant sur le bouton « Run » de la barre d'outils.
Avant de lancer l'exécution, il est possible de sélectionner l'émulateur de périphérique (device) utilisé pour exécuter le code. Le J2ME Wireless Toolkit 2.1 est fourni avec quatre émulateurs :
L'option « Clean » du menu « Project » permet de faire du ménage dans les fichiers temporaires générés lors des différents traitements.
Le bouton « Clear console » permet d'effacer le contenu de la console.
L'option « Package » du menu « Project » propose deux options pour packager l'application une fois celle-ci mise au point :
|