0

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

但是,当我将 4.6 的 .cod 文件加载到 5.0 中时……(它将它视为预处理器中的代码作为注释),当我这样做时,反之亦然

即从 5.0 到 4.6 ...它说 ... projectname-1.cod not found 。

此处也发布了一个类似的问题,查看关于 bbtool 的评论说它可以 在黑莓中为两个不同版本(4.6、4.7 和 5.0+以上)构建一个版本

4

1 回答 1

2

使用预处理器不是A SINGLE BUILD为不同的 BB OS 版本制作的方法(无论您使用什么工具来准备构建)。

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

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

假设您的代码如下:

// START OF CODE
//#preprocess
// this is the second line of the code
//...
//#ifdef OS_5
import net.rim.device.api.ui.component.AutoCompleteField;
//#else
//don't import AutoCompleteField and import something else if needed
//#endif

//...
//... // some more codes
//...

//#ifdef OS_5
//...
//...
// Codes for using AutoCompleteField
//...
//...
//#else
//...
//...
// Codes for implementing AutoCompleteField another way by yourself
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

使用什么工具来构建代码(JDE、Eclipse 或使用 Ant)并不重要,如果您使用预处理器构建,'OS_5'那么(如果您的工具可以理解预处理器)将生成以下代码:

// START OF CODE
// this is the second line of the code
//...
import net.rim.device.api.ui.component.AutoCompleteField;

//...
//... // some more codes
//...

//...
//...
// Codes for using AutoCompleteField
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

并且.cod文件将使用上面的代码生成。并且此.cod文件不会在低于 5.0 的 BB OS 版本上运行,因为AutoCompleteField它受 OS 5 的支持。

如果您在没有预处理器“OS_5”或其他预处理器的情况下构建,则会生成以下代码:

// START OF CODE
// this is the second line of the code
//...
//don't import AutoCompleteField and import something else if needed

//...
//... // some more codes
//...


//...
//...
// Codes for implementing AutoCompleteField another way by yourself
//...
//...

//...
//... // some more codes
//...
 // END OF CODE

并且.cod文件将使用上面的代码生成,这将是一个.cod与前一个不同的文件。

现在,如果您想A SINGLE BUILD成功地准备和部署不同的支持 BB OS 的设备,那么您必须remove dependencies在编码时,即仅使用所有操作系统版本(4.6、5.0 和其他版本)支持的那些 API 类,如果您愿意)。但有时在某些情况下这非常困难,因为您可能必须编写自己的代码来实现某些功能。

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


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

于 2012-05-04T13:17:36.707 回答