Java(TM)アプリ、はじめのいっぽ


Last Updated 2005.4.8


Java(TM)アプリ、はじめのいっぽ

(はじめに)

2002年2月18日にJ-PHONEより、JAVAアプリのSDK,エミュレータが公開されました。
実機で動くかどうかはわからないのですけど、MIDPアプリがもともとあり、エミュレータでは、
ほとんどいじらずに動きましたので、その手順を書こうと思います。

※2003.10.1よりJ-PHONEよりVodafoneに社名変更(吸収合併?)したため、
 名称が「Java(TM)アプリ」から「Vアプリ」に変更になりました。
 ですので、本文中のJava(TM)アプリは、Vアプリに読み替えてください。

・・・Jアプリ★ゲットにアップしたんですけど、どうなることやら(^^;)(2002.3.10)
   どうにか動いているようです(^^;)(2002.3.17)

すでにサンプルソースなどが出ているようなので、紹介しておきます。
↓です。
KVMゲームプログラミング(ん・ぱかさん)
あと、一通りの手順が書いてあるサイトがありましたので紹介します。
こっちのほうが、素直でいいかも。
Java[TM]アプリ開発講座
クールスキーヤーズサポートページ
(1)まずはファイルをダウンロード
(2)インストールしよっ
(3)コンパイル〜
(4)エミュレーション
(5)アップロード
(6)なんとか動いているよう(2002.3.17)
(7)リバースエンジニアリング(2002.3.17)
(8)いろいろと(2002.4.6)
(9)なんだかな(2002.5.4)
(10)Java(TM)アプリキャンペーン終了(2002.5.19)
(11)Java(TM)アプリキャンペーン参加賞(2002.6.23)
(12)ステーションで落ちる?(2002.8.4)
(13)絵文字を使う(マニュアルどおり)(2002.8.14)
(14)SA51の不具合(2003.7.20)
(15)日本語アプリ名を使いたい(2003.8.16)
(16)Vアプリに変更&0x機種対応(2003.10.5)
(17)0x機種対応でトラブル(^^;)(2003.11.3)
(18)高精細モードで使いたい(2003.12.7)
(19)とりあえず待受アプリ(2004.3.14)
(20)メール関連(2004.4.18)
(21)データフォルダ書込の罠(2004.4.18)
(22)Security Exception(2004.4.30)
(23)PNG保存の罠(2004.5.2)
(24)無限ループ for JSCL1.2(2004.5.4)
(25)色、ホワイトブレンド(謎)(2004.10.24)
(26)JSCL 1.22 SDK(2005.4.8)

(1)まずはダウンロード(2002/3/10)
まずは、開発環境をダウンロードしないといけません。
ひとまず、必要なものは、

1)Java2 Standard Edition
http://java.sun.com/j2se/
2)Java2 Micro Edition(J2ME) Wireless Toolkit(日本語版)
http://java.sun.com/products/j2metoolkit/ja_download.html
3)J-SKY Application Emulator,ユーザーズガイド
http://www.dp.j-phone.com/cgi-bin/down.cgi?category=j-phone_java&java_mode=tool
4)Java(TM)アプリ技術資料
http://www.dp.j-phone.com/cgi-bin/down.cgi?category=j-phone_java&java_mode=tec
5)KJX作成ツール(にやり)
http://www.au.kddi.com/ezfactory/tec/spec/ezplus_kit.html
です。
6)その他の情報(J-PHONE Developer Program)
http://www.dp-j-phone.com/top1.html
今回の開発環境構築では、「KJX作成ツールを流用して、お手軽にJ-PHONEのJavaアプリを作ってしまおう」
というのが目的ですので、ezplusを開発してない方は、J2ME Wireless Toolkitを流用した方法のほうが
便利かもしれません。
(2)インストールしよっ(2002/3/10)
(1)で、あらいざらいダウンロードしてきたら、インストールをします。
順番的には、

1)J2SE
2)J2ME Wireless Toolkit
3)KJX作成ツール
4)J-SKY Application Emulator

です。
1),2)は何も考えずにインストール出来るかと思います。
3)は、「ezplusことはじめ」を参照してください。
4)は、インストーラにおまかせといったところですね(にやり)

なお、くれぐれも、J2SE,J2ME Wireless Toolkit,KJX作成ツールは、「デフォルトディレクトリ(フォルダ)」に
インストールするようにしましょう。
変に変えてしまうと、KJX作成ツールのドキュメント(PDFファイルになってる)を読みながら、設定するとき、
けっこう面倒なので。
(3)コンパイル〜
環境も整ったことだし、コンパイルします。
最初に書いたサンプルなどを入手して、コンパイルします。
なお、インストールしただけでは、コンパイルできないので、以下に手順を書きます。
ezplusが開発できるような状況にしてから(すでに出来てる方は、楽勝ですね(^^))
以下のような手順を踏みます。

