在黑莓中有两个不同版本(4.6,4.7和5.0 +以上)的一个版本

时间:2012-05-01 14:34:30

标签: java blackberry preprocessor blackberry-jde

我想为黑莓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的部分。 我在设备和JDE上都检查了它。

请帮助。

2 个答案:

答案 0 :(得分:3)

首先,JDE_4_7_0标记是您应在BlackBerry项目属性中定义的自定义标记 - > “编译”标签 - >预处理器定义。你可以给它你想要的名字。

其次,在源文件中,第一行(甚至在包声明之前)应为:

//#preprocess

然后,当您要禁用条件导入时,请返回“预处理器定义”选项卡并删除JDE_4_7_0条目。这将使编译器输入#else子句。 eclipse的BB插件没有检测到操作系统,它是你应该控制的神器。

编辑:
你将以两套可交付成果结束,一套用于5.0+,另一套用于4.x. BBant工具允许您在一个步骤中执行编译过程,但编译的产品将是相同的。作为替代方案,您可以:

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

使用这种方法,您可以使用一个与4.6+设备兼容的应用程序,只有5.0以上的应用程序将使用fb sdk。

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

答案 1 :(得分:2)

将指令名称更改为更像JDE_4_7_0_OR_HIGHER的内容,然后进入项目的Blackberry_App_Descriptor.xml文件,并将JDE_4_7_0_OR_HIGHER添加到" Preprocess Directives"列表,然后确保在使用4.7或更高版本的JRE版本编译项目时启用它(您可以安装多个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 
        } 
}