Модераторы: javastic, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Компиляция проекта для разных моделей, Условная компиляция ? 
:(
    Опции темы
Gershkovich
Дата 11.6.2007, 16:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 8.2.2006

Репутация: нет
Всего: 2



Привет всем !

Суть пробемы : есть проектик который работает на всех моделях.
Но для Нокий, скажем, желательно включить некоторые украшательства.
Например включить  вибру :

Код

 public void commandAction(Command command, Displayable displayable) {
        if (cmdOk == command) {
                // Some actions here 
                com.nokia.mid.ui.DeviceControl.startVibra(100, 1000) ;
        }
    }


Задача состоит в том чтоп компилировать в двух режимах
типо default и Nokia - т.е. в первом случае выделенная строка не компилировалась,
а во втором компилировалась

Это похоже на  условную компиляцию в Delphi.
{$ ifdef NOKIA}....

Кто как решает такую проблему ??

Заранее спасибо.

PM MAIL   Вверх
nagliyvred
Дата 12.6.2007, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 2.10.2005

Репутация: 3
Всего: 3



NetBeans + MobilityPack. Я создаю для каждой линейки телефонов свою конфигурацию где прописывается куча своих настроек: от простых препроцессорных define'ов, путей к папкам с ресурсами, уровня обфускации и прочего прочего, вплоть до автоматического заливания готового архива  в определенную папочку на сервере по sftp при build'е.
PM   Вверх
Antropoid
Дата 12.6.2007, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 13
Всего: 16



Ant+Antenna и дело в шляпе  smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
Gershkovich
Дата 12.6.2007, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 8.2.2006

Репутация: нет
Всего: 2



Спасибо.

А где ее взять Antenna ?

У меня есть какая-то версии 0.9.14
но она умеет тока JAD генерить

или я что-то упустил ?
PM MAIL   Вверх
Antropoid
Дата 13.6.2007, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 786
Регистрация: 1.6.2006
Где: &Ukraine==Ode ssa

Репутация: 13
Всего: 16



Антенна умеет все  smile 


--------------------
user posted image
Задыхаясь от восторга заниматься чепухой. 
PM MAIL   Вверх
W0LF
Дата 18.6.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Скажем так - ант умеет все, а антенна облегчает ;)


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
math64
Дата 19.6.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Можно попробовать следующим способом:
Код

interface CustomUI {
  void startVibra();

}
class DefaultUI implements CustomUI {
  void startVibra() {}
}
class NokiaUI implements CustomUI {
  void startVibra() { com.nokia.mid.ui.DeviceControl.startVibra(100, 1000) ; }
}
...
static CustomUI customUI;
...
String uiClassName = "CustomUI";
if (isNokia()) 
  uiClassName = "NokiaUI";
customUI = (CustomUI)Class.forName(uiClassName).newInstance();

Из jar для обычных телефонов возможно нужно будет исключить класс NokiaUI (если все классы грузятся при старте мидлета), а если класс грузится только при вызове Class.forName()
то и этого делать не нужно будет.

PM   Вверх
W0LF
Дата 20.6.2007, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Чет я не понял этого варианта...
Как тока девайс увидит апи, с которыми он не сможет работать - приложение не установится.
Нужно юзать обязательно прероцессор! Так как в джаве его как такового нет, то есть псевдопрепроцессоры, которые парсят сорсы перед тем, как отдать их компилятору.
P. S.
Код

Class.forName()

Это метод, который можно юзать тока в cldc11


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
math64
Дата 25.6.2007, 14:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



У меня Motorola C650. Там CLDC1.0 и есть Class.forName(). Если в jar поместить Image.png, переименованный в Image.class, то всё загружается, но Image.createImage ("/Image.class"); не проходит, так что мой метод на нём скорее всего пройдёт (для точной проверки нужно API для Nokia).

Если нельзя пользоваться Class.forName(), то тогда нужно создать три каталога с исходниками: commonsrc для общего кода, nokiauisrc для Nokia, defaultuisrc для прочих телефонов.
В commonsrc помещаем интерфейс CustomUI и инициалзацию переменной переписываем в виде:
Код

CustomUI customUI = new RealUI();

Класс NokiaUI переименовывается в RealUI и помещается в каталог nokiauisrc.
Класс DefaultUI переименовывается в RealUI и помещается в каталог defaultuisrc.
Создаётся проект NokiaProject с исходниками commonsrc и nokiauisrc.
Создаётся проект DefaultProject с исходниками commonsrc и defaultuisrc.

PM   Вверх
W0LF
Дата 25.6.2007, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



Цитата(math64 @  25.6.2007,  14:13 Найти цитируемый пост)
Class.forName().

Да, я не прав был.. не о том подумал...

math64, зачем извращаццо - юзай препроцессор. Ты ж пойми, например у тя в NokiaUI есть ток один метод, который не пойдет на остальных телефонах, а все остальное - норма.. Это тебе с твоей идеей придеццо копипастить 3 почти одинаковых файла, а потом еще и переименовывать их..
а не легче написать 
#ifdef Nokia
...
#endif
?


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
math64
Дата 26.6.2007, 08:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2505
Регистрация: 12.4.2007

Репутация: 8
Всего: 72



Цитата(W0LF @ 25.6.2007,  16:18)
Цитата(math64 @  25.6.2007,  14:13 Найти цитируемый пост)
Class.forName().

Да, я не прав был.. не о том подумал...

Насчёт CLDC прав ты - это у Motorola извращённый CDLC (что-то среднее между CDLC 1.0 и CDLC 1.1, и их эмулятор к NetBeans не прикручивается)
Копипастить и переименовывать ничего не надо - большинство IDE (а также javac) позволяют задавать несколько каталогов для исходников (это не package!)
Можно ещё использовать свойство компилятора оптимизировать if(false) .... :
Код

/** каталог nokiasrc */
public interface Config {
boolean ISNOKIA = true;
boolean ISMOTOROLA = false;
int PHONETYPE = 1;
}


Код

/** каталог motorolasrc */
public interface Config {
boolean ISNOKIA = true;
boolean ISMOTOROLA = false;
int PHONETYPE = 2;
}


Код

/** каталог defaultsrc */
public interface Config {
boolean ISNOKIA = false;
boolean ISMOTOROLA = false;
int PHONETYPE = 0;
}


Код

/** каталог commonsrc */
class MyMidlet extends Midlet implements Config {
  ...
  if (ISNOKIA) {
    ...
  } else if (ISMOTOROLA) {
    ...
  } else {
    ...
  }
  ...
  switch (PHONETYPE) {
     case 1: // NOKIA
        ...
        break;
     case 2: // MOTOROLA
        ...
        break;
     default:
        ...
        break; 
  }
}
 
А какой способ удобнее - нужно выбирать в каждом конкретном случае, использовать ant наиболее универсально, но у меня ты имеешь код на чистой Java и ты можешь пользоватся всеми преимуществами IDE, включая рефакторинг, а в твоем случае IDE будет подсвечивать ошибки на #ifdef ... #endif. Чтобы этого не было лучше использовать стиль Delphi - /*$if(...) */ ... /*$endif */. Но и в этом случае IDE будет считать, что все фрагменты используются.
В большинстве случае отсутствие в Java препроцессора считается преимуществом - это делает более ясным код и упрощает отладку и рефакторинг.
В моём случае тоже можно использовать ant для того чтобы определять какие файлы включать в компиляцию.


Это сообщение отредактировал(а) math64 - 26.6.2007, 08:02
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1887 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.