1)J-SKYエミュレータのフォルダ内に入っているstubclasses.zipを展開

stubclasses.zipは圧縮されているため、kjx作成ツールのpreverify時になぜかエラーになります。
一旦展開し、再度「非圧縮zip」として圧縮します。
なお、「非圧縮zip」の作り方(+lhaca編)は以下のようにします。

a)+lhacaのアイコンを[SHIFT]を押しながらダブルクリックする。
 これで、+lhacaの詳細ウィンドウが出てきます。
b)[表示(V)]-[上級者用設定(U)]にて、ダイアログを出す。
  上級者用オプションダイアログを出し、ZIPの圧縮レベルを「0」にし、[OK]を押す。
c)ウィンドウを閉じ、次に、+lhacaのアイコンをそのままダブルクリックする。
  +lhacaの通常のダイアログが出てくるので、「圧縮形式」をzipにします。
d)あとは、stubclasses.zipを展開したファイル(フォルダ付)を+lhacaにDrag&Dropし、
 ディレクトリ付圧縮(圧縮率0)すれば、preverifyが出来るstubclasses.zipが出来ます。

(2003.8.3追記)
現在のJ-SKYエミュレータの場合(もしくは、上記の方法でエラーが出る場合)は、
上記の方法を取らず、そのままのstubclasses.zipを使ってください。
(shuさんの情報より)

2)kjx作成ツールを起動

a)kjx作成ツールを起動し、[tool]-[defaulte env..]をクリックします。
b)[build]ボタンを押し、「classes path...」項目に、「;C:\J-PHONE-SDK\test\stubclasses.zip」
 を追加します。
  ・・・なお、1)のd)で作ったstubclasses.zipをC:\J-PHONE-SDK\test\に入れているとします。

これで、一通りの設定は完了です。
あとは、kjxをコンパイルするのと同様にコンパイルできます。
#JSCLを使ったものもコンパイルできます。
 なお、JADでJ-PHONE特有のものがある場合、後で手修正する必要があります。

(補足)
なお、J2ME WirelessToolkitを、コンパイル環境として使う場合は、
JSCLのライブラリ(stubclasses.zip)を解凍、CLDCライブラリも解凍して、2つを統合し
上記の「非圧縮zip」で圧縮すれば使えるそうです。

(4)エミュレーション(2002/3/10)
無事コンパイルも終わりました。
ということで、エミュレーションを行います。
素直に、エミュレータを起動し、JADファイルを読み込めば、実行したいMidlet一覧が
出てきますので、それを選択すれば動きます。
JAD,JARに問題があれば、読み込み時にエラー表示が出ます。
(5)アップロード(2002/3/10)
エミュレーションも終わったので、アップロードします。
J-PHONEは、コンテンツアグリゲータなるところでしか公開できないので(--;)、
そこで、公開することになります。
私の場合は、Jアプリ★ゲットにアップしました。
なにせ、バンダイの方は、お題が決められてますからねぇ(^^;;;;)

なお、作者登録をすれば、テスト環境はもらえるようですので、実機を持っている人は、
審査を受ける前に、思う存分テストは出来るようです。
ただし、パケ代はかかりますけど(^^;;;)

・・・なお、私は、実機持ってないので、テストせずにGo!です。
さてはて、動くのかどうか(^^;;)

話は変わりますけど、外部にデータをやりとりするアプリは作れないようです。
メール、http通信を使う場合は、有料で作者登録を行わないとNGだそうです。
また、メール、http通信,位置情報を併用したアプリ(たとえば、位置情報をhttp通信で
サーバーに流し込むなど)は、有料の作者登録をしても作れないとのことです。
ということは、私の作っている「GPS位置情報取得アプリ」の「位置メール機能」
は、どう転んでも作れないことになります(^^;;)

(6)なんとか動いているよう(2002/3/17)
Jアプリ★ゲットより連絡があり、簡単な動作確認ではOKだったようです。
(なので、動作確認部分は「△」になってます。)
実機がないのでこれは仕方ないですね。
ひとまず、上記の環境でも、実機で動くことが確認できたのでよしとしましょう。
※ただし、MIDPのみのアプリ。JSCL(J-PHONE Specific Class Libraries)は今回、
 一切使ってません(^^;)

