条件付きコンパイルを使用したビルドスクリプトを使用してデバイスごとに個別のビルドを作成するのではなく、 ( BREWプラットフォーム上で)複数のモバイルデバイス用に1つのアプリケーションバイナリビルドを作成することは可能ですか?
特に、複数の画面解像度に単一のBREWアプリケーションビルドを使用することは可能ですか?
目標は単一のバイナリビルドを持つことであることに注意してください。コードベースが1つしかない場合は、条件付きコンパイルとスマートビルドスクリプトでうまくいきます。
条件付きコンパイルを使用したビルドスクリプトを使用してデバイスごとに個別のビルドを作成するのではなく、 ( BREWプラットフォーム上で)複数のモバイルデバイス用に1つのアプリケーションバイナリビルドを作成することは可能ですか?
特に、複数の画面解像度に単一のBREWアプリケーションビルドを使用することは可能ですか?
目標は単一のバイナリビルドを持つことであることに注意してください。コードベースが1つしかない場合は、条件付きコンパイルとスマートビルドスクリプトでうまくいきます。
はい、可能です。以前の職場でこれを行うことができました。ただし、必要なものはトリッキーです。
最終的に、アプリケーションが複雑で高度なほど、この方法に進む可能性は低くなります。一部のデバイス プロパティ (プラットフォーム ID など) は、実行時に確実に検出できないため、複数のビルドが必要になります。
Javagroundで使用されるJ2MEからBrewへの変換を作成しました。複数の解像度、単一のバイナリコードを書くことはかなり可能です。デバイスのバグのデータベースがあるので、プラットフォームIDを介してデバイスを検出し、タグ付けされたバグをマークする一連のフラグを生成できます。たとえば、Motorola Brew電話のほとんど(すべてではないにしても)には、電話に出るまで着信がアプリケーションに割り込まないというバグがあるため、TAPIを使用して着信を監視し、hideNotifyイベントを生成します(生成されたコードは純粋なC++ですが、Javaをエミュレートします。実行時にBrewバージョンのチェックを行い、Brew3ではなくBrew2の場合は特定のAPIを無効にします。
3Dタイプのゲームは、ソフトウェアでスケーリングしているため、解像度に依存しないようにするのが簡単です。
また、サウンド用に2つの別々のAPI、IMEDIAとISOUNDPLAYERがあります。ISOUNDPLAYERは古いAPIであり、すべてのデバイスでサポートされていますが、機能はそれほど多くありません(IMEDIAを使用してマルチチャネルオーディオのみを実行できます)。IMEDIAオブジェクトを作成しましたが、IMEDIAオブジェクトを取得できない場合は、フォールバックしてISOUNDPLAYERオブジェクトを作成します。
完全にユニバーサルなビルドの問題は、機能に大きな違いがあることです。そのため、ビルドを数回行う価値があります。古いデバイスのヒープは1MB未満(画面サイズが小さい)であるため、多くのことが得られます。 6MB以上(176x204以上)。
Brewを使用すると、(Javaとは異なり)かなり一貫したキー値のセットを使用できますが、新しいデバイスの一部はタッチスクリーン(およびポインター入力を処理する必要があります)と回転画面です。
ビッグエンディアンモードを使用する古いNokia製の電話もあります。これは、ファイルが通常のmodファイルと同じではないことを意味します(ファイルをデコードする本当にクールなアセンブリ言語のプレフィックスヘッダーを記述したい場合を除く)
もう1つのアイデアは、受話器を画面のサイズなどに基づいて2〜4のカテゴリに分割し、それらのビルドを作成することです。サポートしたいすべての携帯電話をはるかに少ない複雑さでサポートできるので、これもはるかに高速なルートです。
もう1つ確認できるのは、起動する受話器のBREWバージョンです。BREW 1.1が1つのハンドセットにあり、それがターゲット市場でわずかな割合で所有されている場合、それをサポートするために作業することは意味がありません。