Войти
AndroidФорумОбщее

Советы новичку. Перешел с Делфи.

Страницы: 1 2 3 4 Следующая »
#0
14:48, 28 фев. 2013

Много лет опыта на Делфи(+1С+php), и... решил попробовать себя в андроиде.
Общее мнение:
1) непривычно - половина любимых (простейших) функций не работают даже в редакторе Еклипс (глючит драг мышкой, вечно выпрыгивают не нужные мне на данном этапе подсказки при проведении мышки над текстом)
2) не понятно - ява довольно далека от делфи
3) жутко медленно - привык что за минуту могу 2-3 раза перекомпилировать проект и перезапустить для проверки результата, а тут 2-3 минуты до перезапуска проекта на эмуляторе (который открывался минут 10) после исправления одной запятой.
Но пытаюсь привыкнуть... Пока о написании игры даже не мечтаю - пробую работать с азами - формы, виды, кнопки, файлы, SQLite... Мечтаю что смогу использовать свои наработки на Делфи через Lazarus(не охота портировать все уже сделаное на Яву или на С++), но как советовали сдесь-же "прежде чем программировать на С++, разберитесь с обычной работой на Java".
Теперь собсвенно вопросы(по мере появления новых буду добавлять):

1) Создал класс ToLog для записи нужных мне событий для дальнейшего анализа. Можно ли (и как) обьявить его только один раз, а не в каждой процедуре/фукнкции?

  import org.myprj.utils.ToLog;
  ...
  ToLog rrr = new ToLog("");
  rrr.add("добрались до чтения файла");
  ...
  rrr.add("добрались до записи файла");
 
  Как выкинуть из кода строчку: ToLog rrr = new ToLog("");
  Каждый раз обьявлять надоело... в каждом классе, в каждом методе, желательно в начале и только один раз... А после окончании отладки "вычищать"... как бы обьявить ее в модуле вроде CONST как глобальную?

2) Есть ли возможность в Еклипс делать "маркеры" на которые можно по быстрому перемещаться. В Делфи это делалось при помощи Ctr+1/Alt+1, Ctr+2/Alt+2, Ctr+3/Alt+3... 10 маркеров обычно с головой хватало, а теперь... приходиться вставлять строку
// TODO:
чтобы она отобразилась на "карте" и мышкой на нее прыгать (по синим кубикам) что-бы побыстрому перескочить.
В 1С маркеры все одинаковые и по ним можно циклично перепрыгивать по F2 (Alt+F2 - назад), а устанавливать через Ctr+F2.
Подобная функция встречается во многих редакторах (вроде Notepad++), но не в Eclipse... В горячих клавишах уже искал, но увы.

3) Можно ли ускорить запуск программ? Сколько секунд/минут у Вас уходит на перекомпиляцию проекта и запуска его для отладки? Можете замерить? Сильно ли ускорится если буду работать не с эмулятором, а с "железом" (подключу телефон на андроид)? По моим прикидкам перезапуск самой программы на эмуляторе занимает 1/2-1/3 времени компиляции. Сильно ли ускорится эта часть при увеличении "ядер" процессора (с 2х до 4х)?

4) Обьясните принципы работы отладчика. Что нужно чтобы увидеть промежуточные данные, можно ли понять причину поломки программы(глобальная ошибка "приложение не отвечает, закрыть/подождать?")?

5) Как Вы делаете резервные копии проекта? SVN или простая копия папки проекта? Достаточно ли сделать копию/архив папки? Тяжело ли его потом востановить? Тяжело ли востановить архив в другую папку как "прошлая версия" рядом с основной для выбора "какую запустить" (что-бы посмотреть какая версия лучше).

6) Реально сделать самообновление программы без Гугла? Нажал кнопку - скачался новый резлиз с сайта и запустился на обновление. Осталось нажать "согласен установить поверх прошлой". Или даже все проделать скрытно от пользователя "идет обновление 45%.... новая версии программы установлена"

7) Работали ли Вы когда-нибудь с "обсфукцией" - "замусоривание" и кодирование кода для "усложнения" понимания. Тяжело ли подключить? Какой принцип использования? Делается копия проекта, подключается рядом с основной, копия "замусоривается" и компилируется? Что-бы не испортить рабочие исходники.

8) Можно ли напрямую поработать с файловой системой андроид-эмулятора? Например моя программа создала ТХТ-файл. Можно ли его открыть в проводнике/тоталкомандере по сети без "танцев с бубном"?

