« Perlでマルチスレッド | メイン | Second Life考 »

携帯Javaアプリを作る

ようやくauも再び勝手アプリに対応してくれた,ってことでオープンアプリでも作ってみる気になった.

au 

アプリゲット - アプリ開発講座

au 技術情報 - オープンアプリ

Docomo 

作ろうiモードコンテンツ:iアプリ | サービス・機能 | NTTドコモ 

Softbank

Softbank Developer Support Site 

S!アプリ 

基本的にMIDP 2.0準拠.ドコモはDoJa.
オープンアプリは通信の度に確認が出て来るのがウザい.CLDCの類には非対応.

WirelessなんとかっていうIDEっぽいのがJ2MEに付いているけど,そんなもん使いたくないんです.
やっぱmake一発で全部やって欲しいでしょ,ってことでJavaだからAnt使おう.

SDN Managing Wireless Builds with Ant 

Apache Ant Manual 

MacでMIDPのビルドを作る方法 

SDN Do-It-Yourself MIDP on Mac OS X

あと,DoJaのキビシイ容量制限をくぐりぬけるコツ

iアプリを10Kbytesに収めるテクニック

とんでもないハマりポイントがあった.
ビルドしてemulatorに食わせてもスタックダンプみたいなものを吐いて動いてくれない.
ためしにjava.netのチュートリアルJ2ME Tutorial, Part 1: Creating MIDletsで試してみてもおんなじ.

c:\java\WTK25\bin\emulator.exe -Xdescriptor DateTimeApp.jad
Running with storage root DefaultColorPhone
Running with locale: Japanese_Japan.932
Method............: 10221664 'com/sun/midp/midlet/MIDletState.createMIDlet (static)'
Stack Chunk.......: 22700ac
Frame Pointer.....: 2270104
Current IP........: 10327513 = 103274f6 + offset 29
Previous Frame....: 22700cc
Previous IP.......: 103bb579 (offset 22)
Frame size........: 7 (1 arguments, 6 local variables)
Argument[0].......: 22708a4
Local[1]..........: 0
Local[2]..........: 23eef98
Local[3]..........: 227ff2c
Local[4]..........: 23eefac
Local[5]..........: 10263184
Local[6]..........: 23eef78
Operand[1]........: 22708a4

Method............: 10283b04 'com/sun/midp/midlet/Selector.run (virtual)'
Stack Chunk.......: 22700ac
Frame Pointer.....: 22700cc
Current IP........: 103bb579 = 103bb563 + offset 22
Previous Frame....: 0
Previous IP.......: 1
Frame size........: 6 (1 arguments, 5 local variables)
Argument[0].......: 2270a30
Local[1]..........: 2280008
Local[2]..........: 22708a4
Local[3]..........: 0
Local[4]..........: 0
Local[5]..........: 0
Operand[1]........: 2280008

VM status:
Instruction pointer.: 10327513 (offset within invoking method: 29)
Next instruction....: 0x4c
Frame pointer.......: 2270104
Local pointer.......: 22700e8
Stack size..........: 128; sp: 227011c; ranges: 22700b4-22702b4;
Contents of the current stack frame:
    22700e8: 22708a4 (lp)
    22700ec: 0
    22700f0: 23eef98
    22700f4: 227ff2c
    22700f8: 23eefac
    22700fc: 10263184
    2270100: 23eef78
    2270104: 22700cc (fp)
    2270108: 103bb579
    227010c: 22700e4
ALERT: java/lang/ClassFormatError: Bad version information.
    2270110: 10221664
    2270114: 22700ac
    2270118: 0 (end of frame)
    227011c: 22708a4 (sp)
Execution stack contains 108 items:
2270a30
2280008
22708a4
0
0
0
0
1
23eef7c
10283b04
22700ac
0
2280008
22708a4
0
23eef98
227ff2c
23eefac
10263184
23eef78
22700cc
103bb579
22700e4
10221664
22700ac
0
22708a4

Execution completed.
3421368 bytecodes executed
112 thread switches
1647 classes in the system (including system classes)
17687 dynamic objects allocated (529024 bytes)
2 garbage collections (459024 bytes collected)
Execution completed.
3421368 bytecodes executed
112 thread switches
1647 classes in the system (including system classes)
17687 dynamic objects allocated (529024 bytes)
2 garbage collections (459024 bytes collected)

こんな感じで.
running the first MIDlet
ここに,-souce 1.4 -target 1.5を追加すれば桶と書いてある.
やってみると実際うまくいった.

MIDPでハイスコアの保存が面倒くさい.
パッケージjavax.microedition.rms
ただただ面倒くさい

参考
http://urana.info/mobile/midp/index.html

About

2007年05月06日 22:31に投稿されたエントリーのページです。

ひとつ前の投稿は「Perlでマルチスレッド」です。

次の投稿は「Second Life考」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

Powered by
Movable Type 3.34