(7)リバースエンジニアリング(2002/3/17)
Jアプリ★ゲットの約款の中に、「チェックするための最低限のリバースエンジニアリングは
行いますので・・・」なるものが書いてありました。
おそらく、禁止しているライブラリ使用のチェックをしてるんでしょうけどねぇ。
なんとなく、嫌かも。
(8)いろいろと(2002/4/6)
Jアプリ★ゲットのテスト環境を使えば、公開出来ないものでも動かせるそうな。
誰か実機持ってる人で、協力してくれる人いないかなぁ。

話は変わってちょっと前、Jアプリ★ゲットの「今週のオススメJava(TM)アプリ」に
掲載されました。
掲示板にも書いてたんですけど、理由はおそらく「数が少ないから」でしょうね(^^;)
先ほどちょこっと見たところ、ここのところだいぶアプリが増えているようです。

あと、ついでにJavaアプリキャンペーンの関係でZdNetにも掲載という形に(^^;)
http://www.zdnet.co.jp/mobile/0203/27/n_java.html

うれしいような、みょーな感じです。
(9)なんだかな(2002/5/4)
H.N.河童さんのアプリをひょんなことでezplus/Java(TM)アプリに移植することになり、
移植後、Jアプリ★ゲットにアップしたのですが、「動作確認機種項目にチェックが入ってないので
審査を見合わせる」なるメールが。
「実機がないから動作確認機種項目にチェックが入れられんのじゃないかい!」と言うのを
やんわりと返信しておきましたが、返事はなしのつぶて。
ふらっとタイルの場合は、公開されたんですけどねぇ。
これから公開される方、実機を持ってない(もしくは借りることが出来る環境にない)と、
つらいみたいです。

(10)Java(TM)アプリ登録キャンペーン終了(2002/5/19)
アプリ★ゲットで行われていたJava(TM)アプリ登録キャンペーンは5/15で
終わりました。
一応、3作品ほど出しましたけど・・・、全部MIDP互換。
まんま、ezplus用のを流用しました(^^;)
(11)Java(TM)アプリ登録キャンペーン参加賞(2002/6/23)
アプリ★ゲットで行われていたJava(TM)アプリ登録キャンペーン、最優秀は「ほしふるよぞら」
だったそうな。賞金30万円・・・すごいなぁ。
で、私のほうは、参加賞で、Jアプリゲット特製マグカップと、図書カード3枚(アプリ3つ)
ま、こんなものでしょう。
(12)ステーションで落ちる?(2002/8/4)
久しぶりの更新(^^;)
最近は、面白いiアプリを、ezplusに移植し、その後J-PHONEに移植(というか、そのまま使えるし(^^;;))
ということをしているのですが、アプリ動作モニターになってくれた人に動作確認を依頼したところ、
とあるアプリのみ「ステーションが入ってきたら落ちる(T_T)」という報告がありました。
電話やステーションによる中断は想定してなかったので、全部で落ちるものだと思ってたんですけど、
特定のアプリのみがステーションによる中断で落ちるようです。
ということで、他のアプリと落ちるアプリとを比較したところ

落ちるアプリは、コンストラクタではなく

	protected void startApp() {
	}

内に初期化処理(それも再度通ると確実に落ちるような)をしていたため(^^;)、
ステーションが来た後、再度ここを通るため、例外が発生していたようです(^^;)
#なんか、初心者のしそうな失敗してるし(^^;)>私

とりあえず、ここを修正したら、問題なく動いているとの報告を受けました(^^)
やれやれ。

あ、J-PHONEのJava開発方法書いてあるサイトがありましたので紹介しておきます。
各機種の情報(フォント・メモリサイズなど)も書いてあるので、便利かと思われます。

http://bu-nyan.m.to/j-phone/program_j_java.htm

です。

(13)絵文字を使う(マニュアルどおり)(2002/8/14)
マニュアル(j_java_dg115.pdf)内に、絵文字の使い方が書いてあったのでそのまま書きます(^^;)

char[] emojiArray1 = {0xE001,0xE002};
String emojiString1= new String(emojiArray1);

で emojiString1を使えばいいらしいです。

(14)SA51の不具合(2003/7/20)
以前、SFCaveにて「SA51で動かない〜」との報告があり、アプリの修正をして
テストダウンロードしてもらったのですが、その後、なしのつぶてで(--;)
直ってるんだか直ってないんだかわからなかったのですが、今回、妙にSFCaveの
順位が伸びて、再度「SA51で動かない〜」報告(別の人から)がありました。
んで、以前修正したアプリをテストダウンロードしてもらったところ、正常に
動いたそうです(^^)

で、どこがおかしかったかと言いますと、
通常版のSFCaveは、

1)offImageというバッファイメージデータを作成し、

   offImage = Image.createImage( screenWidth, screenHeight );
   graOff = offImage.getGraphics();

