非互換, 機種による制限のある機能

– 利用するメソッドが本当に全機種対応しているかどうか各機種オプションAPI・拡張API実装状況を見たほういい。
対応していない場合は利用を避けるか、

System.getProperty(“microedition.platform”).indexOf(“N504”) >= 0

とかして端末によって処理を分けること。
 
– 以下公式の iアプリ作成上の注意点より端末固有の制限。
– N504i(S) では Graphics.drawString() は半角 33 文字までしか描画されない。
– N504i(S) では ScratchPad クローズ処理は
– P504i(S) では扱う画像の一辺の長さは 256 ピクセルまで。
– P504iS では同様に 512 まで。
– F504i では Connector.open() に渡す URL は 256 バイトまで。
– F504iS では同様にクエリ以外が 255 バイトまで、クエリ部が 512 バイトまで。
– F504i と SO504i ではキーを押したまま(key press イベント発生中)システムのポップアップメッセージ(iモード接続中など)が表示されると Canvas.getKeypadState() の結果が残る。回避するために、ポップアップが立ち上がる処理のトリガはキーリリースにする。
– D504i では(Canvas.processEvent(), Canvas.getKeypadState() 等を使った低レベルキーイベント処理で)一部のボタン同士の同時押しを受け付けられない。(1,2,3), (4,5,6), (7,8,9), (*,0,#) のそれぞれは同時押しができない(ex. 1,2 はだめ)。
– SO504i では MediaImage オブジェクトは use() で有効になることができるのは 255 個まで。
– SO504i では時刻情報処理で 1 時間につき約 3.5 秒の割合で遅れる。正確には経過時刻に対し 0.09756% 遅れる。
– D2101V ではサマータイムが有効になっているため 3月の最終日曜の 10:00 から 10 月最終日曜の 11:00 まで +1:00 となる(10:00 が 11:00 になって始まり、11:00 が 10:00 になって終わる)。

Jarg, 7zip による Jar ファイルサイズ削減

– ここ <http://www.moreread.net/mario/Any/appli/memo.html?id=1> のソースを改変して一つのファイルで実行するようにしたもの。空白を含むパスに微妙に対応してある。DOJA エミュレータと同時に実行するとロックのために書き換えに失敗するのが難点。
– JavaBlender <http://homepage.mac.com/t.sekiguchi/javablender/index-j.html> を先に実行したらいいらしい。(Java Blender はクラス融合/パッケージ構造の平坦化などでプログラム自体のサイズ最適化を行う)

@echo off
REM ———————————————————-
REM = 使い方:
REM = optimize.bat “C:\path\to\jars\app.jar”
REM = 指定した jar のサイズを削減し、同じディレクトリにある同名
REM = の .jam のサイズ指定を書き換える。ドラッグ&ドロップ実行に
REM = 対応
REM ———————————————————-
REM = 下準備:
REM = ●jarg.jar <http://jarg.sourceforge.net/index.ja>を
REM = ダウンロードして、適当なところに配置。
REM = ●7zip <http://www.7-zip.org/> をインストールして
REM = 7za.exe にパスを通しておく。
REM ———————————————————-
REM = 設定
REM ———————————————————-
REM = クラスパス(DOJA 付属の zip 2つ)
set _CP=D:\Progra~1\Java\iDKDoJa4.0\lib\classes.zip;D:\Progra~1\Java\iDKDoJa4.0\lib\doja_classes.zip
REM = preverify.exe のパス(DOJA に付属)
set _PREVERIFY=D:\Program Files\Java\iDKDoJa4.0\bin\preverify.exe
REM = jarg.jar のパス
set _JARG=D:\Program Files\Java\tool\jarg\jarg.jar
REM ———————————————————–
if %1 == “” goto MES
set TARGET_F=%~f1
set TARGET_P=%~p1
set TARGET_SP=%~sp1
set TARGET_N=%~n1
mkdir %TARGET_P%bin
cd %TARGET_P%bin
mkdir temp
java -jar “%_JARG%” -nobco -j2me-prev “%_PREVERIFY%” -j2me-cp “%_CP%” “%TARGET_F%”
7za x %TARGET_SP%%TARGET_N%_s.jar -otemp -w -r -y > nul
REM del .\%TARGET_N%_s.jar

del “%TARGET_SP%%TARGET_N%_s.jar”
REM ! “%TARGET_F%”
cd temp
7za a -tzip “%TARGET_F%” * -mx=9 -mpass=4 -r -y > nul
cd ..
rd temp /s /q

type %TARGET_SP%%TARGET_N%.jam | find /v “AppSize” > %TARGET_SP%%TARGET_N%.tmp
type %TARGET_SP%%TARGET_N%.tmp > %TARGET_SP%%TARGET_N%.jam
echo AppSize = %~z1 >> %TARGET_SP%%TARGET_N%.jam
del %TARGET_SP%%TARGET_N%.tmp
cd %TARGET_P%
rd bin /s /q
exit /b
MES
echo optimize.bat [App.jar]
ERR
pause