2012-05-04 23 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