2)スクロール時に、

   graOff.drawImage(offImage, -4, 0, 20);

  のように、自分自身(offImage)に自分自身を「座標を-4ずらして」drawImageしていた。

のですが(高速化のため)、どうもSA51は、この転送方法だとNGらしいです。
なので、以下の方法で、回避しました。

1)offImageとは、別のバッファイメージデータを作成

  //なにげに追加-------------
  offImage2 = Image.createImage(screenWidth+2, screenHeight);
  offGraphics2 = offImage2.getGraphics();
  //------------------------

2)スクロール部分を以下のように変更

  //変更
  //graOff.drawImage(offImage, -4, 0, 20);
  offGraphics2.drawImage(offImage,0,0,Graphics.TOP|Graphics.LEFT);//データを取得
  graOff.drawImage(offImage2,-4,0,Graphics.TOP|Graphics.LEFT);


なお、この方法を取ると、どうしても速度が遅くなりがちなので、SA51だけ別版でリリースする予定。
(現在申請中)・・・申請通りました(^^)V
(15)日本語アプリ名を使いたい(2003/8/16)
ezplusと、Java(TM)アプリを両方作っておられる方はよくご存知かと思いますけど、
kjx作成ツールでは、「S-JIS」が使用可能。それに対し、Java(TM)アプリで使用可能なのは
UTF-8だったりして、共通化できなかったりします。
(なので、私は、いつもタイトルは半角アルファベットだったりするのですが(^^;))
共通化は無視して(^^;)、Java(TM)アプリのみ開発するということを前提にして、
日本語アプリ名を使えるようにする方法を、shuさんが教えてくれましたので、
ここで紹介しておきます。

(Windows2000/XPの場合)

1.メモ帳を開き、日本語のアプリ名を入力(最後の文字はアルファベット(JとかVとか)にすること)
2.文字コードをUTF-8にし、保存する。
3.UTF-8に対応していないエディタでファイルを開くと、文字化けした文字列が表示されるので
 それをコピー(クリップボードへ転送)する。

 ※UTF非対応エディタは、
  http://www.vector.co.jp/vpack/filearea/win/writing/edit/index.html
  ここから適当に探してみてください(^^;)

4.kjx作成ツールの「Environment Edit Dialog」画面に貼り付ける。(*****部分)
  MIDlet-Name:*****
  MIDlet-1:*****,,%PROJ%

(Windows95/98/Me(?)の場合)
1.UTF-8対応エディタ(以下のURLにあるものなど)を使い、

http://www.mirai.ne.jp/~gyo/xyzzy/xyzzy-list.html
http://www2s.biglobe.ne.jp/~t-susumu/toclip/library/tpad.html

日本語のアプリ名を入力(最後の文字はアルファベット(JとかVとか)にすること)

2.文字コードをUTF-8にし、保存する。
3.UTF-8に対応していないエディタ(メモ帳(^^;;))でファイルを開くと、
 文字化けした文字列が表示されるので、それをコピー(クリップボードへ転送)する。

4.kjx作成ツールの「Environment Edit Dialog」画面に貼り付ける。(*****部分)
  MIDlet-Name:*****
  MIDlet-1:*****,,%PROJ%

(追記)
UTF-8の漢字に関しては、文字によっては改行コードが混ざったりうまくいかないので、試行錯誤して
試してみる必要があります。

 ※(補足)J-PHONEの開発マニュアルP49,P53によると、「MIDlet-Nameは\u0020〜\u007Fの範囲の
  印字文字にて記載のこと」と書いてあるため、MIDlet-Nameは、いわゆる半角英数字じゃないと
  だめかもしれません。
 なお、ezアプリ(Java)では、MIDlet-Nameが表示されるアプリ名になるからなぁ・・・。ふみゅ。
  Jの場合、1つのJARで、複数のMIDletを持てたはずなので、その関係で、もしかすると、
 MIDlet-1の名称のほうが優先されるのかも。
 ということで、実機ないので、MIDlet-NameとMIDlet-1を別の名前にして(しても問題ないはず)
 どちらが実機の表示になるか、試してもらえませんか?>ALL

(16)Vアプリに変更&0x機種対応(2003/10/5)
2003.10.1より、0xの機種のアプリも、一般作者が作成可能になりました。
ということで、さっそくエミュレータをダウンロードすることに。
エミュレータをダウンロードして、今まで作ってきたアプリをロードすると・・・
何の変更もなく、動きました(^^;) ある意味拍子抜け。
ま、MIDP互換で作ってるので、当たり前なのかもしれませんけど(^^;)

