Facebook 使用预处理器时要考虑使用哪个构建

Facebook 使用预处理器时要考虑使用哪个构建,facebook,blackberry,preprocessor,blackberry-jde,Facebook,Blackberry,Preprocessor,Blackberry Jde,我有一个项目,需要在4.6和5.0版本的黑莓使用。 我在4.6和5.0版本中都运行了相同的代码,并在代码中附加了一些预处理器指令(#ifndef语句,我需要在5.0中使用,因为4.6版本不支持facebook sdk) 我有2个.cod文件(一个用于4.6,另一个用于5.0) 它们在各自的模拟器中根据需要工作 但是,当我将4.6的.cod文件加载到5.0中时。。。(它将其视为预处理器内的代码作为注释) 当我这样做的时候,维切维萨 ie从5.0升级到4.6。。。上面说。。。未找到projectna

我有一个项目,需要在4.6和5.0版本的黑莓使用。 我在4.6和5.0版本中都运行了相同的代码,并在代码中附加了一些预处理器指令(#ifndef语句,我需要在5.0中使用,因为4.6版本不支持facebook sdk) 我有2个.cod文件(一个用于4.6,另一个用于5.0) 它们在各自的模拟器中根据需要工作

但是,当我将4.6的.cod文件加载到5.0中时。。。(它将其视为预处理器内的代码作为注释) 当我这样做的时候,维切维萨

ie从5.0升级到4.6。。。上面说。。。未找到projectname-1.cod

一个类似的问题也被张贴在这里,看看bbtool上的评论说这是可能的

使用预处理器不是为不同BB OS版本制作单个版本的方法(无论您使用什么工具来准备版本)

预处理器仅用于在编译/构建整个代码之前,根据提供的条件删除/添加代码的特定部分。 更一般地,预处理器用于不同情况下考虑源代码的不同。 更一般地说,预处理器用于针对不同的条件生成不同的源代码。 在这种情况下,预处理器的范围仅限于编译/构建代码之前的不是在构建代码并获得可执行文件/.cod/…等之后

阅读前几行链接;虽然这些都是关于C预处理器的,但是基本的也适用于这里

假设您的代码如下所示:

//代码的开头
//#预处理
//这是代码的第二行
//...
//#ifdef OS_5
导入net.rim.device.api.ui.component.AutoCompleteField;
//#否则
//如果需要,不要导入自动完成字段并导入其他内容
//#恩迪夫
//...
//... // 还有一些代码
//...
//#ifdef OS_5
//...
//...
//使用AutoCompleteField的代码
//...
//...
//#否则
//...
//...
//用另一种方式实现AutoCompleteField的代码
//...
//...
//...
//... // 还有一些代码
//...
//代码结束
无论您使用什么工具构建代码(JDE、Eclipse或使用Ant),如果您使用预处理器
'OS_5'
构建代码,那么(如果您的工具能够理解预处理器),将生成以下代码:

//代码的开头
//这是代码的第二行
//...
导入net.rim.device.api.ui.component.AutoCompleteField;
//...
//... // 还有一些代码
//...
//...
//...
//使用AutoCompleteField的代码
//...
//...
//...
//... // 还有一些代码
//...
//代码结束
将使用上述代码生成
.cod
文件。而且此
.cod
文件不会在低于5.0的BB OS版本上运行,因为OS 5支持
自动完成字段

如果您构建的没有预处理器'OS_5'或其他预处理器 然后将生成以下代码:

//代码的开头
//这是代码的第二行
//...
//如果需要,不要导入自动完成字段并导入其他内容
//...
//... // 还有一些代码
//...
//...
//...
//用另一种方式实现AutoCompleteField的代码
//...
//...
//...
//... // 还有一些代码
//...
//代码结束
.cod
文件将使用上述代码生成,这将是一个与上一个不同的
.cod
文件

现在,如果您想准备一个
单一版本
并将其成功部署到不同的BB OS支持的设备上,那么您必须在编码时
删除依赖项
,即只使用所有OS版本(4.6、5.0…和其他,如果您愿意)支持的API类。但在某些情况下,这是非常困难的,因为您可能需要编写自己的代码来实现某些功能

为不同的操作系统准备不同的构建更容易——为此,您当然可以使用预处理器



恐怕我已经用非常复杂的方式解释了一件简单的事情。

您必须为不同的操作系统创建不同的版本(.cod/.jad文件),才能部署特定于操作系统的功能。预处理器仅用于指示在构建项目时保留/删除代码的哪一部分。对于代码
/#ifdef some_condition some_code
如果
some_condition
失败,那么JDE或Eclipse在打包项目时(在生成.cod之前)会删除部分代码。因此,一旦构建了项目,即创建了.cod文件,就不再有预处理器的功能了。如果我不想使用Ant实现它的话。。这能实现吗??我在一个版本中发布了这个问题,请也看看这个@HeartBeat:Cool one。。。好办法。。。你以每个人都能理解的方式解释它。我也需要你看看这个问题