9) Обьясните принципы подключения чужих исходников рядом с рабочим. Не опасно ли это для основного проекта? Почему когда я сказал при подключении "скопировать" исходники из старой папки в workspace меняются исходники в старой папке? В Делфи(да и в С++) есть файл для описания "проекта"-*.DPR. Теоретически AndroidManifest.xml является его аналогом в Андроиде. Можно ли обойтись без импорта проекта в список "подключенных проектов". Тяжело ли настроить компиляцию программы через BAT/CMD-файл без Еклипса?

10) Тяжело ли сделать независимую библиотеку под андроид? Аналог "*.dll"? Слышал в яве можно подключать классы "горячим методом" и отключать их после использования. Возможно ли подобное в Андроиде?


#1
14:59, 28 фев. 2013

Говорите много опыта в программирование, а гуглом не можете воспользоваться.

1) http://stackoverflow.com/questions/2018263/android-logging
2) http://www.luisdelarosa.com/2005/02/16/eclipse-tip-use-bookmarks-… in-your-code/
4) http://stackoverflow.com/questions/5330663/why-dont-i-see-local-v… ng-in-eclipse
5) SVN, hg, git, ...
Остальное все в гугле.

#2
15:19, 28 фев. 2013

Tester64
> Мечтаю что смогу использовать свои наработки на Делфи через Lazarus
ZenGL позволяет собирать приложения на паскале под андроид. При этом знать яву вообще не надо, ну и отлаживать намного проще, т.к. тот же код можно собрать и под винду. Примеры там тоже есть.

#3
15:57, 28 фев. 2013

Tester64
Такое ощущение, что вас из начала 2000-х в наше время телепортировали.

Теперь по порядку:
1. Эклипс, по моим собственным наблюдениям, жутко тормозное говно, не предназначенное для разработки. Но я пишу на С++/NDK.
2. Купите себе книжку Г.Шилда и для начала выучите минимально язык. На этой уйдет один месяц, но он сэкономит вам несколько месяцев во время разработки.
3. Ускорить запуск программ с помощью подключения хардварного девайса вряд ли получится. Я вышел из этой ситуации создав слой абстрацкии над android-специфичными функциями, реализовал их для десктопа. Теперь основное тестирование провожу прямо на десктопе (вы ведь уже перешли на нормальную ОС?).
5. Используйте git. Для начала можно без бранчей и т.п. Резервное хранилище тоже не забывайте, но история изменений порой очень даже помогает.
6. Реально, но вам до этого еще предстоит дорасти.
7. Сомнительная штука. Боитесь, что ваши бесценные поделки превратят обратно в Java код? Раскрою страшную тайну, чтобы заставить его работать даже немножко по другому денег придется угрохать еще больше, чем написать все по новой.
9. У меня настроенна компиляция через .sh файл. Сложно там совсем ничего нет, но надо будет разбираться. Если интересно - могу поделится опытом.

#4
16:25, 28 фев. 2013

>3) жутко медленно - привык что за минуту могу 2-3 раза перекомпилировать проект и перезапустить для проверки результата, а тут 2-3 минуты до перезапуска проекта на эмуляторе (который открывался ми
Не пользуйся эмулятором, уважай себя, это извращение и мазохизм.
>Сильно ли ускорится если буду работать не с эмулятором, а с "железом" (подключу телефон на андроид)? П
Несравненно сильно. (Ну конечно на десктопе быстрей, если используешь libgdx, например, то запросто можно большую часть времени довольствоваться десктоп-версией (пока не понадобится мультитач).

>7) Работали ли Вы когда-нибудь с "обсфукцией" - "замусоривание" и кодирование кода для "усложнения" понимания. Тяжело ли подключить?
Да, чисто ради интереса, правда это было с java-приложением. Обфусцировался уже байт-код, т.е. в проекте ничего менять не приходилось, так что не тяжело. Наверняка есть и для android такой вариант.

>5) Как Вы делаете резервные копии проекта? SVN или простая копия папки проекта?
Мне нравится mercurial на bitbucket.
>Достаточно ли сделать копию/архив папки
Достаточно, проблем быть не должно если пути внутри относительные.

#5
19:40, 28 фев. 2013