エミュでの動作確認が終わったら、あとは、実機確認。
ひとまず、アプリゲットV!のほうで、ダウンロード通知をして、有志の方に
動作依頼をすることに。

で、今までのダウンロード通知とはちと違う。
(なお、週刊ゲーム&アプリLiveは、そのまま引き継いでいるのでやり方は同じ)
違うところを書くと、

1)アプリゲットV!でftp可能なエリアは、
 「ホームページスペース」と「Vアプリ専用スペース」の2つがある。

 アプリを実験するときは、Vアプリ専用のスペースにftpする必要があります。
 間違って、ホームページスペースにアップしても(って出来るのか?)、
 ダウンロードが出来ません(^^;)

2)あらかじめ、ダウンロード通知設定で「メール送信する」としておいてから、
 ftpにてVアプリ専用スペースにアップロードしないと、実際のURLがわからない。

 ftpで転送すると、初めて、ダウンロード用htmlファイルが生成するようなシステムに
 なっているようで、上記の「メール送信する」を忘れると、アップロードしたはいいけれど、
 どのURLからダウンロードすればいいかわからない状態になります。

と、こんなところです。
いろいろと試行錯誤の後、有志の方にダウンロードしていただき、無事に全アプリの
動作確認が取れました(^^)V
とりあえず、現在は審査待ちの状態です。

(おまけ)
アプリゲットVは、作者情報変更も、なぜか審査があるという謎な仕様です。
あと、オフィシャル作者登録にて、「申込書は”オフィシャル作者登録”にてダウンロードできます」
と書いていながら、どこにも申込書がないのは気のせいでしょうか(^^;;;)

(おまけ2)
週刊ゲーム&アプリLiveの場合、C4型(0x系)とP4型(5x系)のアプリは完全に別に用意しないと
だめな仕様になっているようです。
アプリゲットVのほうは、サイト側で自動的に振り分けをしてくれるようで、1つのアプリで
C4,P4を同時にチェックできるような仕様になっています。
ということで、MIDP互換でアプリを作っている人は、アプリゲットVのほうが楽ですね。
(17)0x機種対応でトラブル(^^;)(2003.11.3)
(16)で、0x機種の審査待ちの状態だったわけですけど、SFCaveが公開され、その後、
なぜか0x機種では動かないとのメールが。

テスト用スペースでは、動作確認は取れていたのですけど、もともと5x用としてアップしていた
アプリと全く同じファイルだったので、0x対応に関しては、情報変更のみで処理していました。

で、結果は、0x機種では動かない、と(?_?)

そこで、「jad/jarファイルは、もともと5x用としてアップしていたファイル同じもののはず」
の前提が本当なのかどうかを確認する必要があったので、「なぜか」テスト用スペースに残っていた
5x用のアプリをftpでダウンロードしてみました。

この中のjadファイルを見ると、見慣れない記述が。

;-------------------------------------------
MIDlet-Code: Y
MIDlet-Jar-URL: http://jp-dev.appget.com/********/dltest/JA00000380/CaveMan.jar
;-------------------------------------------

MIDlet-Jar-URLに関しては、おそらく問題はないと思われるんですが、
(****部分は伏字)

MIDlet-Code: Y

に関しては、どうも5x特有の何かがあるような雰囲気です。
とにもかくにも、動作しないものは仕方がないので、正常に動いたアプリを「再度」
アップロードして、再審査依頼をしました。
→これでとりあえずは0xでも、動くようになったようです。

この時の「動かないメール」の多かったこと(>_<) まるで私が悪者のような・・。
いつも思うのですけど、ほんと携帯ユーザって「自分中心主義」の人が多くて困ります。はぁ。
おそらく、こういうユーザーのおかげで、アプリを作る気力がうせる方も多いのでは。
「今日の失礼なメールコーナー」を作りたくなるぐらい、「まともじゃない」メールが多いです。
※ezのページにメールアドレスを載せなくなったのは、その関係だったりします。
最低限、「はじめまして。〜と申します。(以下本文)・・・」ぐらい書けよ、と思うんですけどね。
「他人」にメールを出しているという感覚がないんでしょうか。
まだ、掲示板なら、わからなくもないんですけど。
(18)高精細モードで使いたい(2003.12.7)
J-SH53のようなQVGA機種の場合、Vアプリの画面が
デフォルトだと自動的に拡大されるようです。
それを「高精細モード(そのまんまの解像度)」で
使いたい場合は、JAD内に以下の項目を追加します。

------------------------------
MIDlet-Application-Range: 0,0
------------------------------

