2

条件付きコンパイルを使用したビルドスクリプトを使用してデバイスごとに個別のビルドを作成するのではなく、 ( BREWプラットフォーム上で)複数のモバイルデバイス用に1つのアプリケーションバイナリビルドを作成することは可能ですか?

特に、複数の画面解像度に単一のBREWアプリケーションビルドを使用することは可能ですか?

目標は単一のバイナリビルドを持つことであることに注意してください。コードベースが1つしかない場合は、条件付きコンパイルとスマートビルドスクリプトでうまくいきます。

4

3 に答える 3

3

はい、可能です。以前の職場でこれを行うことができました。ただし、必要なものはトリッキーです。

  1. 最小公分母の BREW バージョン用にコンパイルします。バージョン 1.1 は、現在販売されているすべてのハンドセットのベースです。
  2. コードは、複数の解像度を処理できる必要があります。画面の幅と高さを検出する方法は、私の経験ではすべてのハンドセットで正確です。
  3. すべてのリソースをすべてのデバイスにロードする必要があります。これには、特定のデバイスの問題を回避するために独自のカスタム イメージ ローダーを作成する必要があります。サウンドについては、単純な MIDI タイプ 0 がすべてで機能することを知っていますが、QCP も機能するはずです (自分自身の経験はありません)。
  4. ビットマップ フォントを使用します。フォントに関するデバイスの問題が多すぎて、システム フォントを使用する価値がありません。
  5. コード構造を有限状態マシンとして設計します。これはいくら強調してもしすぎることはありません。これを行えば、非常に多くの問題が現実化することはありません。
  6. デバイスの問題ごとに回避策があります。これは難しい部分です!可能ですが、このうさぎの穴は信じられないほど深いです...

最終的に、アプリケーションが複雑で高度なほど、この方法に進む可能性は低くなります。一部のデバイス プロパティ (プラットフォーム ID など) は、実行時に確実に検出できないため、複数のビルドが必要になります。

于 2008-09-16T18:03:34.737 に答える
1

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ファイルと同じではないことを意味します(ファイルをデコードする本当にクールなアセンブリ言語のプレフィックスヘッダーを記述したい場合を除く)

于 2008-10-08T18:19:20.273 に答える
0

もう1つのアイデアは、受話器を画面のサイズなどに基づいて2〜4のカテゴリに分割し、それらのビルドを作成することです。サポートしたいすべての携帯電話をはるかに少ない複雑さでサポートできるので、これもはるかに高速なルートです。

もう1つ確認できるのは、起動する受話器のBREWバージョンです。BREW 1.1が1つのハンドセットにあり、それがターゲット市場でわずかな割合で所有されている場合、それをサポートするために作業することは意味がありません。

于 2008-09-21T19:58:05.877 に答える