java - 黑莓中两个不同版本(4.6、4.7 和 5.0+ 以上)的一个构建

标签 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
        }
}

根据代码,我期望在 else 部分写入 5.0 的结果,在 if 部分写入 4.7。 我在设备和 JDE 上都检查了它。

请帮助。

最佳答案

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

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

//#preprocess

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

编辑:
您将以两组可交付成果结束,一组用于 5.0+,另一组用于 4.x。 BBant 工具允许您一步执行编译过程,但编译的结果将是相同的。或者,您可以:

  • 尝试在 4.6 项目中包含 FacebookBlackBerrySDK-vx.x.x.jar 和 Log4B-vx.x.x.jar(确保这些已预先验证)。我能够包含这些 jars 并编译一个 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 可编译的。

关于java - 黑莓中两个不同版本(4.6、4.7 和 5.0+ 以上)的一个构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10399216/

相关文章:

c - 如何将 C 中的多行宏与行尾的注释结合起来

java - 自动发送数据到客户端,无需API调用

java - 如何使用 web3j 通过密码或其他方式获取地址?

java - 使用 Java 配置的 Spring LDAP

BlackBerry - Ant 为更复杂的应用程序构建脚本

php - 移动网站的 HTML 压缩

黑莓模拟器和 MDS

c - #if 为预处理器指令定义字符串比较

java - Hotspot7 hsdis PrintAssembly 英特尔语法

java - 删除请求 JMETER 中的属性