trex
> Я вышел из этой ситуации создав слой абстрацкии над android-специфичными
> функциями, реализовал их для десктопа. Теперь основное тестирование провожу
> прямо на десктопе (вы ведь уже перешли на нормальную ОС?).
+1.
Можно и без "нормальной ОС", можно и в МСВС под виндой тестировать. Правда с шаблонами иногда бывают приколы из-за некоторых вольностей Студии.

#6
20:21, 28 фев. 2013

>Купите себе книжку Г.Шилда и для начала выучите минимально язык
Спасибо за книжку. Уже скачал, уже читаю...

Гуглом пользоваться умею, но не знаю ЧТО искать - не хватает "понимания"

>вы ведь уже перешли на нормальную ОС?
Увы нет! :( Пока рано! Никсы знаю плохо. Под Вин куча наработок, утилиток, 2 монитора (один для инструкций, другой для работы). Переходить пока рано. Кроме андроида применить по работе нигде не могу. И что ни говори, но Вин имеет более удобный интерфейс.

> http://stackoverflow.com/questions/2018263/android-logging
прочитал, но увы понял мало! :( Можете своим словами обьяснить(реальный пример или пара терминов из Ява-ООП для правильного поиска) - Как создать класс для Лога только один раз на все приложение? Не хочу создавать его в каждой процедуре! Если я правильно понял пример по ссылке помогает глобально отключать и включать лог.

Пока для себя открыл чужой (опенсорс) проект и пытаюсь его доработать "под себя". Вычитаваю код, пытаюсь понять связи, вставляю свои мелкие поправки.

ZenGL штука крутая, но я пока не знаю как кодить под Лазарус на Андроиде. Сначала решил разобраться с простыми приложениями, понятием ява-класса. Слышал что код, написаный на лазарус оформляется в некое подобие "*.о" библиотек и упаковывается в java-class. Но я до этого еще не дорос! :(

> Сомнительная штука. Боитесь, что ваши бесценные поделки превратят обратно в Java код? Раскрою страшную тайну, чтобы заставить его работать даже немножко по другому денег придется угрохать еще больше, чем написать все по новой.
Пока не боюсь(еще года 2 точно нет), но если придумаю что-нибудь стоящее, то не хотелось бы делиться своими идеями с конкуретами. :)

#7
21:20, 28 фев. 2013

Tester64
> ZenGL штука крутая, но я пока не знаю как кодить под Лазарус на Андроиде.
> Сначала решил разобраться с простыми приложениями, понятием ява-класса. Слышал
> что код, написаный на лазарус оформляется в некое подобие "*.о" библиотек и
> упаковывается в java-class. Но я до этого еще не дорос! :(
    Там примеры для андроида в комплекте. Никакой явы и прочего знать не надо (если хватает функций самого ZenGL - т.е. спрайтовой графики, вызовов opengl и работы с файлами). Я вот и сейчас ничего об андроиде не знаю, тем не менее успешно собирал под него приложения.
Вкратце - на Lazarus собирается dll библиотека (в андроиде\линуксе она называется so) и ее использует короткая программа на Java, которая уже написана автором ZenGL и просто вызывает твои функции. Для пользователя движка это выглядит как нажатие кнопки "компилировать" в Lazarus, переключение в эклипс, нажатие кнопки "запуск".

Но если планируешь приложения с GUI, а не только чистый OpenGL делать - то да, можно и явой заняться.

#8
22:45, 28 фев. 2013

TarasB
> Можно и без "нормальной ОС", можно и в МСВС под виндой тестировать
Там придется больше абстракций делать. В нормальной ОС все же удобнее получается.

Tester64
> И что ни говори, но Вин имеет более удобный интерфейс.
У linux может быть какой угодно интерфейс, в том числе и на 99.(9)% повторяющий виндовый.
Но лепить туда виндовый интерфейс при наличии gnome2 MATE - это вершина глупости.

Tester64
> Как создать класс для Лога только один раз на все приложение?
Ищите в яндексе паттерн синглтон, реализованный на Java. Примеров в сети - чуть более чем 100500 штук.

#9
0:01, 1 мар. 2013

trex
не пугайте Дельфийца "нормальной ОС". Для него (как и для большинства впрочем) Винда - самая нормальная ОС.

> Эклипс, по моим собственным наблюдениям, жутко тормозное говно, не
> предназначенное для разработки. Но я пишу на С++/NDK.
Эклипс вовсе не говно. Это конечно не студия и не Дельфи, но работать в нем вполне можно и даже эффективно. А уж то, что Ява в разы проще C++ и NDK, так про это вообще молчу.

Tester64
> не понятно - ява довольно далека от делфи
Всяко ближе чем тот же С++. Мне в свое время было жутко неудобно на С++  переходить после Delphi , а переход с С++ на Java - проще простого.

Tester64
> жутко медленно - привык что за минуту могу 2-3 раза перекомпилировать проект и
> перезапустить для проверки результата, а тут 2-3 минуты до перезапуска проекта
> на эмуляторе (который открывался минут 10) после исправления одной запятой.
> Но пытаюсь привыкнуть... Пока о написании игры даже не мечтаю - пробую работать
> с азами - формы, виды, кнопки, файлы, SQLite... Мечтаю что смогу использовать
> свои наработки на Делфи через Lazarus(не охота портировать все уже сделаное на
> Яву или на С++), но как советовали сдесь-же "прежде чем программировать на С++,
> разберитесь с обычной работой на Java".

быстрее, чем Дельфи вообще ничто не компилирует, так что к этому придется привыкнуть. Тестирование не на эмуляторе, а на реальном устройстве во многом решит проблему скорости запуска (10-15 секунд вместо 2-3 минут). На андроид, игры ИМХО даже проще делать,чем приложения с формочками и кнопочками (по удобству Формошлепания у Дельфи нет конкурентов), редактор GUI в эклипсе никакой после Дельфи. Если писать не под андроид, то лучший GUI-редактор у NetBeans.

Tester64
> Работали ли Вы когда-нибудь с "обсфукцией" - "замусоривание" и кодирование кода
> для "усложнения" понимания.

забей.


Tester64
> ZenGL штука крутая, но я пока не знаю как кодить под Лазарус на Андроиде.
ZenGL - просто отличная вещь. Особенно если Яву учить влом. Хотя лично мое мнение, по удобству программирования на первом месте - Ява, на втором, с довольно большим отрывом - Object Pascal и производные, а на третьем с ОГРОМНЫМ-ПРЕОГРОМНЫМ отрывом - С++. Хотя по скорости самих программ все точно наоборот.
Так что если хочешь быстро въехать и начать что-то делать - Ява лучший вариант, а когда не станет хватать производительности - бери С++ и NDK (хотя лично у меня такой момент еще не настал, а для "не игр", наверное не настанет никогда).

#10
1:30, 1 мар. 2013

DekaSoft
> не пугайте Дельфийца "нормальной ОС"
Начал человек стереотипы свои рушить, выбираться из зоны комфорта в которой, судя по ЯП, провел достаточно много времени, так пусть пробует двигаться вперед по всем фронтам, развивается, открывает новые горизонты.

Кроме всего прочего писать под андроид, как мне показалось, в linux все же проще, чем в винде. Но могу очень сильно ошибаться, т.к. винду видел последние года 2-3 только на картинках.

#11
1:33, 1 мар. 2013

оффтоп.

+ Показать

#12
1:56, 1 мар. 2013

Re: offtop

+ Показать

#13
2:21, 1 мар. 2013

offtop

+ Показать

#14
7:26, 1 мар. 2013

Tester64
> 7) Работали ли Вы когда-нибудь с "обсфукцией" - "замусоривание" и кодирование
> кода для "усложнения" понимания.
Правильно будет обфускация (а не обсфукция :).

Декомпилировал, оптимизировал и запустил не один обфусцированный проект. Основных подхода к обфускации есть два:
- порча метаданных.
- запутывание кода.

Первый, меняет исходные имена классов, методов и прочих переменных на ничего не значащие сочетания букв. Таким образом прячется исходник и остается голый код, работать с этим кодом можно, но муторно. Эффективность, средняя. Для GUI-приложений имена можно восстановить, отследив связь с именами элементов управления.

Второй, соответственно, превращает код в не читаемый набор циклов и не исполняемых блоков (мусора). Вопреки расхожему мнению существенно снижает производительность, расходуя время оптимизатора jit или vm. Эффективность низкая, снимается такая защита пропусканием модуля через любой оптимизатор кода.

+ Показать

Собственно, если надумаете прятать код, то прячьте имена. Запутывать и замусоривать код бессмысленно, неэффективно и чревато снижением скорости исполнения.

Страницы: 1 2 3 4 Следующая »
AndroidФорумОбщее

Тема в архиве.