2012-05-04 4 views
0

У меня есть проект, который необходимо использовать в версиях ежевики 4.6 и 5.0. У меня есть тот же код в версиях 4.6 и 5.0 с некоторыми директивами препроцессора, прикрепленными к коду (инструкции #ifndef, которые мне нужно использовать для 5.0, поскольку facebook sdk не поддерживается в версии 4.6) У меня есть 2 файла .cod (один для 4.6 и другие для 5.0) они работают по мере необходимости в своих соответствующих симуляторах.Какую сборку следует учитывать при использовании препроцессора

Но, когда я загрузить файл .cod 4,6 в 5,0 ... (он рассматривает его как код внутри препроцессора как комментарий) и когда я делаю это ViceVersa

т.е. от 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' кода удаляется ** JDE ** или ** Eclipse ** при упаковке проекта (до создания .cod). Таким образом, как только проект будет построен, то есть будет создан файл .cod, больше нет функций предварительных процессоров. –

+0

, и если я не добьюсь этого, используя Ant .. можно ли это достичь? Только один билд Я отвечал на этот вопрос в http://stackoverflow.com/questions/10442995/how-to-use-ant-in-eclipse-for-preprocessing пожалуйста проверить это слишком @HeartBeat: – Yatin

ответ

2

Использование препроцессора не так, чтобы сделать A SINGLE BUILD для различных ВВ версий ОС (Независимо от того, что инструмент, который вы используете для подготовки сборки).

Препроцессоры используются только для удаления/добавления определенной части кода на основе предоставленных условий перед компиляцией/построением всего кода. В более общем плане, препроцессоры используются для рассмотрения исходного кода по-разному для разных условий. В более общем плане препроцессоры используются для создания различных исходных кодов для разных условий. В этом случае объем препроцессоров составляет только до скомпилировать/построить код ... не после вы создали код и получили исполняемый/.cod/... и т. Д. файл

Читать первые несколько строк THESE ссылки; хотя речь идет о 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, потому что 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