5

Blackberry 5.0 以降の Facebook ライブラリをインポートしたいのですが、4.6 および 4.7 のライブラリをインポートしたくありません。

以下のリンクに従って、4.7 以降のプリプロセッサを使用しようとしました

現在、JDE 4.7 では問題なく動作していますが、5.0 では期待どおりの結果が得られません。私が試した以下のコードを見つけてください:

//#ifdef JDE_4_7_0
import net.rim.device.api.ui.component.ButtonField;
//#else
import net.rim.device.api.ui.component.LabelField;
//#endif
import net.rim.device.api.ui.container.MainScreen;


public class TestScreen extends MainScreen{

        TestScreen(){

                //#ifdef JDE_4_7_0
                ButtonField btn = new ButtonField("Test Button");
                add(btn);
                //#else
                LabelField lbl1 = new LabelField("Test Label 1");

                add(lbl1);
                //#endif
        }
}

コードによると、5.0 の場合は else 部分に、4.7 の場合は if 部分に結果が書き込まれることを期待しています。デバイスとJDEの両方で確認しました。

助けてください。

4

2 に答える 2

3

まず、JDE_4_7_0タグは、BlackBerry プロジェクトのプロパティ -> [コンパイル] タブ -> プリプロセッサの定義で定義する必要があるカスタム タグです。好きな名前を付けることができます。

次に、ソース ファイルの最初の行 (パッケージ宣言の前であっても) は次のようになります。

//#preprocess

次に、条件付きインポートを無効にする場合は、「プリプロセッサ定義」タブに戻り、JDE_4_7_0エントリを削除します。これにより、コンパイラは#else句に入ります。Eclipse の BB プラグインは OS を検出しません。これはすべて制御する必要があるアーティファクトです。

編集:
5.0+ 用と 4.x 用の 2 セットの成果物で終了します。BBant ツールを使用すると、コンパイル プロセスを 1 ステップで実行できますが、コンパイルの結果は同じになります。別の方法として、次のことができます。

  • 4.6 プロジェクトに FacebookBlackBerrySDK-vx.xxjar と Log4B-vx.xxjar を含めてみてください (これらが事前に検証されていることを確認してください)。これらの jar を含めて 4.5 プロジェクトをコンパイルできましたが、エラーなしで使用できるというわけではありません*。そう...
  • DeviceInfo.getSoftwareVersionまたはを使用して実行時に検出することにより、OS 5.0 以降でのみ facebook 機能を使用しますDeviceInfo.getPlatformVersion

このアプローチを使用すると、4.6 以降のデバイスと互換性のある単一のアプリを持つことができ、5.0 以降のデバイスのみが fb SDK を使用します。

*注: facebook の blackberry SDK が 5.0 用にコンパイルされている理由がわかりません。たぶん、作者は自分の開発マシンで持っていた下位の OS を使用しただけかもしれません。しかし、それをテストしないと、4.5 と互換性があるとは言えません。jar が 4.5 コンパイル可能であるというだけです。

于 2012-05-02T08:06:13.810 に答える
2

ディレクティブ名JDE_4_7_0_OR_HIGHERJDE_4_7_0_OR_HIGHER.複数の JRE をインストールしてから、コンパイルする前にプロジェクト オプションで特定の JRE を選択できます)。次に、コードは次のようになります。

//#preprocess

//#ifdef JDE_4_7_0_OR_HIGHER
import net.rim.device.api.ui.component.ButtonField; 
//#else 
import net.rim.device.api.ui.component.LabelField; 
//#endif 
import net.rim.device.api.ui.container.MainScreen; 


public class TestScreen extends MainScreen{ 

        TestScreen(){ 

                //#ifdef JDE_4_7_0_OR_HIGHER
                ButtonField btn = new ButtonField("Test Button"); 
                add(btn); 
                //#else 
                LabelField lbl1 = new LabelField("Test Label 1"); 
                add(lbl1); 
                //#endif 
        } 
} 
于 2012-05-02T21:01:11.100 に答える