※ボーダフォンライブ!向けVアプリ開発ガイド
[概要編]Page85より引用
(19)とりあえず待受アプリ(2004.3.14)
待受アプリを作る機会がありましたので、いろいろと調べていたんですが、
5x系の待受アプリは、ん・ぱかさんの

http://www.saturn.dti.ne.jp/~npaka/kvm/javapress/javapress.html

内の、「第13回:J-PHONEで動く3D待ち受けアプリを作る」で、紹介されて
いたので、難なく作ることが出来ました。

注意すべき点は、*.jad内に

MIDlet-Resident: Y

(P5型の場合)
MIDlet-Resident: S

を記述する必要があることです。
あと、

(C4,P4,P5共用)
MIDlet-OCL: JOCL-1.0.0
MIDlet-OCL: JSCL-1.0.1

(P4専用)
MIDlet-OCL: JSCL-1.1.0
MIDlet-OCL: JSCL-1.1.1

(P5専用)
MIDlet-OCL: JSCL-1.2.0
MIDlet-OCL: JSCL-1.2.1

がいるかも(^^;)(※1)

で、0x系ですが、ひとまず以下のようにしたら、なんとなく動いている
ようです。

とりあえず、キャンバスクラスを作っておいて、
以下のようにしました。

//===================================================

//---jscl1.0使用--------
import com.j_phone.system.*;
//----------------------

public class MSnowDayCanvas extends Canvas
    implements ScheduledAlarmListener,TelephonyListener,
    MailListener,Runnable
{

	//-------中略----------
   public MSnowDayCanvas(MSnowDayC4 midlet)
    {
		//-------中略----------

        //イベントマネージャの設定
		DeviceControl.setMailListener(this);
		DeviceControl.setScheduledAlarmListener(this);
		DeviceControl.setTelephonyListener(this);
	}

	//メール受信
	public void received(String name,String address,int detail){
		//name:送信してきた人の名前
		//address メールアドレス
		//detail:SMSの詳細

		sName=name;
		sAdr=address;

		switch(detail){
		case SKYMAIL:
			break;
		case RELAY:
			break;
		case GREETING:
			break;
		case LONGMAIL:
			break;
		case WEB:
			break;
		case CBS_DEFINE:
			break;
		case CBS_PL:
			break;
		}
	}

	//アラームリスナ
	public void notice(String comment){
		//comment:コメント
		sAdr=comment;
	}

	//テレフォニーリスナ
	public void ignored(){
		//電話が切れたときに呼び出される
	}

	public void ring(String name,String number){
		//電話がかかってきたときに呼び出される
		//name:名前
		//number:電話番号
		sName=name;
		sAdr=number;

	}

	//-------中略----------
	//あとは、Threadループでrepaintしていって、
	//呼び出し条件に応じて、Canvasに描画していけば待受
	//になります。
	//ただし、Thread使うと、バッテリ消費が速そうなので、
	//TimerTask使ったほうがいいかも。

}
//===================================================

(おまけ1)スパイシードッグビルダーでも待受アプリ作れるらしいんですが、
 jadはどうなってるんでしょうね(^^;)

(おまけ2)そうそう、「ボーダフォンライブ!向けVアプリ開発ガイド[概要編]」のP86に
「ResidentMIDletクラスを使用して必ず待ち受けアプリを作成しなければならないわけではない」
とあるので、jadの記述のみでも待受になるのかも(汗)

(※1)赤外線アプリでは、「MIDlet-OCL: JSCL-1.2.1」が必須のようでしたんで。

(20)メール関連(2004.4.18)
バナーメールというアプリを作るに際し、メール関連の資料を探していました。

http://www.dp.j-phone.com/dp/tool_dl/java/emu.php

にいつのまにやら、「サンプル」という項目がありましたので、ダウンロードしたところ
非常に有用なサンプルが置いてありましたので、それを参考にして、簡単に作れました。

ただ、問題が1つ(^^;)
メール送信は簡単に行くのですが、アドレス選択とメール送信は兼用できないという
セキュリティ制限が・・・。
Vアプリゲットで公開はしてますが、非常に中途半端なアプリになってしまいました(T_T)
(21)データフォルダ書込の罠(2004.4.18)
「ダサ字Memo」というアプリ(iアプリのHPで公開中)をVodaに移植していたんですが、
エミュレータではデータフォルダ書込が出来るけれど、実機では出来ないという問題が。

原因がわからないので、catchしたエラー情報をテキストフィールドに書き出すような
アプリにして、テスターの方にその内容を教えてもらったところ、

「java.io.IOException: could not create file」というメッセージが出ていたそうです。

「これは何らかの制限で例外が出ているな」ということで、ドキュメントを見直して
みたところ・・・・ありました(^^;;)

