Разработка под Android
Интересует как складывается ситуация у нас в Украине в этом сегменте. (больше интересует Харьков)
Много всего пишут в инете на эту тему. Одни пишут, что перспективно, другие наоборот.
В данном топике хотелось бы узнать от людей, _занимающихся_ в данном направлении примерно следующее:
— насколько просто/сложно начать писать под андроид,
— реально ли после пары месяцев освоения начать работать,
— приблизительный уровень зп,
Пожалуйста, БФ.
113 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівПерегружаю проект — все загрузилось, package name остался com.example. Просто под Эклипсом с таким не сталкивался :)
КТо может подсказать, как задать package name такого типа?
Решил проблему: idea не читает UTF-8 signature. А стандартный notepad.exe его генерит. Вот этот баг — youtrack.jetbrains.net/...ssue/IDEA-27063 а вот решение: virgo47.wordpress.com/...m-and-notepad2 (хрень, конечно :)
А кто из гуру может подсказать, что лучше: если мне нужно через интент передать данные в пределах приложения (тупо в соотв. броадкаст ресивер) — че лучше использовать: прописывать ключ\значение все в интенте через putExtra, или создать parcellable класс-хранитель, а его уже впихнуть в интент? parcelable — он для IPC был задуман, или чтоб избежать гемора с фантазированием имен ключей?
. Хотя надо посмотреть что за объект. Если 2 поля — то можно и так обойтись.
Можно сделать проще — объявить ваш объект как Serializable и запихивать его в extras интента. И извлекать соответственно
Ооо... Так а вроде Parcelable — это спецом рекомендуют использовать вместо Serializable, чтоб уменьшить накладные расходы на высериализацию / десереализацию ...
Нуда, но для поэкспериментировать-попрототипировать можно сначала и Serializable-модель опробовать, а потом уж и Parcelable. Вдруг окажется, что вполне достаточно двух-трех простых параметров в интенте...
Так меня мучает вопрос именно универсальности решения! А то по-привычке начал сразу писать константы ключей, а потом оппа — вспомнил про parcelable. И вот сижу и думаю — с parcelable все сработало, только полчаса времени потерял, можно было и не заморачиваться на 4 ключа, а с другой стороны — а не моветон ли это? Или это — обсуждение какой молоток лучше-железный или чугунный? Хотя... Все молотки делаются для определенных целей
Цю задачу насправді треба розбити на дві підзадачі.
1) Спочатку визначіться з тим яка абстракція краще моделює ваші дані. Попросту кажучи, чи доцільно ці дані представляти як екземпляр якогось custom класу який в собі інкапсулює всю потрібну інформацію. Якщо ці дані не є сутністю яку «хочеться» оформити за допомогою класу, тоді краще обійтися парами ключ/значення. Тобто тут треба відштовхуватися від самих даних (того чи «варті» вони окремого класу).
2) Якщо ж ви, проаналізувавши ваші дані, все-таки вирішите що для них потрібно створити окремий клас, то в такому разі я думаю що краще використовувати Parcelable. А не Serializable. Так як Parcelable за великим рахунком і був спроектований для задач типу тієї яку ви вирішуєте. Це найбільш природний інструмент зі всіма витікаючими перевагами.
Через parcellable удобнее, хотя если данные простые то первый способ тоже подойдет.
Що значить «удобнее» і «тоже подойдет»?
Якщо мої дані — це екземпляр мого custom класу, то які в мене ще альтернативи крім роблення цього класу Parcelable?
Якщо ж мої дані — екземпляри вбудованих примітивних або вже Parcelable типів, то які в мене ще альтернативи крім пар ключ/значення?
Чи ви хочете сказати, що просто впадло впихувати і випихувати якісь конкретні пари ключ/значення і краще створити для них всіх окремий клас? Ну так якщо цих пар дуже багато або якщо вони впихуються й випихуються в багатьох місцях, то це швидше за все показник того що вони вже давно повинні були знаходитися в окремому класі. І не тому що так їх буде легше передавати, а тому що саме така абстракція є для них правильною моделлю.
постами выше просто давали вредные советы, как передавать данные. Способ универсальный и всегда работает. Но не учитывает одного — в большинстве случев точно известно — данные передаются между двумя активитями в одном процесе, а значит использовать сериализацию (в любом виде) это overhead. Например можно просто создать глобальный и статический SparseArray с нужными обьектами, а в активити передавать индекс в этом масиве(только не забыть позаботится, чтобы данные из него удалялись и без мемори ликов)
Хм...
Ось тут наприклад є деякі аргументи за Parcelable і проти глобального стану:
stackoverflow.com/...tatic-variables
Если хотите задачку на эту тему (использую на интервью) — есть Activity, у нее есть AsynchTask который допустим делает операцию занимающу около 5 секунд (и нигде за предемами активити не нужную, например он создает новый комент на доу :) ), Во время его работы происходит смена ориентация экрана (убивается старая->создается новая активити). И как это нормально обработать? Эта задача тоже сводится к передачи обьектов между активити, но как вы это сделаете?
Так я бы ответил, что это — провтык в манифесте :) Помнится, если в манифест добавить android:configChanges="orientation", то активити не будет убиваться, и мы не будем заморачиваться с восстановлением состояний. оверрайдим onConfigurationChanged и узнаем, какие конфигурации, из перечисленных в аттрибуте изменились, ну и обрабатываем соотв. UI. Или я завалил интервью? :)
обработаеш? если иконки и лейауты разные? Слишком сложно получится.
Та вроде не слишком сложно. Вы ведь в xml описании лэйаута не указываете значения в абсолютных величинах? Скажем, FillParent и так растянется что в портретной, что в альбомной ориентации. А RelativeLayout вообще все по боку, потому что позиционируется относительно чего-то. Лично мне больше нравится способ указания в манифесте атрибута android:screenOrientation, т.е. жестко захардкодить ориентацию экрана :)
Или вы имели ввиду перед убийством активити послать PendingIntent с данными из предыдущего состояния, а при пересоздании активити его впоймать?
Вариант запретить такое поведение — а зачем? тогда нужно будут лайауты править вручную, а представте что оне не идентичны по контролам — напримем в лендскейпе ще показывается дополнительня панелька сбоку. Зачем это если можно просто держать разные файлы в layout & layout-land?
Вообщем если прогама не используею фрагменты, то описание от «гуру» здесь commonsware.com/...n-rotation.html
а в более новых версиях, и в случае FragmentActivity — onRetainNonConfigurationInstance уже депрекейтед и самый простой способ глобальный SparceArray + передавать индекс обьекта в нем через интент.
Большое человеческое спасибо за инфу про overheat и использование индекса в интенте :)
Мне кажется, не всегда оно и нужно, чтобы лэйаут подстраивался под текущий угол поворота экрана (на микрософтовских мобильных ОС до семерки этого не было, и никто как-бы не жаловался). Автоматом ведь он не запоминает значения в интерфейсе, прийдется сохранять каждый, и восстанавливать, и теоретически можно сделать баг. Самостоятельно система ведь не может сохранить/восстановить значения каждого элемента? Энгры Бёрдс как бы тоже лэйаут не меняет :)
Ну так вы их будете и так держать, насколько я понимаю, с одинаковыми именами. Просто, R.layout.somelayout будет указывать или на портретный xml с таким именем, или на альбомный,в зависимости от угла поворота. Ну и если запихнуть в onConfigurationChanged вызов setContentView(R.layout.somelayout) у нас ведь будет меняться лэйаут. Вот чел динамически меняет лэйаут просто вызовом из меню: stackoverflow.com/...7755584#7755584
Мне чего-то не нравится применять AsyncTask, потому что реально загромождает исходник, а тут напрашивается отдельный слой, а не лепить в активити. А мы можем не использовать AsyncTask, а вынести отправку комента в поток в сервисе? Пока активити убивается/пересоздается — сервис ведь будет работать? А обратную связь с сервисом (типа прогресс выполнения, если он конечно нужен для комента) сделать через броадкаст. Мне кажется, это было бы лучше.
В деяких випадках концептуально неправильно використовувати сервіс замість AsyncTask. Як на мене, не можна просто так взяти й використати сервіс просто тому, що так більше подобається. В сервіса й AsyncTask різні ніші. Тому питання про те, а якже правильно використати AsyncTask, є дійсно актуальним.
commonsware.com/books
Кажется в «The Busy Coders Guide to Advanced Android Development» но только описаный там метод сейчас уже не совсем хорош, вызываемая ф-ция стала depricated (а жаль) и вариант с индексом в интенте подсказали в где-то на форумах. Может в следующих их книжках что-то подбное опишут.
Не правильно. Андроид это делает автоматом. Просто создайте примитивную активити с одним едитом (из лейаута), запустити на девайсе, введите текст, потом попробуйте перевернуть экран — активити по умлчанию будет пересоздаватся, но текст в едите останется и дополнительный код для этого писать не нужно :)
В этом случае — да, простые состояния элементов сохранятся и восстановятся, я провтыкал, точно :) А вот недавно делал разноцветную кнопку, у которой в коде меняется background, с изменяющимся текстом, так цвет, увы, не сохранялся. И текст по-моему тоже, если ничего не путаю. Чтоб не заморачиваться — захардкодил ориентацию.
Ні, ви неуважно читали той текст, на який я вказував. Не суть в тому, змінна це чи ні. І у вашому випадку глобальний стан звичайно ж буде. А аргументи проти (не всі, але більшість) підходять ще й як.
Тепер стосовно вашої задачки. Скажу так, що я ще не випрацював для себе канонічну стратегію поведінки в даній ситуації. Але це в мене на порядку денному. Як би там не було, я думаю, цією задачею ви ставите правильне питання. Хоча тема ця специфічна, і вона значно вужча ніж тема передавання даних в activity загалом. Деякі люди взагалі говорять що ідея перестворення activity при зміні конфігурації є невдалим архітектурним рішенням команди розробників Android.
Нет его там. Есть масив, он глобальный, а в нем лежать ЛОКАЛЬНЫЕ обьекты, которые привязаны к конкретной активити через индекс, при пересоздании активити просто передается этот индекс (тоесть подразумевается что фактически передается внутренее состояние ), фактически это позволяет иметь без проблем несколько экземпляров одной активити. Так где здесь “Глобальный Стан”?
хм, вужча? допустим вы хотите передать обьект в котором штук 20 битмапок. Вы действительно думаете что использовать сериализацию/десериализацию разработаную для IPC подходящее решение?
Когда придумаете, поделитесь, а я постояно пользуюсь тем, что описал.
Нормальное решение и легко отключается когда нужно. Ге
А це що по-вашому не варіація на тему глобального стану?
Над рештою подумаю.
Что такое этот «глобальний стан»?
Допустим будет два инстанса одной активити, где у них общий «глобальный стан» в описаном случае? Если вас смущает статическая переменная — можно обойтись без нее — хранить все в Application (что-то вроде псевдокода):
При перевороте экрана просто вызватьgetApplication.storeObject(...) и передать в екстрасах интента полученый Id.
Этот метод можно использовать и при передачи сложных данных между Activities.
Дивіться, я не кажу що те що ви пропонуєте є поганим. Я кажу що можливо воно не таке вже й хороше. Тобто воно має свої недоліки (глобальність стану) і відповідно не може бути якоюсь панацеєю. Бо мені здалося що ви подаєте цей спосіб як мало не єдиноправильний у випадку одного процесу, хоча він напевно підходить все-таки для окремих ситуацій. [А глобальність стану полягає в тому що дані які ви хочете передати є глобальними в рамках аплікації а не локальними для activity.]
Это не единственно правильный, и даже не самый универсальный. Это просто один из простых способов передачи данных всередине программы. Я его привел как альтернативу использования Parcelable который фактически создает копию ваших данных. А кто-то тут вообще в курсе, каковы лимиты памяти у джавишной програмы на андроиде? :) Даже если памяти у девайса 512мб, то на на большинстве девайсов доступно будет не больше 48мб
А обсуждаемый вопрос фактически сводится к тому, как организовывать архитектуру работы с данными, и как выглядит MVC на этой платформе.
А как выглядит MVC на этой платформе? Были у меня мысли, что controller нужно реализовывать в Application, и реализовывать логику в нем по возможности, а активити по возможности использовать только для представления данных, а как говорят гуру?
Ну и где место модели? :)
Не знаю як говорять гуру, але в мене стосовно MVC наступна думка. Первинним є розділення view і model. Controller є вторинним.
Зокрема я вважаю що activity — це «товсте» view. Клас який є макетом використовуваних в аплікації даних — це model (тут як і всюди, нічого нового). А от контроллера може й не бути. Хоча якщо в аплікації є всякі сервіси, асинк таски, ресівери, то я розглядаю їх як елементи контроллера.
Інформація на цю тему доступна й в інтернеті. Якщо поцікавитеся, легко знайдете. Але я не кажу що глобальність тут є кінцем світу, просто напевно це все-таки недолік (хоча в деяких випадках можливо й оправданий).
Я думаю що мейнстрімом для виклику activity є саме Parcelable. І якщо хтось буде використовувати описаний вами підхід в тій більшості випадків, де має бути використаний Parcelable, то це буде погано. Тобто наголос саме на цій ідеї.
Це обговорення почалося з першого поста в якому звучало питання. Я особисто був трохи не згідний з постановкою питання. Бо постановка підрозумівала те що групу величин можна об’єднати в клас тільки для того щоб їх було легше передавати. Тоді як я кажу що те об’єднані величини в клас чи не об’єднані за великим рахунком не є НАСЛІДКОМ того чи вони кудись передаються. Об’єднання/необ’єднання величин в клас є по суті фундаментальним рішеням (ПРИЧИНОЮ) без якого взагалі не можливе існування правильної моделі даних в аплікації. (А розмова про все решта — то вже потім...)
Багато чого наведено тут c2.com/...VariablesAreBad
Від себе додам ще таку річ. Давайте абстрагуємося і проведемо деяку паралель. Виклик activity замінимо на виклик метода, а передачу даних в activity — на передачу даних в метод.
Тоді варіант з Parcelable перетворився б на щось таке (Варіант 1):void doSomething(Type argPassedByValue) {
...
}
А ваш варіант із SparseArray перетворився б на таке (Варіант 2):void doSomething() {
Type argPassedByReferenceValue = Global.Get();
...
}
Цей другий варіант звичайно можна було б покращити, явно виразивши залежність в сигнатурі методу (Варіант 3):void doSomething(Type argPassedByReferenceValue) {
...
}
АЛЕ це покращення можливе тільки в нашому спрощеному прикладі, бо тут ми оперуємо звичайним методом. У випадку ж з activity ми не можемо собі такого дозволити і залишаємося з гіршим варіантом — Варіантом 2. Але ми повинні розуміти що це дійсно нехороший варіант. І якщо нам тим не менше треба до нього прибігати, то значить ми свідомо йдемо на певні жертви. Хоча ці жертви можливо й оправдані (бо інакше ми просто не розв’язжемо поставлену задачу).
Нельзя брать за константку «статически переменных плохо» если не можете обьяснить чем они плохи. Все эти «плохо» были выведены опытом, но этот опыт полученый в разработке под с/с++ не всегдя релевантен к джава разработке. И по факту имеем, что ни один из пунктов из списка не подходит.
Кстати, а перед убийством активити будет вызываться onSavedInstanceState ? Нет в данный момент среды разработки под рукой, чтоб отдебажить :( Просто, ничего плохого не будет ли, если индекс массива поместить в bundle, прооверрайдив этот метод, а потом при создании новой активити — в методе onCreate мы этот индекс считаем?
будет, а в нем можно использовать isChangingConfigurations() чтобы определить причину по которой он вызвывается.
Не стоит выполнять сетевые операции в контексте активити, создавайте для этого Сервис. IntentService оч четко подходит как раз для этого.
Кроме переворота может входящий звонок прийти, та и много чего другого.
есть четкое видео с google io 2010
А никто не в курсе, как дела у Гугла с Ораклом по поводу лицензий java в Андроиде? Без троллинга, мне интересно что будет если Оракл все же выиграет этот патентный бой?
Ораклу выгоднее дружить с гуглом, отжав немного денег, которые пошли на покупку Sun, и которые Гугл пожмотился отстегнуть-купить Sun , и не иметь проблем. (5 миллиардов — ёлыпалы, за Sun).
fosspatents.blogspot.com/...ch/label/Dalvik
Делов то — будем писать натив код, используя NDK :)
Врядли тут будут серьезные проблемы. Просто Oracle денег решил поднять. Давить Android, который качает JVM им скорее всего нет смысла .
Oracle отозвал лицензии на JDK из Debian/Ubuntu — тоже никакого смысла это делать не было. Проблема то решается самостоятельной установкой JDK, но чем это не прецедент на то, что у Oracle свой взгялд на развитие и распространение Java?
А недавно еще обьявление в рассылке — пакеты вообще удалять, и создадут пустой пакет, который при включеном автоматическом обновление просто сотрет джаву. Вообщем, если у кого-то включены автоматические обновления в убунте — отключайте их быстрей. В серверной версии они отключены по-умолчанию, кто включил — сам виноват.
Но на данный момент на линукс сервере с openjdk6 андроид приложения собираются.
Можно открыть виртуальный банковский счет в америке, и зарегистрироваться в гугль как американский гражданин.
После этого будет доступен платный раздел для размещения приложений. Верификацию аккаунта можно сделать в помощью виртуального банковского счета.
Вот как то так.
Гугел чекаут на эту тему говорил, что по своему соображению может потребовать при валидации TaxID, номер водительских прав и т.д. При этом естественно все всплывет, и они
отрежут яйцапрекратят с тобой сотрудничать. ИМХО, не стОит себя выдавать за американского гражданина.правильно ли я понимаю, что если я регистрируюсь Google как разработчик из Украины, то могу выкладывать игры/программы только в категорию бесплатные?
И эти игры/программы будут доступны для всех стран?
Да
Вот например сейчас нельзя из Украины размещать платные приложения доступные для скачивания в США.
Варианты найти себе партнера из числа «поддерживаемых» стран, или воспользоваться услугами паблишера — уже знаю. Интересует именно как из Украины собственными силами разместить платное приложение в андроид маркете. Есть ли какой то воркэраун?
Регишься и получаешь библиотеки для монетизации по СМС
Спасибо!
могу помочь с паблишингом при минимальных потерях бабла.
Это интересно. Как можешь помочь? Сколько потери?
Минимальные требования: Опыт разработки программных продуктов от 5 лет (С++ под Linux желательно), минимальный опыт с Android, английский на рабочем уровне (могу писать, говорить, понимать). С разрешением на работу, визами, переездом компания работодатель помогает успешным кандидатам.
В ближайшее время представитель компании будет проводить собеседования в Киеве.
Если есть заинтересованность: [email protected]
p.s. ЗП достаточная для достойного проживания в Торонто.
А Эклипс продолжает херить xml layout’ы, и в упор не видит DTD для menu :(
Там нет DDMS и прочих Эклипсовых прелестей, однако.
Опс, спасибо — попробую :)
IDEA 11 — ТО ЧТО НАДО, спасибо, чувак!
удачи!
не замечал. разве что при изменение типа контрола, иногда бывал неожиданный эфект, но легко исправляется руками. А что с дтд для меню? сморю проект — там даже ворнингов на менюшку не пишет.
Может, после включения фолдинга появился такой эффект, но эффект — довольно неприятный: тупо пропадает строчка. А потом — появляется. А потом снова пропадает. Ужас. Соотв., xml становится невалидным. На моей версии у меня стабильно воспроизводится, на последнем апдейте Эклипса Галилео. А с DTD — так он не то, что не пишет ворнингов — у него не срабатывают выпадающие списки вариантов. А также, попробуйте в Эклипсе форматнуть XML (CTRL — Shift — F) и вы увидите, какая получается каша.
В общем, Idea все решила. Хоть визуального дизайнера лэйаутов у нее нет (оно в принципе и не надо, все руками хорошо набивается, были бы всплывающие варианты, чтобы поначалу ориентироваться в возможностях — по памяти все не упомнишь), но зато в окне визуализации он отображается корректно! Додправил айтемы в стилях — четко визуализация обновилась. Да, и попробуйте в эклипсе режиме дизайна лэйаута поработать с TabHost, TabPage. Не помню подробностей, но у вас выпадет ошибка по поводу ошибки в binary xml файле контрола. С ними нужно работать только кодом, и только на TabActivity :) И календарик, который работает только на третьем андроиде, а при указании второго апи появляется тоже. И тоже падает с ошибкой :)
ИМХО, Idea по удобству очень похожа на вижуал студию :)
Меня в Эклипсе ужасно раздражает постоянное пропадание коннекта с эмулятором. Часто проблема решается только перезапуском самого Эклипса.
Самсунг набирает джавистов для разработки андроид-приложений. Мин. зарплата — 500$. Это нормальная зарплата для начинающего джуниора с квартирой. =) г.Киев
Скажите, пожалуйста, где можно найти информацию по этому поводу?
в Киевский офис самсунга отправь резюме
или они Андроидом — тоже занимаются.
Поделитесь инфой, плз.
Капитан очевидность сообщает, что самый популярный андроид смартфон самсунг гелакси 2 выпускает самсунг.
так то железо. под него пилят эмбеддеры.
В русский школа я ходилЪ! Эмбеддеры пилят из ZTE или таки в самсунге?
и под них я пишу прикладной софт для нашей русской школы.
Вопрос задан о прикладном программировании а не эмбед.
Киевский Самсунг набирает джава андроидеров для разработки своих приложений?
Вот об этом хотелось бы узнать подробнее.
Вообще то Андроид это не только эмбеддед, но и фреймворк левел, который основательно перепилен самсунгом + апликейшен левел. И, что характерно, у самсунга есть свои апликухи.
Коментар порушує правила спільноти і видалений модераторами.
а у них это зарплата от минимального уровня будет подыматся с такой же скоростью, как и скилы програмиста?
Коментар порушує правила спільноти і видалений модераторами.
Коментар порушує правила спільноти і видалений модераторами.
много проектов по портированию айфон-аппликух и игрушек, — это на любителя.
В продуктовых компаниях набираются тимы для создания андроид-морд к уже давно существующему продукту.
есть проекты с нуля — имхо, это возможность реализоваться.
в целом, как-то динамично .
Есть смысл стремиться, выбор направления нормальный.
З\п для джуна небольшая, а с2-3 летним опытом на Джаве может чуть больше, х\з.
Влиться достаточно просто, главное внимательно изучить основные элементы системы. Иначе потом будете ронять челюсть, понимаю, сколько всего упустили(говорю по собственному опыту)))
Если есть опыт разработки(а лучше опыт в отрасли мобильных систем), то вполне не сложно устроиться, так как средний уровень не очень высокий — требовать тоже много не должны.
На счет зарплат ничего конкретного сказать, увы, не могу
А вот тут
www.developers.org.ua/...droid-engineer
www.developers.org.ua/company-db
Вакансия видимо
Mobile developer/eBuddy.com
С требованиями:
Просто я в данный момент имею стабильную работу, пишу на Java. Но хочется попробовать фриланс вариант работы под мобильные платформы. Есть Android дивайс, базовые знания платформы, опыт в Java. Но как начать зарабатывать на этом? Почитал описания маркета, отзывы людей. Слишком уж много ограничений, муторная система размещения приложений. Многие пишут что работают себе в убыток. Правда ли это?
Есть еще вариант, to be hired. Но для этого ставят зачастую условие «несколько аппов на маркете». Получается замкнутый круг.
Под Android выгодно программировать, фрилансить и аутсорсить, но только не пытаться заработать самостоятельно с продаж своего продукта. При удачном стечении обстоятельств заработаешь вагон опыта (который увеличит размер ЗП) и скопишь на ноутбук за пол года продаж. К сожалению деньги проще заработать (с продаж своего продукта) на iOS a не на Андроиде. Именно «проще» а не «просто»! :)
>> Под Android выгодно программировать, фрилансить и аутсорсить, но только не пытаться заработать самостоятельно с продаж своего продукта
Так и хочется спросить-а на чем тогда зарабатывают те,кто приложения аутсорсят? Илт мы просто чего-то не знаем?
Ага, не пытаться, а отдать это профессионалам вроде вас? :))
А обосновать?
Тут такая штука — во первых смартфоны/планшеты, это устройства потребления контента. Тоесть сама программа на них никого не интересует (за исключением утилит), интересует контент, который предоставляется через программу. А это значит что разработка програмы, у которой контента нет лишена смысла. А контент — это сайт и многое другое. Получается что мобильный клиент это часть большого проекта, который проще сразу сделать под айфон/андроид. А расчитывать на кучу бабла с простой поделки наивно.
Второй полюс — разработка игр, но их тоже имеет смысл делать сразу под 2 платформы.
В андроид маркете самая демократичная и простая система размещения из всех что есть. И самая быстрая. Попробуй что-то разместить под айфон или симбиан и сравни впечатления. Хз, в убыток себе никто работать не станет. Но заработать ощутимую сумму действительно проще заказной разработкой, чем размещая платные приложения (особено учитывая что в Украину они деньги не выводят, хотя в РФ это уже возможно) или размещая рекламу в бесплатных.
Так напиши пару простых приложений и выложи их для портфолио. В чем тут проблема?
Ага, у нас тут есть пацан, он мерсы одной отвёрткой ремонтирует, Копіпаст — форева.
Про IDE — нет, на самом деле ide не требуется. Можно и в vi все писать или в не-эклипсе все настроить (у меня, например — NetBeans)
Это такая шутка или NetBeans и вообще все , что «не-эклипс» уже не ide?
-
или этот ответ здесь по ошибке?
-
мое высказывание содержало в себе сарказм над комментируемой фразой, составленный в форме вопроса.
я ничего не утверждал и ничего не отстаивал.
да, очевидно недопонимание
зачем этот садо-мазо с вимом или нетбинсом? еще понятно, елибы Idea заточеную для андроида использовали. Еклипса — родная среда разработки, ей и нужно пользоватся.
Раз уж Эклипс упомянули... Вот у меня стоит Eclipse Helios, последние апдейты накатываются автоматом. Только привык к нему и его хоткеям — вчера увидел ужасный баг: тупо скрывает некоторые строки, может, это связано с тем, что у меня включен Folding (аналог разворачивающихся регионов в Студии). Значит, смотрю — переменную я декларировал, А ЕЕ НА ТОМ МЕСТЕ НЕТ!!! Я делаю поиск — он не находит. И НЕТ ошибок при компиляции. Я фигею, и прописываю снова — он мне ругается, что, мол, дублирование. Я присмотрелся на номера строк, которые к счастью у меня выведены — А ТАМ — ТУПО НЕТ НЕКОТОРЫХ НОМЕРОВ СТРОК! Я начинаю от безнадеги удалять пустые места на предыдущей строке (мало ли, может куда закотилась) — и о чудо — появляется искомая строка, появляются сокрытые номера строк. А потом сделал пару раз открытие регионов — пля, опять пропадать начали. Это просто даже не ППЦ, а полный ППЦ. Гуглю — ничего не нахожу. Нахожу лишь туеву хучу багов в багтрекере Эклипса. Ужас.
Или такая херовина: возьмите, и поставьте брекпоинт на декларировании класса (в частности, на классе активити) А потом будете приятно удивлены, что активити при отладке не запускается, а внутри далвика стреляет эксепшн :)
Эклипса сакс, но она содержит родной гугловый плагин (драйвер),
который много чего может. Но навигация в Эклипсе — фу.
Потому кодить приятнее в Идее.
www.allapplabs.com/...e_shortcuts.htm
Например, для выведения всех референсов всю жизнь нажимал правую мышу + Find all references, а в Жклипсе — это только додуматься: контрол, шифт и G
Там довольно хорошее Java API, по сравнению с другими мобильными платформами — просто сказка. Я небольшое приложение на Android (tariff-plan-optimizer: www.gradsoft.ua/...mizer_rus.html написал параллельно с осваиванием API где-то за месяц/два, параллельно с основной работой
— реально ли после пары месяцев освоения начать работать,
Да
— приблизительный уровень зп,
Этого не знаю (у меня другое структрирование доходов), мне кажеться на рынке сейчас что-то типа Android Buble, так что сейчас зарплаты должны расти, а потом упасть и стабилизироваться.
И работодатели не замечены в том, чтобы переплачивать за знание андроида.
А вот грамотных програмеров под андроид действительно еще не очень много, нанять сложно
согласен — это не пузырь.
андроид востребован реально.
там, где есть веб морда, прикручивают ещё и андроидальную.
ну и всякоразные игрушки-фигнюшки тоже.
Дело в том, что не захватят, потому что их маркет уже завален фигнёй как и у яблочников. Сама идея интернет-базара приводит к снижению планки ПО, и люди отворачиваются от этого запаха
Судя по тому что я видел по их планшетам, скоро они зохавают рынок сей.
Ну кусок на два метра и есть программа, на джаве за вас все написано
А там вроде ведь нельзя на чистом С++ писать, можно только кусок логики засунуть в С++, но джава тоже должна присутствовать?
там, где требуется пифоманс — транскодеры, sip, итп
посмотри опенсорсный Linphone, xuggle
если интересно.
а вообще Джаву SE надо сильно понимать, чтоб полностью приложение под Андроид создать. ещё TCP, Networking, mutithreading
если быстрые проги, то С++ с тем же эклипсом
если отвращение к ИДЕ, тогда лучше не андроид
Есть еще такой вопрос: На какой среде разработки остановиться, да и что лучше для разработки под данную платформу? С++ или Java?
alon4ik, если еще есть интерес, и работу по Андроиду не нашел, постучи ко мне в скайп.:)
Обычный фрилансер врядли что-то заработает просто выложив на маркет, тут нужна реклама, связи с операторами, обзоры на специализированных сайтах, имидж разработчика, а маркеты и так засраны всяким трэшем.
И тем не менее, вот как приложению сделать 50 000 загрузок? Его нужно постоянно пиарить? нужно составить правильный промо-текст для маркета, который будет правильно хавать поисковик маркета? Видел дофигища бесплатных приложений, у которых скачка перевалила за 50 000
Просто в инете много противоречивых высказываний в сторону маркета и вообще...
Каким образом вообще зарабатывают фирмы, типа геймлофта, окторые специализируются на этом направлении? Неужели рпосто пишут игрушки и выкладывают на маркет, как бы делал и обычный фрилансер, сидя дома?
2. реально. можно и быстрей, на осваивание андроида на базовом уровне у меня ушло 2 недели, паралельно с основной работой, но у меня было опыт работы с другими мобильными платформами.
3. не в курсе про Харьков, но работы под андроид намного меньше чем под j2ee.
можно относительно быстро начать и без знаний джавы (но со знаниями другого ЯП и опытом программинга). Тогда 2−4 недели на джаву, и 2−3 недели на Андроид (и на закрепление джавы), в общем через 1−1, 5 месяца можно приступать.
Сам месяц назад начал писать, за этот месяц написал две программы и пишу сейчас игру :) Хотя раньше писал на С++ и С# которые вообще к мобильным платформам не имели отношения.
— просто как два пальца обосцать — с жаба бекграундом можно начать через две недели, без него не советую вообще — 0, 5 — 4 кб зависит от того что вы можете и на кого вы работаете