...

Vodafone 携帯電話上でのJava プログラミング - stwww

by user

on
Category: Documents
7

views

Report

Comments

Transcript

Vodafone 携帯電話上でのJava プログラミング - stwww
平成16年3月17日オープンシステム研究会資料
Vodafone 携帯電話上での Java プログラミング
- Web サーバからの画像取得と LCD 上での表示・操作について 香川大学今井研究室 [email protected]
(Tel: 087-864-2244(FAX 自動切換え))
1.はじめに
Vodafone(旧 J-Phone)の携帯電話(J-SA51,090-2829-9999)を使用した JavaTM アプリ(以下,Vappli と略記)
の開発,実装および動作確認について報告する.今回の報告には,SUN マイクロシステムズ(以下,SUN マイク
ロ)から提供される Java2SE(J2SDK1.3.1,所謂 Java Standard Edition)および Java2MEforCLDC(WTK1.04,
所謂 Wireless Tool Kit)をダウンロードし,使用している.また,J-Phone(現 Vodafone)ホームページより
J-SkyJava アプリの実行エミュレータも同じくダウンロードし,使用している.
これにより,CLCD+MIDP(Connected Limited Device Configuration+Mobile Information Device Profile)
向けの Vappli を PC 上などで開発し,Vodefaone 携帯電話を利用して,インターネットおよび Vodafone 広域ネ
ットワークを介して Web サーバ上から JPEG 画像などを取得し,携帯電話の LCD 上に表示させるといった一
連の動作が可能となり,研究目的の1つである遠隔監視サービスが実現できることを(本研究室レベルでも)確認
できた.
2.JavaTM アプリ(Vappli)開発のための準備
詳細は,文末の参考文献などに詳しいが,ここでは,簡単に,JavaTM アプリ(Vappli)の開発,携帯電話端末
エミュレータでの実行確認などについて紹介する.
2.1 開発環境
J2SDK(SUN マイクロが提供する Standard Edition の Java プログラムを開発するためのプログラマーズキ
ット)および WTK(SUN マイクロが提供する携帯電話など CLDC 型 Micro Edition の Java プログラムを開発す
るためのプログラマーズキット)の取得は以下のサイトからダウンロードすることになる.まず,J2SDK は以下
のサイト
http://java.sun.com/j2se/1.3/ja/
を参照(現時点での最新版は J2SE1.4 以降なので, http://java.sun.com/j2se/1.4/ja/ への参照が推奨).
実は,エミュレータが完全に J2SDK1.4 以降に対応していない(特に,ドコモの i-アプリ関係)という情報があ
るため,本研究室では,現在でも 1.3 の後半を使用している.しかし,Vappli では 1.4 の使用はあまり問題にな
らないかもしれない(証明できるレベルまで使いこなしていないが:-).
次に,WTK は以下のサイト
http://java.sun.com/products/j2mewtoolkit/download.html
を参照(これも現時点では Wireless Tool Kit バージョン 2.0 以降が最新版であり,そちらへの移行が推奨れてい
る.次の URL
http://java.sun.com/products/j2mewtoolkit/
などを参照のこと).
準備段階では,この両者をダウンロードし,PC などの開発環境にインストールすることになる.役割分担は
以下の通り.J2SDK は,通常,Standard Edition の Java プログラム開発,すなわち,コンパイルと仮想 Java
マシン(ここでは JVM)による実行など含む,を担当する.一方,WTK も同じく,(CLDC+MIDP 型の)Micro
Edition の Java プログラム開発を担当する.しかし,多くの場合,前者が PC やワークステーションなどを実
行環境としているのに対し,
後者は CLDC という小規模ハードウェア環境での実行を前提としたコードを生成す
1
る.ちなみに,Standard Edition の Java プログラムの実行環境である JVM は,PC やワークステーション上
で動作するよう実装されている.
一方,CLDC 型 Micro Edition の Java プログラムの実行環境である KVM(キロバイト Java マシン)は,携帯電
話の CPU など極めて小規模ハードウェアに実装されることを前提としている.研究室での標準設定は,以下の
図1∼図5にコマンド群のプロパティ(3セット)と J2SDK および WTK を使用するための環境設定バッチファ
イルを示す.
図1 実行環境をショートカット形式で設定
図2 J2SDK のコンパイル&実行環境の設定
図3 Vappli のエミュレーション環境の設定
図4 J2SDK 起動のバッチファイルの設定内容
2
図5 WTK のコンパイル&実行環境の設定
2.2 エミュレータ環境
WTK で生成されたコードは,通常,
イ) JAR(Java ARchive)ファイルと呼ばれる,CLDC+MIDP 用の Java バイトコード
ロ) JAD(Java Application Description)ファイルと呼ばれ,
セキュリティ対策用の出生証明書(i アプリの JAM フ
ァイルに相当)
なる2本のファイルから構成される.
イ)については今更,説明を要しないが,ロ)は小規模ハードウェア上に実装する KVM に対し,JVM などと同
様のセキュリティ対策を講じるには,動作環境が厳しいので,そのための対策して,(チェック用に)使用される.
すなわち,KVM が動作するリアルタイム OS への情報提供(言わば微分証明書)として,イ)のセキュリティ対策
を担保する保証書として作成される.Web サーバなどに,イ)およびロ)を併せてアップロードすることになる.
そこにアクセスする携帯電話などが,Web サーバからイ)をダウンロードする際にロ)を確認文書として使用する.
生成されたコードをそのまま,Web サーバなどにアップロードし,最初から正常に動作する確率はあまり高く
ない.一般に,デバッグと呼ばれる作業は,パソコンなどの上でそのまま動作するソフトウェア開発と同様に,
皆無になるとは考えられない(もちろん,個人のプログラミング能力に大きく依存し程度の差は存在する).Java
の場合,様々な実行環境を有することが大きな特長となっている.しかし,ハードウェア規模は多岐にわたり,
総べて一律と考えて,1つの実行環境(すなわち,1つの仮想マシン)を提供するだけでは効率などの点でも意味
が無い.
事実,SUN マイクロでは,規模に応じた実行環境(VM,仮想マシン)として,規模の大きい順に,HotSpot(J2EE
対応),JVM(J2SE 対応)
,CVM(CDC 型 J2ME に対応),そして KVM(CLDC 型 J2ME に対応),カード上で
動作する CardVM(Java カード対応)など準備している(一部計画も含む).これは,実行環境が様々である証左と
なっている.
本報告書で扱う,携帯電話上で動作する Java プログラムは,CLDC 型 J2ME に対応した Java プログラムコ
ードであり,実行環境として KVM を前提としている.完全な上位互換であれば,JVM など実装されている
Windows パソコンなどでも動作すると言えるが,実情は異なる.そこで,携帯電話上の KVM とほぼ等価なエ
ミュレータ環境を PC などに用意し,デバッグや動作確認など行うことがプログラム開発上でも有効となる.以
下は,Vappli を実行させ,デバッグや動作確認などを行う,エミュレータのダウンロードサービスを Vodafone
が提供するホームページである.
http://www.dp.j-phone.com/dp/
エミュレータ本体をインストールする前に,
J2SDK バージョン 1.3 以降を予めインストールしておくが必要と
3
なる.これは,エミュレータが Java(J2SE 用の Java コード)で作成されていることが要因であり(この点は,iアプリのエミュレータも同様),エミュレータ自体の実行に J2SDK が必要となっている.インストール後にエミ
ュレータを起動すると,以下のような2つのウィンドウが表示される.一方が制御用のコンソール画面(図5)
であり,他方は携帯電話の GUI パネル画面(図7)となっている.
図7 面携帯電話の GUI パネル画面
図6 制御用のコンソール画
注 1) CVM とは何か
「CLDC 準拠の仮想マシンは、標準 Java 仮想マシン (JVM) 機能のサブセットに対してのみのサポートが必要とされ
ますが、CDC 準拠の仮想マシンは、標準 JVM との機能的な互換性が要求されます。すなわち、ネイティブ・メソッ
ドの呼び出しのサポートが必要な場合には、CDC JVM (または CVM) は JNI (Java Native Interface)1.1 への準拠が
必要となり、また、デバッグのサポートには、JVMDI (Java Virtual Machine Debugging Interface) への準拠、また、
プロファイルのサポートには、JVMPI (Java Virtual Machine Profiling Interface) への準拠が必要です。CDC に使用
する Java 仮想マシンである CVM は、CDC API のサポート以上の多くの興味深い機能を備えています。CVM は、携
帯性に優れ、ROM 化可能なクラスをサポートし、また高速スレッドの同期操作を可能とし、ネイティブ・スレッドを
サポートします。すなわち、CVM は、組み込みアプリケーションに多く見られるタイプのオペレーティング・システ
ムをサポートするように設計されています。
(<http://www-6.ibm.com/jp/developerworks/java/011019/j_j-j2me.html>からの引用)」
3.Vappli を用いた画像取得表示サービスの実現
Vappli用のJavaプログラムを示し,
コンパイルおよびJARファイル作成のためのバッチファイルを紹介する.
また,エミュレータでの実行状況を示し,実機である携帯電話(J-SA51,090-2829-9999)での動作を確認する.
3.1 画像取得表示サービスのための Java プログラム
プログラムソース全体は,別途参照として,処理の中心的記述のみ文末に示すが,キーとなる表記を中心に概
説する.
----「ソースコード」ここから
import
import
import
import
javax.microedition.lcdui.*;
javax.microedition.midlet.*;
javax.microedition.io.*;
java.io.*;
//これらは処理に必要となるライブラリの明示的引用
4
public class getImageFromWeb extends MIDlet {
public getImageFromWeb() {
getImageCanvas canvas = new getImageCanvas(getAppProperty("URL"));
Display.getDisplay(this).setCurrent(canvas);
}
}
//「public」クラス getImageFromWeb は MIDlet クラスの継承.以下の getImageCanvas を使用.
class getImageCanvas extends Canvas implements CommandListener {
//***中略***
getImageCanvas(String url) {// getImageCanvas メソッドの基本は url で示されるファイルの取得
//***中略***
image = readImage(url + "/BlueMosque01.jpg");
xWidth = image.getWidth();
yHeight = image.getHeight();
repaint();
// 携帯電話のキー設定(setCommandListener メソッドによりキー入力時に割込み処理)
soft1 = new Command("読込", Command.SCREEN,1);
addCommand(soft1);
setCommandListener(this);
}
//***中略***
private Image readImage(String url) { //HTTP 通信による画像ファイル取得メソッド
byte[] data;
HttpConnection c = null;
InputStream in = null;
try {//try ∼ catch 構文でネットワーク通信をガード
c =(HttpConnection)Connector.open(url);
in = c.openInputStream();
data = new byte[(int)c.getLength()];
for (int i = 0 ; i < data.length ; ++i)
data[i] = (byte)in.read();
in.close();
c.close();
return Image.createImage(data, 0, data.length);
} catch (Exception e) {
try {
if ( in != null ) in.close();
if ( c != null ) c.close();
} catch (Exception e2){ }
return null;
}
}
public void paint(Graphics g){ //カンバスクラス Canvas への書込み(LCD 表示)
g.setColor( BACKcolor );
g.fillRect(0, 0, sizX, sizY);
5
g.drawImage(image, x, y, g.TOP | g.LEFT);
}
public void commandAction(Command c, Displayable s) { //キー入力処理の実体
if ( c == soft1 ){
image = readImage(url + "/image.jpg");
if ( image == null ) info = "Errors happen!!";
xWidth = image.getWidth();
yHeight = image.getHeight();
repaint();
}
}
}
ここまで--あくまで,例示であるが,実際に動作を確認しており,これをベースに機能拡張も可能である.
3.2 JAR ファイル生成のためのバッチファイル
JAR ファイルを作成するには,コンパイル(Javac),チェック(preverify)およびアーカイブ(jar)の3つのプロセ
スを経ることになる.すなわち,まず,環境変数を以下のように設定した後,
set PROJECT=getImageFromWeb
set BASEDIR=C:¥usr¥bin¥J-PHONE-SDK
set PROJDIR=%BASEDIR%¥Project
上の3つの作業を順次,実行することになる.
① コンパイル過程では,
> javac -bootclasspath %BASEDIR%¥lib¥stubclasses.zip -d %PROJDIR%¥%PROJECT%¥classes *.java
これにより,class ファイルが生成される.
② チェック過程では,
> preverify -d %PROJDIR%¥%PROJECT%¥classes -classpath %BASEDIR%¥lib¥stubclasses.zip .
これにより,イ)で生成された class ファイルに対し,preverify を実施し,障害となるトラブルを低減する.
③ アーカイブ過程では,
> jar cmf MANIFEST.MF %PROJECT%.jar -C %PROJDIR%¥%PROJECT%¥classes . -C %PROJDIR%¥%PROJECT%¥res .
これにより,preverify されて(ある程度)事前チェックされた class ファイル(群),あるいはリソースとして準備し
た画像ファイルなどを1本の書庫ファイル(アーカイブファイル)にまとめ,ダウンロード時のオーバーヘッドを
低減させる.一部の機能としてコード圧縮なども試みられるようである.
通常は,①②③の過程を順次,実行するだけであるが,例えば,①で文法エラーが発生しても,③のアーカイ
ブ過程まで毎回処理が進むのを眺めるのも効率が良いとは言えないので,(技術評論社「JAVA PRESS Vol.25」
http://www.gihyo.co.jp/magazines/javapress/contents/Vol25 )を参考に簡単なバッチファイルを作成すること
は有効な手法と言える.これにより,エラー発生時には,作業を打ち切り,再度,ソースコードレベルのデバッ
グを行うことも可能となる.
ちなみに,アーカイブ過程で用いるマニフェストファイル(MANIFEST.MF)とは,JAR パッケージ内容を定義
したファイルであり,JAR ファイル自体のセキュリティと構成情報などが記載されている.また,JAR ファイ
ルと共に Web サーバ上へ転送するファイルとして,JAD ファイルの作成が必要となるが,今回は次のような内
容となる(図8を参照)
.
6
図8 JAD ファイルの内容の例示
3.3 エミュレータでの実行状況
JAR ファイルが作成されると,JAD ファイルと共に最終的には Web サーバ(コンテンツアプリゲータ)へ掲載
することになるが,まず,動作チェックという意味でもエミュレータ上で確認することが一般的であろう.ここ
では,エミュレータでの動作確認手順について述べる.図9がエミュレータの制御用コンソール画面であり,図
10(実際は3枚の図からなる)はエミュレータ上で動作する JAR ファイルの実行結果を表示している.
注 2) コンテンツアプリゲータ: V アプリ(Vodafone で動く Java アプリ)は個人レベルで勝手に公開できない.
コンテンツアプリゲータという審査機関を通さなければならない.Web サービスなどを提供してくれる.
図9 制御用コンソール画面
図10 エミュレータでの実行画面(その1,その2,その3)
3.4 実機で動作確認
以下では,実機での動作確認を示す.本来,可能ならば,実機上で動作する画面などをスナップショットし,
実行例として示したい.しかし,LCD の画面はディジタルカメラでの撮影などには向いていない(と思われる).
そこで,前述のコンテンツアプリゲータへのアップロード手順および実機でのテストラン手順を可能な限る文書
7
で示す(最後に画面を携帯電話で撮影したものを示すが,画質は期待できない)
.
① 作成した,*.jar および *.jad ファイルをFTPサーバ :dev.javalive.jp にログインして,アップ
ロードする.この際,ログイン名およびパスワードは以下の通り.
ログイン用 ID:JC00000052
パスワード :!!naisho??
また,転送するサーバのフォルダは /download となる.
② 通常,Java アプリのダウンロード用のHPを作成することになるがJ−Phoneの場合は「週刊ゲーム&
アプリ Live 作者向けページ」なるWebサーバにアクセスし,以下のような作業を行うことで,サーバ側でH
P部分を作成してくれることになる(但し,サーバ管理の都合上,掲載は短期間であり,実機でのテストが終了す
ると,自動的に削除されると考えておく方が無難)
http://dev.javalive.jp/
にブラウザ(Netscape or IE)でアクセス.
③ 上記のHPの左側メニューに「登録作者用ページへ」なるボタンがあり,これをクリックすることで,一連の
作業を開始.IDとパスワードの認証に対し,
ログイン用 ID:JC00000052
パスワード :!!naisho??
を入力(これは,FTP サーバにログインする時のそれと同じ値)
④ ログイン後,左側メニューに「ダウンロード通知」というボタンをクリック先ほど,FTPサーバにアップロ
ードした JAD ファイルを指示(テキストフィールドに記載)して,
「次へ」ボタンをクリック
⑤ Webサーバ側で確認後,画面が変わり(JAD ファイルの確認表示があり),作成した Java アプリをダウンロ
ードし,テストする実機のメイルアドレスを記載するテキストフィールドが現われる.これに,
[email protected] (旧 J-Phone) => [email protected](現 Vodafone)
なるアドレスを記載して,送信ボタンをクリック
⑥ コンテンツアグリゲータ(「週刊ゲーム&アプリ Live」) から,携帯電話
(メイルアドレス:[email protected] => [email protected])に
----ダウンロード用 URL は
http://dev.javalive.jp/jp-dev/servlet/Service.DebugDownload.Top?GO=JC00000052/Anime.jad
です。
ID: JC00000052
PW: !!naisho??
でログインしてください。
Get Image(PNG) from Server ← これは「メッセージ」テキストフィールドの記載
-----なるメイルが届く.
⑧ 上記のURLに携帯電話のブラウザでアクセスすると,IDとPWを照会される.これに上記の通りのIDと
PWを答えると,アクセスが許可され,JAD ファイルの内容が確認された後,Java アプリ(JAR ファイル)のダ
ウンロードが開始され,メモリに保存後,実行される.
以下に,実機での実行画面を示す.ディジタルタメラでの撮影は焦点距離などの問題で,あきらめる.代わり
に,カメラ付携帯電話で香川大学工学部4年生の大賀誠君(今井研究室)に撮影してもらった.雰囲気のみの画
面となっているが,実機の実行は別途,実機での動作を参照のこと.1つ目の画面は Vappli 起動時のメニュー画
面.後半2つの画面は,前述のエミュレータ画面に対応.どちらも実際はもう少し判別し易い LCD 画面となっ
ている(図11を参照)
.
8
図11 実機での実行画面(その1,その2,その3;その2およびその3はエミュレータ画面と本質的に同じ)
4.おわりに
既に,i-mode Java プログラミング(i アプリ)で実現できている機能をほぼ,Vodafone の携帯電話上で Vappli
としても実現できることを示した.また,これらのプログラム開発を行うための環境設定などについても言及し
た.基本的には au などの他の携帯電話上でも同様の作業は可能であろうと思われる.
特に,MIDlet という概念は Vodafone および au で共通となっており,その点は i アプリと比較すれば,移行
措置は容易と思われる.但し,実際に作業する場合,思わぬトラブルに直面することも覚悟すべきだろう.
より複雑な Vappli を作成し,機能面での充実も図りたいと思っている.例えば,遠隔監視がある程度実現でき
れば,遠隔制御にも挑戦したい.また,可能な限り,i アプリと共通化できる部分を増やし,機能的にも互換性
を向上させたい.現状の問題点は,通信速度である.詳細を理解していないが,FOMA などの携帯電話端末と比
較した場合,その通信速度の差はアプリ自体の成否を左右しかねないのも事実である.高速通信を求める場合,
現状では,機種依存は避けられない条件かもしれない.
謝辞:J−フォン株式会社(現,ボーダフォン株式会社)法人営業部課長 斎藤義夫氏,同主任 高島英仁氏のお
二人には様々な形でお世話になった.書面をかりて謝意を表したい.また,本研究のきっかけを与えていただい
た J−フォン株式会社コールセンター長 豊島様にも改めて御礼を申し上げたい.
最後に参考文献などを挙げて今後の利用の便宜を図りたい.
参考文献
1)MIDP 工房のホームページ
MIDP(Mobile Information Device Profile)に関する,
従って現時点では Vodafone(J-Phone)および au に関する,
様々な情報を網羅したサイト.サンプルソースも掲載され,お勧め.
http://www.saturn.dti.ne.jp/~npaka/kvm/midp/
2)書名:図解最新テクノロジー 携帯Java
著者等:橋本 賢一 出版社:ナツメ社 (2002-12-31 出版) 価格(税抜) 1,800 円 ISBN:4816333371
内容:なぜ携帯電話にJavaが必要とされたのか、Javaと携帯電話が結びつくとどんなメリットが生じる
のか、Webサイト作成者にも作成できるのか、どのようなスキルが必要なのか、どういうサービスが可能なの
かといった疑問について、解説したものである。
第1章 携帯電話とJava(携帯電話とJava;第3世代携帯電話 ほか)
第2章 携帯Javaの仕組み(Javaについて理解しよう;携帯Javaへの道 ほか)
第3章 携帯Javaの特徴(携帯電話のOSとJava;携帯電話向けJavaと、日本のキャリア)
第4章 携帯Javaの詳細(携帯Javaの技術)
第5章 携帯Javaの展望(第2世代までと、第3世代以降;Javaが広げていく携帯電話の世界 ほか)
3)書名:J2ME ワイヤレス Java プログラミング
著者等:フェン ユ (著), シュ シュン (著), Feng Yu (原著), Zhu Jun (原著), 鷺谷 好輝 (翻訳), ゼンテックテク
ノロジージャパン (翻訳) 発行所等:シリーズ ASCII BOOKS 発売日 2002/05/09 価格(税抜) 3,800 円
ISBN 4-7561-4078-5
9
内容:携帯 Java のスタンダード「J2ME/MIDP」の基礎と主要 API を豊富なプログラム事例と実用的なアプリ
でていねいに解説。au、J-Phone の Java 携帯電話向けアプリの開発に携わる方、必読の 1 冊!
http://www.ascii.co.jp/books/detail/4-7561/4-7561-4078-5.html
4)書名:Java2ME MIDP ゲームクリエーターズガイド J-PHONE KDDI 完全対応
著者:米川英樹 著 出版社:技術評論社 ISBN4-7741-1470-7 / 2002 年 5 月 7 日発売 価格(税抜) 3,580 円
内容:Java MIDP によるゲームアプリケーション開発指南書です.開発環境から J-PHONE,KDDI の独自仕
様までしっかりフォローしています.作り応えたっぷりのゲームアプリで MIDP の世界に浸ってください.Java
中級者の方を対象としています.
http://www.gihyo.co.jp/books/syoseki.php/4-7741-1470-7
5)その他,役立ったホームページ
http://sparrow.math.ryukoku.ac.jp/~hig/mobilejava/
http://www.mech.t.u-tokyo.ac.jp/~mori/exercises/03mecha/misc/livecamj.html
http://dev.javalive.jp/
http://dev.javalive.jp/ml-archive/
http://k-tai.impress.co.jp/cda/article/news_toppage/15835.html
http://www-6.ibm.com/jp/developerworks/java/011019/j_j-j2me.html
平成16年3月14日作成
平成16年5月27日修正
(文責:今井慈郎)
10
Fly UP