今回のアプリは、とりあえず処理を簡単にするため、「ルート」にdasa.jpgを
書き出すプログラムにしていました。
で、エミュレータでは正常にルートにdasa.jpgが書き込まれます。
しかし、ドキュメントによると

----
パス名は以下のどれかの形式で指定します。
・ルート/
・ルート/フォルダ名/
・ルート/フォルダ名/ファイル名
・ルート/フォルダ名/フォルダ名/
・ルート/フォルダ名/フォルダ名/ファイル名
----
となってますので、「ルート直下はフォルダ以外は置くことが許されない」ことになります。
実際、実機では書きこめなかったわけで(^^;;)

今回、実機テストが出来ないつらさと(^^;)、ちゃんとドキュメントは読まないとだめだなという
2点を思い知らされました(^^;;)

公開したアプリでは、dasaフォルダを作ってその中に画像を保存するようになってます。

(2004.4.30追記)
エミュレータをインストールしたままでは、内部/外部データフォルダが
「存在しないフォルダ」の設定になっています。
(インストーラがフォルダを作ってくれないみたい(^^;))
ですので、
C:\V-appli_SDK_121\bin\ 下に
\IntStorage ・・・内部ストレージデータフォルダ
\ExtStorage ・・・外部ストレージデータフォルダ
の2つのフォルダを作っておきましょう。
なお、任意の場所に設定出来るんですが、変更するのも面倒なんで(^^;)
(22)Security Exception(2004.4.30)
ダサ字の待受を作って欲しいとの要望があり、作ってたのですが、
P4エミュでは動いたのですが、P5エミュでは「Security Exception」が
出て、動かない(^^;)

マニュアルを読んでみると、どうやら、jad項目に

MIDlet-Application-Security: Y

を入れないとエミュレータでも動かないそうです。
待受以外でも、いわゆる「オフィシャル作者じゃないと使えないAPI」
を使ってるとNGっぽいです。
(詳細はドキュメント参照(^^;))
(23)PNG書込の罠(2004.5.2)
ダサ字Memoなるアプリを作っているのですが、そこで「メモ画像を写真用フレームに出来ないか」
という要望がありました。(SH53ユーザーより)
とりあえず、Vodafoneのフレームは「透過PNG」ということで、PNGを作ってからあとは透過の
ことを考えよう、と思い、現在のJPEG出力をPNG出力に変えてみました。
すると・・・・なぜかエミュレータでは

java.lang.RuntimeException

が出るではありませんか(^^;)
ドキュメントを読むと、「許容サイズを超えるとこのエラーが出る」とのことですが、
画像容量はそんなに大きくなるはずがないのに・・・、と思いながら、
念のために、サイズを小さくしても(120x50程度)NG。

仕方がないのでテスターの方に動作依頼をかけたところ、ちゃんと動いているとのこと。
どうやら、エミュレータの実装がされていないっぽい雰囲気です。(まだ未定事項ですが)

で、写真用フレームですけど、「背景色が白」のPNG画像であれば、SH53であれば、
そのまま写真用フレームとして使えるそうです。(白部分が透過してくれるとのこと)

これでフレームメーカーみたいなのを作る人が出る・・かな?
あらかじめ撮影した画像に抜きたい個所を白色で塗りつぶして、PNG保存かければ、
出来あがりだし(^^;)

あと、SH53の出力するPNG画像は、インデックスカラー(=パレットのある)のPNGみたいです。
で、透過チャンク(tRNSチャンク)はありませんでした。
パレットデータの順番は、00 00 00(黒)〜FF FF FF(白)の順番で並んでいるようです。
※2色(白黒)の場合は、 00 00 00 FF FF FF みたいな感じ、
  3色なら 00 00 00 80 00 00 FF FF FF のような形でパレットが並んでました。)

(24)無限ループ for JSCL1.2(2004.5.4)
引き続き、ダサ字Memoなるアプリのバージョンアップをしているのですが、
「フォルダ作成時にダイアログが出るが、それが無限ループになる
(=本来1度きりなのに、何度も出る)」とのこと。

エミュでは出なかった現象だったため、P5のJavaDocを見てみると、
プログラム注意点の「ネイティブ機能の起動時」の項目に

「キーが押されたことを契機にネイティブ機能を起動する場合、Canvas
のkeyPressed()メソッドから起動すると、ネイティブ機能の実行が終了した後も
キー押下状態が保持されたままとなる可能性があります」

とありました(^^;;;)
フォルダ作成の確認ダイアログの表示部分がネイティブ機能にあたる
らしく、それで引っかかっていたみたいです。

仕方がないので、keyReleasedでフラグを立て、処理後はフラグを消す
ようにして対処しました。

