2012-05-04 37 views
0

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

但是,当我的4.6 .cod文件加载到5.0 ......(它把它作为预处理器内为注释代码) ,当我做到这一点反之亦然

即从5.0到4.6 ..它说...没有找到projectname-1.cod。

类似的问题在这里已经张贴过检查,其中上bbtool评论说,这可能是可能 One build for two different versions (4.6,4.7 and 5.0+above) in blackberry

+2

您必须为不同的操作系统制作不同的版本(.cod/.jad文件)才能部署操作系统特定的功能。预处理器仅用于指示构建项目时要保留/删除哪些代码部分。对于代码'//#ifdef some_condition some_code',如果'some_condition'失败,那么这个'some_code'部分的代码在打包项目时(在制作.cod之前)被** JDE **或** Eclipse **删除。所以,一旦项目建成,即.cod文件被创建,预处理器就没有更多的功能。 –

+0

,如果我不想通过使用Ant来实现它。是否可以实现?刚一建立 我 张贴了这个问题 http://stackoverflow.com/questions/10442995/how-to-use-ant-in-eclipse-for-preprocessing 请你看看这个太@HeartBeat: – Yatin

回答

2

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

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

阅读前几的THESE链接线;虽然这些都是关于C-Preprocessors的,但基本也适用于此。

假设你的代码如下:

// 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文件不会对BB OS版本低于5.0,因为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,即仅使用所有操作系统版本支持的API类(4.6,5.0 .. 。和其他人,如果你想)。但是有些时候对于某些情况来说很困难,因为您可能必须编写自己的代码来实现某些功能。

它更容易准备建立不同的不同的操作系统---和这个目的,你可以使用过程预处理器..


恐怕可能是我曾经在一个很说明一件容易的事复杂的方式。

+0

很酷的一个...伟大的方式... 你解释一种方式,每个人都可以理解 – Yatin

+0

我需要你看看这个问题请 http://stackoverflow.com/questions/10617804/textfield-错误 – Yatin