5

我想为黑莓 5.0 及更高版本导入 facebook 库,不想为 4.6 和 4.7 导入这些库。

我尝试通过以下链接使用 4.7 及更高版本的预处理器:http: //smartfone-more.blogspot.in/2010/05/coding-for-multiple-blackberry-devices.html

现在它在 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 插件不会检测操作系统,它都是您应该控制的工件。

编辑:
您将以两组可交付成果结束,一组用于 5.0+,另一组用于 4.x。BBant 工具允许您一步完成编译过程,但编译的结果是一样的。作为替代方案,您可以:

  • 尝试在 4.6 项目中包含 FacebookBlackBerrySDK-vx.xxjar 和 Log4B-vx.xxjar(确保这些已预先验证)。我能够包含这些 jar 并编译一个 4.5 项目,但这并不意味着您可以毫无错误地使用它们*。所以...
  • 仅在 OS 5.0 及更高版本中使用 facebook 功能,方法是在运行时使用DeviceInfo.getSoftwareVersion或检测它DeviceInfo.getPlatformVersion

使用这种方法,您可能能够拥有一个与 4.6+ 设备兼容的应用程序,并且只有 5.0+ 设备会使用 fb sdk。

*注意:我不知道为什么 facebook blackberry sdk 是为 5.0 编译的。也许作者只是在他的开发机器中使用了他的低级操作系统,谁知道呢。但如果不对其进行测试,我不能说它是 4.5 兼容的,只是 jar 是 4.5 可编译的。

于 2012-05-02T08:06:13.810 回答
2

将指令名称更改为类似的名称JDE_4_7_0_OR_HIGHER,然后进入项目的 Blackberry_App_Descriptor.xml 文件并添加JDE_4_7_0_OR_HIGHER到“预处理指令”列表,然后确保在使用 4.7 或更高版本的 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 回答