(25)色・ホワイトブレンド(謎)(2004.10.24)
タイトルが謎ですみません(^^;)
またまた、引き続き、ダサ字Memoなるアプリのバージョンアップをしているのですが、
ユーザーさんから、「拡大文字にしたときに、絵文字が消えてしまう」との
メールが来ました。

ダサ字Memoでは、拡大文字(システムフォントを使用する漢字や絵文字部分)は、

1)文字を設定の文字色(白以外の場合)で表示させる。
2)getPixel()にて、色が白の場合は、何も処理せず、
 白以外は、その取得した色で、矩形(拡大率に応じた)を描画する。

のようにしていたのですが、どうも、白の判定がうまくいってませんでした。
判定として、はじめは、

0x00ffffffとの比較をしていたのですが、どうも、エミュレータでは正常に動作しない。
なので、白部分がどう行った値になっているかを調べたところ、

0x00f8f8f8

となっていました。
getPixel()のAPIマニュアルを読んでみたところ、どうも、実際に使用している
ビット数が24bit使っていないものに関しては、使用していない部分は、0でマスク
されるようです。

そのこともあって、マスクパターンを最初に取得し、それを「白」と定義して、
getPixelの値と比較してみたのですが、エミュレータでは動くけれど、
実機では動作しない(>_<)

どうしようもなくなったので、以下のような手段で回避しました。

1)空画像を作り、白色で矩形塗りつぶしを行う。
2)塗りつぶしを行った任意の場所(実際は、(0,0))をgetPixelし、その値を「白」と
定義し、getPixel()で比較を行った。

ひとまず、この方法で正常動作しているようです。

そうそう、Vodafoneの絵文字は、色指定してdrawStringしても、フルカラー(?)で
表示されますので、気をつけてください。

(26)JSCL 1.22 SDK(2005.4.8)
2005/4/1に3GC4型(だったかな)のSDK(よーするに3G端末のエミュ&コンパイル環境)
がリリースされました。
ひとまず、いろいろと問題があるようなので、ここでつらつらと書いていきます。

1)JDK1.41以上??
まず、SDKを入れるためには、JDK1.41(だったかな)以上がインストールされている
必要があります。
JDKも、かなりのサイズがありますので(^^;)、低マシンスペックの私にとっては
けっこうつらいものが。

2)インストーラーにバグ?
JDK1.41とJSCL1.22 SDKを入れて、ひとまずコンパイルをしようとすると、
「JDK1.4以上だと動かない」みたいな、エラーメッセージが出ます。

原因は以下の通りなんですが・・・。
----
JSCL1.22 SDKをインストール時に、JDKのパス指定もしないとだめなんですが、
インストーラが自動的に設定する情報が、なぜかJREのパス・・・。
おまけに、JDKのパスに変えようとしても、「嫌!」と拒否されるし(^^;)
※もしかするとWin98固有の問題かもしれません。
----
仕方がないので、

C:\JSCL122_SDK101\bin

にあるバッチファイルすべてを手動で書き換えます。

jreにパスが通っているところを、すべて、JDKのほうに入れ換えます。
具体的には、

--------wscompile.batの場合-------
〜
C:\j2sdk1.4.2_08\bin\java.exe -cp C:\JSCL122_SDK101/wt
----------------------------------

こんな感じで、書き換えます。
(C:\j2sdk1.4.2_08\bin\に置き換え。)

3)統合環境にバグ?
やっとこさ、コンパイルできる環境が整った、ということで、
コンパイルしてみると、今度は、
「jscl.jar(.....)は、不正です。クラスファイルのバージョン 49.0 は不正です。48.0 であるべきです。」
みたいな、いいがかりをつけられます(;_;)

これは、どうもJSCL1.22 SDK自身のバグのようで、2005/4/5版のJSCL1.22 SDKをダウンロードすると
回避できました。

4)jarが出来ない?
ひとまず、ビルドも出来、エミュレータでも動いたので、実機でテストかなぁ?
と思いきや、jadはあれども、jarがない(^^;;;;)

落ちついて、メニューを見ると・・・・[Project]-[Package]-[Create Package]という
メニューが(^^;)
これで、jarを作るみたいです。

ついでに、[Create Obfuscated Package]で、難読化も出来るみたいで。
・・・http://proguard.sourceforge.net/にてproguard.zipをダウンロードしないと動かないようです(^^;)

4)メモメモ
3G端末だと、StorageConnectionで、フォルダ指定をしないとだめらしい・・。

V802SH,V902SH:「Other Documents」
V802N:「Other Files」



メールは

までお願いします。

トップページに戻る