iアプリTips集

FAQ

ここでは実際の問い合わせをもとに、開発するうえで分かりにくい点や躓きやすい点をFAQ形式で解説します。
ビルドとはなんですか?
iアプリをプログラムから、実際に携帯電話で実行できる形態に変換する作業です。iappliToolでビルドを行うと、携帯電話からダウンロードできるようにHTMLも自動的に生成されます。ビルドが正常に行われた場合、コンソールには最低限下のようなログが出ます。(初回のビルドの際には、ADF自動設定のログが出力されます)
ビルド開始(DoJaプロファイル : DoJa-5.1) 
JDK(バージョン番号) compile... 
(プロジェクトの位置へのパス)\(プロジェクト名).jar を作成しました
(プロジェクトの位置へのパス)\(プロジェクト名).jam を更新しました
(プロジェクトの位置へのパス)\Download.html を作成しました
ビルド終了
最終jarサイズ[(プロジェクト名).jar] : *** bytes
--- ADFチェック 開始 ---
--- ADFチェック 終了 ---
--- ADF/トラステッド動作設定チェック 開始 ---
--- ADF/トラステッド動作設定チェック 終了 ---
エラーが発生した場合は、エラーの数と内容が出力されます。
スクラッチパッドとはなんですか?
スクラッチパッドとは、iアプリから利用できる、携帯電話上の記憶領域の名称です。スクラッチパッドに記録した内容はiアプリを終了しても保持されているので、前回の起動時に記録しておいた内容を読み込むことができます。
 iappliToolでは、スクラッチパッドは初期状態で利用しない設定になっています。スクラッチパッドを利用する場合は、ADF設定のSPsizeの項目に利用したいサイズを入力してビルドする必要があります。
ADF設定とはなんですか?
iアプリの実行の管理に必要な情報の設定を行う機能です。ここでの設定内容が.jamファイルとして出力されます。iアプリの名称、アプリが利用する端末機能(音声通話・データアクセス・HTMLアクセス・スクラッチパッド利用サイズ・システム情報取得等)や画面サイズ、利用するDojaのプロファイルなどが指定できます。設定項目は非常に多くありますが、実際は利用する部分のみ設定すればよいのでそれほど煩雑ではありません。
ADF設定を変更しようとすると「以下のADF値を設定してください-AppName」のメッセージが表示されます。
プロジェクトを作成後、一度もビルドしていない場合にこのメッセージが表示されることがあります。一度ビルドを行うと、不足している項目が自動的に入力されますので、一旦取消を押してADF設定画面を閉じてビルドを行い、そのあとでもう一度ADF設定を行ってください。
プログラムで使う画像ファイルの指定方法が分かりません。
画像ファイルはresフォルダに配置することで利用できるようになります。プロジェクトエクスプローラの左側でresフォルダを選び、左側にドラック&ドロップで配置できます。



プログラム内でファイルを参照する場合は、
“resource:///a.jpg”
という記述でこのファイルを指定することができます。
利用できる画像ファイル形式は何ですか?
BMP/JPG/GIF形式を利用することができます。
より詳しいフォーマットについては iアプリコンテンツ開発ガイド for DoJa-5.x 詳細編 の4.4.1 iアプリが利用可能なマルチメディアデータをご覧ください。
ビルド時に「例外 *** は報告されません。スローするにはキャッチまたは、スロー宣言をしなければなりません。」というエラーが出る場合はどうすればよいですか?
例外が発生する可能性がある命令が、try{}catch(){}で囲まれていない場合にこのエラーがでます。該当する行をtryブロックの中に入れて下さい。

具体例
(ソースコード)
MainPanel() {
    MediaImage mi = MediaManager.getImage("resource:///a.gif");
    mi.use();
}
(エラーメッセージ)
(ファイル名):(行番号): 例外 com.nttdocomo.io.ConnectionException は
報告されません。スローするにはキャッチまたは、スロー宣言をしなければ
なりません。
    	mi.use();
修正例
MainPanel() {
    try{
        MediaImage mi = MediaManager.getImage("resource:///a.gif");
        mi.use();
    } catch(ConnectionException e){
    }
}
ビルドには成功しましたが、実行すると全く(または一部)動作しません。
さまざまな原因が考えられますが、よくあるケースに「例外が発生したもののcatchでなにも処理しなかったので目に見えていない」というものがあります。
例として画像を読み込んで表示する簡単なアプリを下に示します。(Panel部分のみ)
class MainPanel extends Panel {
    MainPanel() {
        ImageLabel label = new ImageLabel();
        add(label);
        try{
            MediaImage mi = MediaManager.getImage("resource:///a.gif");
            mi.use();
            label.setImage(mi.getImage());
        } catch(Exception e){
        }
    }
}
このアプリを実行した際に、a.gifが見つからなかった場合、何も画面に表示されません。もちろんこの場合は、a.gifがないのが原因であることは分かっているのですが、状況によっては原因が分からない場合もあります。そのような場合、例外を確認することでヒントを得られます。
例外の内容を確認するために、catchに例外の内容を出力するためのコードを一行挿入します。
class MainPanel extends Panel {
    MainPanel() {
        ImageLabel label = new ImageLabel();
        add(label);
        try{
            MediaImage mi = MediaManager.getImage("resource:///a.gif");
            mi.use();
            label.setImage(mi.getImage());
        } catch(Exception e){
            System.out.println(e.toString());
        }
    }
}
このコードを実行してみると、コンソールに次のようなメッセージが出力されます。
com.nttdocomo.io.ConnectionException: Unexpected I/O exception
このメッセージを見ることにより、入出力関連の例外が発生していることが分かります。
例外を出力する可能性のあるメッセージには、それぞれどのような状況でどのような例外を出力するかがAPIリファレンスに記載されています。出力された例外の内容を見ることで、問題個所のヒントを得ることができます。

※「iモード」「FOMA」「iアプリ」及び「i-appli」ロゴはNTTドコモの登録商標です。
※「Google」「Android」および「Android ロゴ」「Androidマーケット」とそのロゴは、Google Incの商標または登録商標です。
※「Adobe」「Flash」および「Flash Lite」は、 Adobe Systems Incorporated (アドビ システムズ社)の米国ならびにその他の国における商標または登録商標です。