Vodafone携帯電話上でのJavaプログラミング - Webサーバからの...
Transcript of Vodafone携帯電話上でのJavaプログラミング - Webサーバからの...
1
平成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という小規模ハードウェア環境での実行を前提としたコードを生成す
2
る.ちなみに,Standard Edition のJavaプログラムの実行環境であるJVMは,PCやワークステーション上で動作するよう実装されている. 一方,CLDC型Micro Edition のJavaプログラムの実行環境であるKVM(キロバイトJavaマシン)は,携帯電話の CPUなど極めて小規模ハードウェアに実装されることを前提としている.研究室での標準設定は,以下の図1~図5にコマンド群のプロパティ(3セット)と J2SDKおよびWTKを使用するための環境設定バッチファイルを示す.
図1 実行環境をショートカット形式で設定
図2 J2SDKのコンパイル&実行環境の設定 図3 Vappliのエミュレーション環境の設定
図4 J2SDK起動のバッチファイルの設定内容
3
図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以降を予めインストールしておくが必要と
4
なる.これは,エミュレータが Java(J2SE 用の Javaコード)で作成されていることが要因であり(この点は,i-アプリのエミュレータも同様),エミュレータ自体の実行にJ2SDKが必要となっている.インストール後にエミュレータを起動すると,以下のような2つのウィンドウが表示される.一方が制御用のコンソール画面(図5)であり,他方は携帯電話のGUIパネル画面(図7)となっている. 図6 制御用のコンソール画 図7 面携帯電話のGUIパネル画面 注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 javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.io.*;
import java.io.*;
//これらは処理に必要となるライブラリの明示的引用
5
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);
6
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を参照).
7
図8 JADファイルの内容の例示 3.3 エミュレータでの実行状況
JARファイルが作成されると,JADファイルと共に最終的にはWebサーバ(コンテンツアプリゲータ)へ掲載することになるが,まず,動作チェックという意味でもエミュレータ上で確認することが一般的であろう.ここでは,エミュレータでの動作確認手順について述べる.図9がエミュレータの制御用コンソール画面であり,図10(実際は3枚の図からなる)はエミュレータ上で動作するJARファイルの実行結果を表示している. 注2) コンテンツアプリゲータ: Vアプリ(Vodafoneで動くJavaアプリ)は個人レベルで勝手に公開できない.コンテンツアプリゲータという審査機関を通さなければならない.Webサービスなどを提供してくれる.
図9 制御用コンソール画面 図10 エミュレータでの実行画面(その1,その2,その3)
3.4 実機で動作確認 以下では,実機での動作確認を示す.本来,可能ならば,実機上で動作する画面などをスナップショットし,実行例として示したい.しかし,LCD の画面はディジタルカメラでの撮影などには向いていない(と思われる).そこで,前述のコンテンツアプリゲータへのアップロード手順および実機でのテストラン手順を可能な限る文書
8
で示す(最後に画面を携帯電話で撮影したものを示すが,画質は期待できない). ① 作成した,*.jar および *.jad ファイルをFTPサーバ :dev.javalive.jp にログインして,アップロードする.この際,ログイン名およびパスワードは以下の通り. ログイン用 ID:JC00000052 パスワード :!!naisho?? また,転送するサーバのフォルダは /download となる. ② 通常,Javaアプリのダウンロード用のHPを作成することになるがJ-Phoneの場合は「週刊ゲーム&アプリ Live 作者向けページ」なるWebサーバにアクセスし,以下のような作業を行うことで,サーバ側でHP部分を作成してくれることになる(但し,サーバ管理の都合上,掲載は短期間であり,実機でのテストが終了すると,自動的に削除されると考えておく方が無難) 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を参照).
9
図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
10
内容:携帯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日修正
(文責:今井慈郎)