Коротко о главном: 1) Мобильная разработка - это весело. 2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.
А также о неглавном: 3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити. 4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия. 5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.
Отдельного упоминания стоят: 1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу: Интернет-ресурсы 1) http://developer.android.com/index.html Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта. 2) http://stackoverflow.com/ Пользуюсь чаще чем первым сайтом. Можно найти практически все. 3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже. http://startandroid.ru/ и http://developer.alexanderklimov.ru/android/ Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить. 4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять. 5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну 1) The Busy Coder’s Guide to Android Development - в отличии от остальных книг она обновляется, а так как ведро не стоит на месте а хуярит семимильными шагами, то я бы и не советовал другие книги.
А теперь, так как заебали уже всех, гайд для: >"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com. Можно Эккеля "Философия java" почитать. Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе. Энтри лвл. 1) ООП - сам принцип нужно именно понять, так как ооп язык. 2) Типы данных. Примитивы и ссылочные. 3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности. 4) Дженерик типы, они как раз юзаются в коллекциях. 5) Классы/интерфейсы и все вытекающие. Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше 6) Потоки ввода/вывода (streams). Не путать с тредами(threads). 7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable. 8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной. Уже сделаешь что-то нормальное.
Дальше. 9) Работа с Sqlite, нужна будет в любом случае. 10) Работа с json. Привет клиент-серверка.
>>790312 (OP) Я кстати на новую работу вышел, можете поздравить. Правда проект говно и написанный без мною любимых либ(даже ретрофита нету ебать). Но хоть деньги дают.
Алсо, вообще уже не верю что можно попасть в годную команду с годным проектом.
Там экстеншенов добавить, а еще здесь null-safe оберточку - и вот уже не так противно.
P.S. А вот обмазывание либами - это от лукавого (как в JS фреймворки - компенсация кривого языка). В котлине все решают расширения + свои DSL + ну может еще "чисты функции" (но это уже функ. изврат).
>>790315 анончик грац тебя. раскажи что делают в офисах я же так понял ты в офис какой то устроился? программисты под андройд? я нюфаг который только учится и поетому очень интересно.
>>790348 Бампаю вопрос. Другой анон. Работаю на джаве в офисе и представляю себе что делаю джависты в офисах- большие тырпрайз проекты жирным компаниям. Но ведь андроид- это небольшие приложухи. Что делают офисы- много мелких проэктов? откуда они берут заказчиков? вообще как то все слишком абстрактно в сфере андройда для меня...
Назрел вопрос: легко ли с веба (spring, EE) на разработку под андроид перейти? И стоит ли это того? Хочу фрилансить и делать свои приложения. Вообще реально на приложения под андроид заказы найти?
>>790312 (OP) Как-то давно пытался сделать приложение на андроид, обмазался мануалами, начал кодить и понял, что это пиздец как сложно. Можно щас как-нибудь просто накодить как в бейсике простую программу?
Сап, хочу сделать приложение, в котором, например, есть база данных с информацией о каком-то товаре, и чтобы после нажатия на товар перекидывало на активити с информацией о нем. Но ведь приложение будет весить очень много, если хранить все активити для каждого товара из базы данных. Как можно сделать, чтобы активити с информацией выводилась из базы данных только с подключением к интернету? Как-то подключать базу данных к серверу или ещё как-то? У большинства приложений такое есть. Подскажите пожалуйста, в какую сторону копать?
>>790574 По секрету скажу, в okhttp ты не получишь никаких преимуществ если 1) специально не настроишь nginx на HTTP 2.0 2) раздобудешь SSL сертификаты (советую бесплатный https://letsencrypt.org/ ) Еще у okhttp баг/фича что он требует последней версии OpenSSL и приходится nginx из сорцов собирать.
А когда настроишь (и убедишься по логам что HTTP 2.0 работает), то очень удивишься что это не дало видимого ускорения.
>>790649 > А про остуствие удобных билдеров и интерсепторов тактично умолчал, ок Стоит их упоминать? На Kotlin такой DSL/билдер можно написать строк за 20-50 и столько же на интерсептор (если я буду его вообще юзать)
>>790671 > Можно написать В этом тоже есть проблема, ведь место унифицированного интерфейса сделанного в либе, мы получаем тысячи решений на каждом проекте свой.
>>790711 > в билдерах нет проблемы Проблема только в потраченном на них времени. > мы же джс макаки А ты дохуя не макака. 90% приложений типичная гуй оборетка вокруг рестопараши, и нет никаких проблем в использовании очереденой либы, которая ускоряет формошлепство.
Если да, то можешь спокойно перегружать onAttach(Context). Как видишь в базовом классе (пикрил) один фиг вызывается onAttach(Context), а для совместимости он еще вызывает старый метод.
Интересует, есть ли здесь те, кто имеет работу, а не хочет вкатиться/перекатиться. Чем конкретно вы занимаетесь? Тысячи миллионов приложений уже написано, зачем нужен еще один модный органайзер/мессенджер? Кто и за что вам платит деньги? Как нашли работу? ваканский джунов очень мало
>>791035 А по поводу того, чем буду заниматься... Компания работает с одним большим проектом уже давно, как я понимаю, постоянно добавляя новый функционал и исправляя старые баги. То есть речь не о нескольких маленьких приложениях. В фирме есть Android, iOS и WEB отделы, как я понимаю.
>>791059 Есть небольшой опыт работы, но с другими ЯП, Java и Android больше как хобби, есть несколько учебных проектов, очень простых, уровня уроков с startandroid. Однако знаний хватило на то, чтобы выполнить тестовое задание (получение и отображение данных с одного API, вывод списка и экрана с подробной информацией). После выполнения задания позвали на собеседование, где задавали вопросы конкретно по заданию (про адаптеры, плюсы ретрофит и т.п.). Вообще я считаю, что мне повезло найти подобную вакансию. Вообще, джунов ищут компании, которые отчаялись найти опытных разработчиков в городе, как я понимаю.
>>791035 ОП, он же я как раз пошел на новую работу, позиция мида. Ебет то что и всех прогеров, чужой кривой код а не кривым он быть не может, если там что-то сложнее листа, ебанутые заказчики которые в ротяку ебали материал дизайн и заставляют писать хуйню, сроки за которые ты должен делать кастомные вьюхи и в результате тупо ищешь либы. Сейчас у меня еще и дико жопа горит так как нужно впиливать новый функционал в проект который я вижу второй день, а то и меньше.
>>791110 Ой блять, вортон хоть и норм мужик, но он уже зазнался видимо, пускай лучше расскажет как интерфейсы называть. Вообще после такой статьи у меня впечатление словно у него максимализм какой-то. Все хуевое везде он сделает лучше.
>>791133 > Сейчас у меня еще и дико жопа горит так как нужно впиливать новый функционал в проект который я вижу второй день, а то и меньше. А что не так? Ты собирался два дня просто сидеть и читать код? Серьёзно? Как ещё ты можешь узнать проект, если не получишь реальное задание?
> не кривым он быть не может, если там что-то сложнее листа Не слишком ли категоричное заявление? Если отовсюду воняет говном, то может быть это ты обосрался?
>>791110 Я не вижу аргументов в его сообщении, я вижу "ящетаю". По сути он говорит, почему допустимо отказаться, но не говорит, почему это делать необходимо. Следовательно идёт нахуй.
>>791035 > Тысячи миллионов приложений уже написано А эти кукареки безработного дауна-ниосилятора или школьника.
Да, представь работаю на постоянку удаленно и даже договорился разрабатывать на Kotlin. Программы пишу разные от брендованных "менеджеров личных дел" до игр на libgx.
Cап, погромисты. Подскажите, можно ли начать зарабатывать на андроиде с фриланса? Работаю в другой сфере. знаком с джавой. Часто слышал, что фриланс-это хай уровень, что хуй получится зарабатывать, не имея опыта в офисе и прочее. Время учить много, но работу не хочу менять.
>>791140 >А что не так? Ты собирался два дня просто сидеть и читать код? Серьёзно? Как ещё ты можешь узнать проект, если не получишь реальное задание? Могли бы дать баг фиксить первую неделю, на багфиксинге проект узнаеться чем при создании новых функций. >Не слишком ли категоричное заявление? Если отовсюду воняет говном, то может быть это ты обосрался? Да ты открой любую из гоярчолюбимых либ и почитай сорсы. Везде где есть реализация какой-то логики без комментариев - нечитаемая хуйня на которую тратишь по несколько часов. Понятно что это может быть откровенно не говнокодерство, но это и не твой код, потому анальные боли обеспечены. (плюс везде есть куски которые писались на скорую руку и планировали рефакторить)
>>791251 Сейчас тебе насрут в уши, что джава умирает. Но а вообще, все есть в шапке-оттуда и читай, но не стоит на джавараш, имхо. Как по мне, путь в джаву и ведроид немного разные. ВО втором практика есть в шапке, а в случае с джавой я, например, вечно гуглил лабы студентов-айтишников. А хуле в 1с не остался? Бабки же платят неполхие.
>>791256 Платят примерно как погромистам на жабе, но соль в стране и последних тенденциях, что возможно стоит отсюда съебнуть. План /б/ иметь под рукой, так сказать.
>>791268 Мнение СУГУБО личное. WEB и мобилки. И там и там есть 1)js 2)java, c# Как понимаешь, выбирая первое, ты не прогадаешь. Я мало что знаю про котлин, скалу и прочее. Но знаю многим синьоров, которые советуют учить 1.
>>791268 Бля, с утра пока туплю. Еще big data. Я бы вот так написал. 1)js 2)python 3)java, c# Джава не очень для веба. Может, но немногие ее выбирают. Шарп же для мобилок, имхо, не очень. Ну а питон-просто заебись. Мне очень нравится его простота и применимость в ML.
>>791268 Но не воспринимай мои слова на чистую монету. ПОчитай статейки и лучше зарубежные. Сам я как хобби учил джаву, работал в области больших данных, сейчас перешел в it-консалтинг и вот подумываю учить андроид.
>>791415 Не до 21, а всегда. Ибо обновить support-library быстрее и проще, даже если вендор перестанет выкатывать обновления. Это же не iOS, где телефон через два года планово превращают в кирпич новыми обновлениями.
>>791498 Пошёл нахуй, пидор. Ненавижу тебя. Сейчас пишем проект на ксамарине. И это такой пиздец, как же я его ненавижу. И тебя, пидораса. Какие же говноеды его проектировали? По сравнению с ним даже блядь WinAPI - красотища. Пиздец, блядь. Пиздец.
>>791453 > Как изменить/расширить функционал ???View Создаешь My???View класс и наследуешь его от ???View, в нем добавляешь/изменяешь функционал вью как тебе надо.
>>791498 > Xamarin.Forms Надо будет в следующим проект попробовать (если он будет). Слишком много времени мне лень занимает отдельный UI для Android/iOS когда делаешь на Xamarin.Native
Есть FrameLayout в котором я хочу менять фрагменты по нажатию на табы. Как бы мне создать инстансы всех используемых фрагментов заранее, но так, чтобы они не отрисовывались (были спрятаны) по умолчанию?
>>791784 Никак. То есть, мы можешь создать инстансы фрагментом, но их методы жизненного цикла (onCreate() и пр.), где ты делаешь всю инициализацию, не будут вызваны, пока фрагмент не будет показан.
Если надо, фрагменты заранее инициализировать, используй ViewPager
Аноны, помогите мне найти пикрелейтед бесплатно без регистрации и SMS, пожалуйста. Только вкатываюсь, поэтому, если есть аналоги получше - прошу совета.
>>792058 d.android.com это же мутное гумно. В каждом втором ответе на стековерфлоу есть упоминание навроде "официальные источники гугла по этому вопросу очень невнятны / слишком кратки".
Анончики, подскажите как обеспечить секюрность в случае приложухи, которая использует базу данных на удаленном сервере? Как чекать ддосы там всякие, и как беспечить доступ к базе только моей приложухе, чтобы злоумышленник не подключился к моей базе со своей самописной приложухи?
>>792083 Никак. Можно сделать на сервере метод получения ключа при первом запуске приложения и в дальнейшем общаться с этим ключом и блокировать подозрительную активность на нем. Следить за слишком частыми запросами нового ключа с одного адреса. Можно сервисами антидудоса воспользоваться, если только этого опасаешься. Наверное, можно соорудить какой-нибудь механизм генерации на клиенте ключа связного с подписью приложения и засунуть его обфусцированным или бинарником во внутрь приложения. Такой ключ должен будет иметь короткий жизненный цикл. Черт знает насколько такое возможно и сколько времени бы заняло. При большом желании злоумышленник все равно разберется. >>792115 Так же как и сломал. Потянул таб с надписью логкат вниз, он стал делить панель с монитором ресурсов, покликал туда-сюда вокруг, потянул заголовок панели логката обратно на табы и все вроде стало на свои места.
>>791811 >>791784 >>792019 У меня сейчас сделано на базе ViewPager. Не знаю насколько имеет смысл все фрагменты разом подгружать (у меня их 4). В одном из них происходит выборка данных из базы, которая может длится ~10 секунд при помощи AsyncTask. В другом находится GoogleMap, которая сама по себе некоторое время грузится, так еще и надо маркеры из базы загрузить.
При этом не имеет смысл ресурсоёмкой отрисовкой заниматься в тех фрагментах, которые сейчас невидимы. ViewPager кажется слишком сложным решением для переключения 4-х фрагментов без свайпа.
>>792312 Отвечу сразу - профита мало. Разработка под андроид полна граблей и лишние прослойки здесь только добавляют новых граблей. Используй Java или Kotlin.
Есть ли способ автоматически скачать все зависимости, которые подключены через gradle и скачиваются со всяких репозиториев, чтобы использовать их локальные копии? Это же пиздец какой-то - когда нет интернета - не соберешь проект.
>>792506 Но ведь тогда у нас будут проблемы с жизненным циклом, разве нет? Если во время выполнения запроса пользователь перевернет телефон, activity пересоздастся, сетевой вызов будет создан еще раз.
> ни каких колбеков на активити из "долгих web операций (1)" Это да. Но если ты в свой класс бизнес-логики передаешь Context (а ты передаешь, раз пишешь в БД и кидаешь бродкаст), то у тебя ведь и есть ссылка на Context (т.е. на Activity), разве нет?
>>792521 >сетевой вызов будет создан еще раз Но так ты вызывай только при первом показе, когда в onCreate() передается null
>есть ссылка на Context (т.е. на Activity), разве нет? Нет, вся "бизнес-логика" и ViewModel'и написаны в отдельном модуле на чистом Java SE Kotlin. Для работы с базой юзаю самописный DSL поверх OrmLite он не привязан к Android
>>792506 А если запрос не прошел? Кидаешь броадкаст с ерором и выводишь на активити?
Почему просто в контролере не делать асинхроную rx цепочку(запрос->сохранение в бд->респонс для вывода на екран=ерор для вывода на екран). Правда там с лайфсайклом поебатся нужно будет + ивент бас или ресивер понадобится если есть запросы не связаны с юаем.
Котаны, только что посмотрел историю крашрепортов, нашел там такое: В одном support.v4.Fragment в методе onStart подписываюсь на LocalBroadcast, а в методе onStop отписываюсь. В методе BroadcastReceiver'a onReceive обновляется один элемент UI и там вызывается getResources(); Так вот, здесь то оно и упало, с вот таким экспешеном: Fatal Exception: java.lang.IllegalStateException Fragment DispFragment{f733e7b} not attached to Activity
Но как так то? onStart вызывается позже, чем onAttach!
>>792676 > в методе onStart подписываюсь на LocalBroadcast, а в методе onStop отписываюсь Неверно. Нужно делать это в onResume и onPause соответственно.
Какие вы знаете (русскоязычные и англоязычные) тусовки android-разработчиков? Какие-нибудь форумы, группы, чаты и т.д., где можно пообсуждать общие вещи (которые не подходят в формат Stackoverflow), показать свой код, посмотреть на чужой и т.п. Кроме этого треда и 4пда
>>792977 > RecyclerView Если бы еще ему из коробки сделали группировку с экспандом, а гуглы как всегда НУ ЭТА, ВЫ САМИ ДАВАЙТЕ))) Да и мне не нравится, что декоратору нельзя задать зависимость от элемента списка. Но это так, размышления.
>>792993 > группировку с экспандом В смысле? > декоратору нельзя задать зависимость от элемента списка Правильно, это ж будет нарушения принципа единственной ответственности.
>>793007 > Правильно, это ж будет нарушения принципа единственной ответственности. Ну и нахуй он тогда нужен? Декарировать списки из примеров? > В смысле? ExpandableListView
>>792912 You should register onResume yes, onResume() is always called on the activity being displayed (it is the last method called before your activity appeares (developer.android.com/reference/android/app/Activity.html) if you only register onCreate() and unregister onPause(), then the next time the activity is brought to the foreground, onCreate() will not be called again and then it will not register the receiver again. And yes I mean INSTEAD of, do not do it onCreate()
>>792912 As onDestroy() is not guaranted to be called you shall use onPause() to deregister. Consider lifecycle of your broadcast receiver: Do you need it to be active, only when your activity is in foreground? Then use onResume() / onPause()
>>793055 Котлин можно учить, лишь когда ты хорошо знаешь Java. Если речь про Android разработку, тогда еще необходимо знать Android SDK. Иначе так и будешь ничего-не-понимающей-макакой.
>>792904 Я спросил этого >>792506 как он в своей, представленной нам, архитектуре делает обработку ошибок запроса и как у него реализованы обновления данных в бд и подальшее их отображение на юи.
>>793011 вот ебусь ща реализовываю экспандбл ресайкл, какой-то ад. И ладно бы если с нуля бы делал, так у меня задача апк которая была сделана под апи 9, обновить под материал, и по тз надо все адаптеры/листы переделать и вот один из листвью оказался экспандбльным. Так там вся логика завязана на определении кто родитель и оттуда пляска с ид итд. Вобщем пытаюсь этот костыльный ресакйл сделать но пздц напрягает
Доброго времечка, уважаемые аноны. Я великовозрастный-23-лвл и работаю в области немного далекой от проганья (erp-системы). Четко поставил цель научиться андроиду, раньше учил джаву, но это давно и не правда. Так вот. Попал на дистанционное (бесплатное) обучение джавы, купил Эккеля, но у меня есть пара часов в будни после работы и выходные. Понимаю, что сначала надо освоить джаву, а только затем в Андроид. Про то, что после обучения войти во фриланс-молчу, это же супер сложно, так? Так вот, насколько реально таким образом, по-вашему, обучиться вашему искусству?
У меня дизайн в Sketch для iOS, как могу адаптирую. Может есть какие то сервисы или программы что бы я ему дал пнг а он мне нагенерил ее (на пример) для тулбара под разные dp?
>>793832 Да, есть некоторые проблемы, и мне приходилось вручную править svg. Но вставлять можно куда угодно, при этом есть даже 2 режима svg, когда это настоящие svg и рисуются на канве, и когда студия тебе генерирует png с этих svg под все dpi.
>>793864 >студия тебе генерирует png с этих svg под все dpi У меня с таким подходом от этого на каких-то картинках в рантайме падало лол. Причем не на старых системах, на старых было белое пятно, а на новых падение с IndexOutOfBoundsException где-то внутри VectorDrawable.
Господа, грешно ли вместо фрагментов экранов инфлейтить их компоновку в ContentFrameLayout? Я упростил себе жизнь. В одиночку я могу городить любые архитектуры, но вот собираюсь устраиваться в серьёзную контору, там уже есть ведроёбы, не обоссут ли меня?
>>793990 Ну ты еще Square с их Flow вспомни. И что? То, что подходит двум компаниям под вполне определенные приложения, не значит, что подойдет хоть куда (как бы сильно этого не хотелось их авторам).
>>793994>>793990 А для каких типов приложений скуп и флоу подходят? Куда они могут НЕ подойти, кроме игра и подобного? Общего толка же фреймворки. Просто думаю на чем в будущем приложения базировать, какой-то из этих двух или есть еще нюклеус.
>>794015 Я не знаю мало мне его или нет. Я только на нем и пишу, альтернативы еще не пробоал. У сдк есть туева куча проблем, о которых не написал только ленивый, с которыми приходиться бороться каждому из приложения в приложения, таская за собой велосипеды и костыли. Эти обертки над обертками появились, уверен, не от хорошей жизни. Плагины для системы, это можно сказать много про что, веб фронтенд приложения, кути приложения, etc. ведь там тоже уже обо многом до тебя позаботились.
Статья хорошая, но много чему можно возразить. Там в комментариях вполне обмусолили.
>>794087 Там таска легкая, просто более правильно делать через ресайклервью с кастомным лейаут менеджером. А так прийдеться пиздячить фрагмент и логику которую прочитаю только я.
Анон, какую ORM лучше использовать? Написал пару приложений используя стандартный execSQL. Хотелось бы что-нибудь схожее по функционалу с EntityFramework.
>>794103 EF ты все равно не получишь, тк ни в Java ни в Kotlin нет экспрешенов. В Kotlin вроде обещали завести, но это не ближайшая перспектива.
Проводил в свое время исследование, ближе всех к EF библиотека MapDB. Она реализует интерфейсы Map<>, List<> и тд, на Kotlin можешь юзать Linq подобный синтаксис. Ее сейчас переписывают на Kotlin, но там еще "in progress". Попытал юзать старую версию на Java, но там старттайм и добавление большого кол-ва элементов на порядок медленнее чем в sqlite.
ИМХО сейчас самое перспективное, это написать свой DSL поверх OrmLite или чистого sqlite.
>>794126 >EF ты все равно не получишь, тк ни в Java ни в Kotlin нет экспрешенов. Это понятно. Хотелось узнать что юзает анон. Неужели все сидят на голом sqlite?
>>794169 >Да так и делаю, ну и что. Потом один хер по папкам надо раскидывать и суффиксы бирать. Неудобно. Это да, тогда можно использовать скриптик который из свгшек сам раскидает по папкам.
Что делать в случае, когда у меня в активти из-за дровера меняются фрагменты, и нужно по нажатию на нотификацию заполнить стек фрагментов, так что бы по кнопке назад он вернулся на логического родителя? С активтями понятно как, а вот с фргаментами ничего не нашел.
подскажите, как лучше сделать: есть список, при нажатии на различные айтемы списка, открываются различные вторые активити через интент фильтры делать или как?
>>794305 посмотрите на зп java-господина. теперь посмотрите на зп android макаки. еще раз посмотрите на зп java-сервер-господина. все еще хочешь вкатываться в ведро?
>>794438 А почему бы и нет. Я сначала начал разрабатывать под ведро, а потом купил удобный ноутбук. Или если ты разрабатываешь под ведро, то ты обязан быть пердоликом со швабодками?
Привет, аноны. История такая: требуется за 2 недели (по 6-7 часов в день) минимально разобраться в написании под Андроид и запилить тестовый apk без осмысленного функционала, лишь пощупать, который умеет: вызывать внешние приложения (например, камеру, календарь - добавлять события, скажем); умеет стучаться к какой-либо удаленной бд; имеет свою бд с некоторой информацией. Как сделать это максимально быстро? Что читать кроме официального блога? ЦЕЛЬ – нахвататься всего по немногу и сразу. Могу в программирование и Java на уровне понимания ООП, знания стандартных СД, интерфейсов и иже с ними, потоков ввода/вывода, простейших гуев на Свинге. С БД sqlite не знаком.
Скажем в реализации MVC под андроид, будет подразумеваться что класс активити, который V в данном случае есть какие то еще обращения к хелперам(типо проверить булин из шаред преференса) кроме как работа с его контроллером, который предоставляет методы и возвращает какое нибудь говно с рестапи? На новой работе я столкнулся судивительной ситуацией. Есть программист второй, он реализовал типо mvc. Есть несколько активитей и под них по контроллеру. Там вот в кажды почти контроллер захуярил одинаковый метод, который выполняет одно и тоже,скажем возвращает булин из хелпера, который объявлен опять же в каждом контроллерк. И так из класса в класс копипаста. Метод не статик и в хелпере это тоже не статик. Я просто хуй знает как именно реализоввть mvc в анрдоиде, но по мне так пусть активити проверяет булини напрямую через хелпер. А0
нид хелп вот у меня есть сиимплКурсорАдаптер, в котором данные из БД и мне надо при нажатии на пункт списка открыть другое активити, которое зависит от выбранного пункта как это реализовывать ?
>>795121 Так у меня динамический лайаут же. >задай в relative layout params так у скроллвью ScrollviewLayoutParams, там нету below. Так что пришлось скролвью в новый релатив пихать и там уже addrule.below
помогите плз, а то страдаю хуйней уже 2ой день вместо того, что бы написать что то мне надо заполниь список данными из БД в качестве БД использую sugar ORM какой адаптер для листвью мне надо использовать и нужен ли мне адаптор вообще?
>>795565 >даю хуйней уже 2ой день вместо того, что бы написать что то >мне надо заполниь список данными из БД >в качестве БД использую sugar ORM что за данные-то? Если там одна строка, то можно без адаптера, если там что-то сложнее, то наследуешь ArrayAdapter, скармливаешь ему layout и заполняешь вьюшки.
Привет, анон. Допустим есть сайт/форум. Хочу написать простой клиент, используя преимущественно android sdk. У сайта api нет, рассчитываю положиться на HTTPClient. В качестве интерфейса планирую использовать стандартные компоненты, к Webview душа не лежит. Взлетит как продакшен-реди решение или все делается не так? В общем, дай стек технологий, этой мой первый серьезный проект на андроиде.
Парни, значит, история такая. Работал я себе, работал, как вдруг всё повисло. ну я ноут перезагрузил по горячему, открыл студию - а там пусто. ну хуй с ним, подождал пока проект подгрузится, но внезапно стала вылетать ошибка грэдла. Вот она: http://pastebin.com/yEJkVhKv
Ещё такая штука: файл build.gradle(app) стал пустой.
Что в нём было - хуй его знает. Все классы, активити - всё на месте. даже как-то умудрился запустить эмулятор - всё, что сделал, работает. но дальше работать с этим проектом не получается из-за ошибок грэдла.
Что делать? Как починить? Может, новый Андроид студио поставить?
Ведроиданы, кто-то делал vpn-клиенты для нашей нелюбимой платформы? Можете подсказать куда копать, для того что бы перехватывать трафик и перенаправлять его на выбранный vpn сервак?
>>796307 Ну я так понял что всякие vpn клиенты для ведра берут трафик, шифруют его и ведут к адресату через доверенные сервера, собственно за это им и платят.
Наконец-то пришло обновление андроида, где исправлен баг с кнопкой "разрешить" в runtime permissions. Теперь она начала нажиматься! При попыткеразрешить доступ к мультимедиа в приложении Pikabu я получаю совершенно неизвестный, непонятный диалог: "Сначала разрешите наложения" - какие нахуй наложения? Я хочу гифку с котиком сохранить!!! В списке "наложения поверх других окон" нет приложения pikabu.
Ни один пользователь не поймёт о чём идет речь и что делать.
Так что, ставим target sdk version 22 и никуда не спешим. Сделать хуже - всегда успеем.
>>796432 > исправлен баг с кнопкой "разрешить" в runtime permissions Давай ссылку на issue в баг-трекере Андроида. > Теперь она начала нажиматься Она и до этого нажималась. Дай угадаю: девайс от Самсунга? > "Сначала разрешите наложения" Что блядь? Это диалог из твоего васяноприложения, а не системный. > Так что, ставим target sdk version 22 И наслаждаемся пониженным рейтингом в Google Play, еблей со старыми багами и взглядами как на говно со стороны коллег.
Здравствуй,анон.Делаю приложение,в нем должна быть возможность смотреть видео из VK.VK API может возвращать ссылку на mp4.Посоветуй, пожалуйста, библиотеку, которая может его грузануть и показать.
>>796458 >>796463 Такое впечатление, что вы думаете, что вас пытаются наебать. Ссылка на трекер: https://code.google.com/p/android/issues/detail?id=213120 Не работали все диалоги запроса разрешений. >Она и до этого нажималась Жопой читаешь? >Дай угадаю: девайс от Самсунга? Не надо гадать, это не секрет: Линейка Nexus и неизвестно сколько еще устройств. >Что блядь? Это диалог из твоего васяноприложения, а не системный. Системный диалог. И да, я не пытаюсь никого обмануть. >И наслаждаемся пониженным рейтингом Низкий рейтинг будет когда едениц в рейтинг понаставят из-за хуевой юзабилити. Пользователи по большей части не хотят разбираться, а хотят гифки с котиками сохранять и чтобы всё работало.
Пытаюсь сделать приложение-будильник, нужно чтобы оно запускалось в нужный момент из всех возможных жоп сна, которые бывают в андроиде, а также не должно давать пользователю уйти от будильника путём закрывания приложения. В общем, у меня стартует RingingActivity, который в свою очередь стартует сервис и потом если надо выключает музыку через него. Если активити убить, сервис всё равно продолжает играть, тогда нужно запустить приложение вновь, и из него выключить сервис. Были проблемы с запуском из режима сна, не могу ничего понять с Wake Lock-ами, тыкал их везде, но ничего всё равно не работает. Потом прочитал, что надо делать через BroadcastReceiver, иначе нет гарантии, внутри ресивера просить WakeLock. Потом ещё нашёл WakefulBroadcastReceiver, который должен автоматически делать всё за меня. Теперь всё работает (правда экран тёмный и не могу его включить), внутри onReceive я просто стартую RingingActivity. Посмотрел в код WakefulBroadcastReceiver и смутился - по-видимому он создан только для запуска сервисов методами startWakefulService и completeWakefulIntent. Нормально ли использовать его так, как это делаю я? Как сделать чтобы запускаемая активити включала экран?
>>796621 Вообще, я хотел бы написать пару таких же хуёвых приложений и пытаться апплаиться на джуниора, поэтому хотелось бы чтобы мой код был более-менее идиоматичным, а не забиванием гвоздей дилдами. Нормально ли вообще запускать сервис параллельно с активити, цепляться к нему через bindService и управлять сервисом из активити?
>>796626 Пиздец какой-то, я прочитал Android nerd ranch guide и покатался по юдасити курсам, но в этой параше не могу понять почти ничего. Может дело в том, что код 2009 года. Даже не верится, что у меня с моими 3.5 классов что-то работает. Но вообще, спасибо. По-видимому WakefulBroadcastReceiver мне не нужен, он только для сервисов, а в моём случае по-видимому он помог потому, что любой BroadcastReceiver по какой-то причине будит телефон лучше, чем просто активити. Гугл тоже использует активити, просто берёт wakeLock в BroadcastReceiver, а освобождает где-то в активити.
>>796687 Ну мне надо показать экран с залупой, и начать играть музыку. Если на залупу нажать - музыка прекращается. Если из приложения выйти - музыка продолжается фоном. При старте приложения при играющей музыке сразу открывается экран с залупой. Как это ещё можно сделать?
First glimpse of Kotlin 1.1: Coroutines, Type aliases and moreАноним15/07/16 Птн 14:53:39#358№796718
Там я качаю HTML страницу, нахожу title, перевожу в UpperCase и вывожу в TextView. Как видите запрос идет в фоновом потоке, но никаких handle/looper/postOnUi и тд использовать не пришлось.
Сделал в двух вариантах с обработкой ошибок: 1) В духе C# с try/catch блоком (асинхронные ошибки туда прокидываются нормально) 2) В функциональном стиле с самописной монадкой на исключения.
>>790312 (OP) Как называется такая хуйня, когда тянешь картинку вверх или вниз и она пропадает, т.е. выход из просмотра картинка. Как гуглить туториал по этой теме?
>>796740 Во первых, это код для примера. Во вторых, просто не надо давать ссылки (делать замыкания) на активити из web запросов. С ними надо общаться через бродкасты, а через колбеки можно делать только запросы к диску.
>>796761 > Так как асинхронную цепочку останавливать? В общем случае (мелких запросов к вэбу) не надо останавливать. Так ты только вносишь дополнительную сложность, необходимостью правильно вернуть систему в 0 состояние из N твоих точек остановки.
>>797304 >>797304 Именно этим и отличается. Если я выложу какие-то исходники на Гитхаб под свободной лицензией, ты можешь делать с ними что угодно (в рамках этой лицензии). Если я их просто выложу, и напишу ЭТА ВСЁ МАЁ НЕ ТРОГОЙТЕ, то те, кто будет их использовать, будут нарушать мои права.
У Гугла всё это вообще автоматически происходит. Выписываются баны приложений, страйки на ютюбе и т.д. Причем ты никогда не узнаешь, за что именно, тебя просто заблокируют. Можешь почитать например на Хабре истории общения с техподтержкой Гугла.
>>797334 Я прекрасно понимаю суть свободных лицензий. Однако это вообще не к месту сейчас, мы совсем о другом говорим. Более того, я ни разу не видел, чтобы к API была приложена лицензия, следовательно, любое такое API всё равно нельзя использовать независимо от того, публичное оно или нет.
Привет, котаны. Есть grid layout 3x3. Как сделать так, чтобы колонки таблицы по ширине занимали всё место на экране? Сейчас только по высоте занято всё место, путем установки параметра layoutRowWeight = 1 каждому FrameLayout.
А есть какие-нибудь "умные" конвертеры json -> pojo, которые создают вменяемое количество классов, ну, или на крайняк хотя-бы вложенные статики используют, чтобы не приходилось 30 минут тратить на копипаст ?
Двач, привет! Я почти доделал своё приложение а-ля медуза, в котором пизжу статьи с сайтов.
Но пока что спиздил только заголовки для листвью. Как сделать так, чтобы на клик открывалась статья в новом лэйауте? Подскажите гайд. можно ангельский.
Двач. Можно создать listView поверх ListView, но так, чтобы его не было заметно? Например, один лист вью с текстами, которые видно. тИпа 1. Вася 2. Петя 3. Дима 4. Костя
А поверх него "невидимый" листвью"(прозрачный), но по сути, реагирует новый листвью. Допустим, мы не видим такую же фальшивку 1. Яна 2. Катя 3. Соня 4. Таня
И вот юзер нажимает на 2-ю позицию(он думает, что это петя), а ему тут ХУЯК и Катя открывается.
Какого хуя тут считают, что в ведроиде зп нищенские по сравнению с тырпрайзом? Я на хедхантере только у топов разницу видел. Алсо, как сейчас с рыночком в РФ, котаны? Реально вкатиться в ДС-2 с двумя приложениями в маркете, и парой месяцев опыта на большой джаве?
сап аноны, в общем я тут перекатился в андроид, в понедельник выхожу на работу. Там все работают на маках а я его в глаза не видел. Есть какой нибудь годный мануал типа ос экс для чайников в сети? //экс-решеточник
Что если некоторые ключи настроек берутся из string ресурсов? Нормально если сделаю не final PREF_KEY_* и заполню их в onCreate апликейшона? Или как лучше? Надо для prefs.xml'ей.
>>798245 Ключи настроек никогда не меняются. Не надо плодить лишние константы, пиши прямо так: sp.getBoolean("gps_enabled", false) Если совсем прям припрет поменять имя ключа в .xml, то заменишь руками в коде. Если у тебя загрузка одной и той же настройки используется 1000 раз - здесь что-то не так. Настройки надо грузить: 1) При инициализации 2) Внутри onSharedPreferenceChanged из SharedPreferences.OnSharedPreferenceChangeListener
Сап, джава-господа. Пробую одну вещь, а именно собрать лист ссылок с сайта. Взял себе на пробу сайт, ссылки вытащил. Но они в разброс. ТО есть, первая новость на сайте почему-то не первая в списке, а где-то в середине. Понимаю, что теперь мой лист нужно отсортировать. Сделать это в целом просто, ведь в середине каждого стринг в листе есть дата. Но календарь юзать тут не надо. Просто отсортирую по какая меньше-какая больше. Вот код, которым я получаю ссылки. http://pastebin.com/dRjvtp3i Вот то, что я получаю. http://pastebin.com/Qvm5PsD8 Вот то, как выглядит дата: 2016/04/26/ Из неё я буду вытаскивать месяц и число.
Подскажите, чем сортировать и как это сделать? Это решение, конечно, похоже на костыль, а если ещё и дальше делать, то больший костыль, но всё же это попытка и я хотел бы доделать её.
>>798361 >>798361 нет, не знаю. просто нашел работающий способ, который помог мне убрать дубликаты из результатов. потому что ссылки, почему-то, было по 3 и более.
Так что, если отвечать зачем, отвечаю: убрать дубликаты
>>798365 HashSet - несортированный набор. Ты копируешь значения листа в сет, вычищаешь лист, копируешь сет обратно в лист. Лист при этом вытаскивает значения из сета в случайном порядке. Для одноразовой операции такое сгодиться, но у тебя цикл. Quickfix - замени HashSet на LinkedHashSet, не будут перемешиваться. Вообще для небольшого скрипта брать жаву смысла мало.
>>798399 Нет смысла. Ключи никогда не меняются. >лучше сохранять ключи в res/strings.xml и указать у них аттрибут translatable="false". Оверхед. Много писанины, опять же надо помнить названия ключей. Вызовы getString.
>>798430 >>798399 Если что - я попробовал все 3 способа в проекте с ~20 настройками. Оказалось, что за полгода (разработка и поддержка) менять названия ключей не пришлось ни разу. Добавлять новые и удалять старые - вот это было.
>>798445 Во всех трёх способов кроме удвоения кол-ва названий ключей нет никакого различия. В некоторых случаях добавляется всякий оверхед, в виде загрузки строк из xml.
>>798464 > Никогда не понимал, нахуя это нужно. Вон из профессии, быдло.
>>798467 > Почему бы и не использовать А почему бы все переменные не хранить как String? > и это рекомендации гугла Вот и пиши по этим рекомендациям лапшеобразный код с AsyncTask'ами, ContentProvider'ами, HttpURLConnection, венгерской нотацией и прочими радостями. Флаг тебе в руки.
>>798520 Я же тебя не про котлин спрашиваю, а про альтернативу AsyncTask. Сейчас выгодно использовать проверенные инструменты, т.к. граблей и гугл достаточно подкидывает.
>>798551 Так-то он прав. Эта ебаная сдк перманентно забагована, то и дело попытавшись заюзать новый инструмент из стандартного набора плюешься, что уже говорить про всякие реалмы у которых каждый месяц - громадный фикс багов. Это показатель не того что они пиздатые, а того что технология дерьмо.
После включения ProGuard появились странные баги при замене одного фрагмента на другой. Старый фрагмент остаётся на месте (вернее, его изображение, так как на нажатия он не реагирует), а новый фрагмент показывается под ним. Отключю его - всё норм, включю - опять такая же фигня.
В чем может быть проблема? В логах всё чисто, никаких ошибок или предупреждений.
>>798657 Хрень какая-то. Логай onDetach фрагментов. Если там не сделано какой-то шняги с рефлексией, то прогвард помешать не мог. Попробуй локализовать проблему в отдельном проекте.
>Коротко о главном: >1) Мобильная разработка - это весело. Это точно. Я уже четвертый день ябусь с QtCreator, который упорно не хочет проходить этап Build Android Apk.
01:48:29: Выполняются этапы для проекта application... 01:48:29: Настройки не изменились, этап qmake пропускается. 01:48:29: Запускается: «C:\MinGW\bin\mingw32-make.exe» mingw32-make: Nothing to be done for 'first'. 01:48:29: Процесс «C:\MinGW\bin\mingw32-make.exe» завершился успешно. 01:48:29: Невозможно запустить процесс «mingw32-make» "INSTALL_ROOT=C:\Qt\5.2.1\android_armv7\examples\widgets\mainwindows\application\android-build" install Ошибка при сборке/установке проекта application (комплект: Android для armeabi-v7a (GCC 4.9, Qt 5.2.1) ) Во время выполнения этапа «Копирование данных приложения» 01:48:29: Прошло времени: 00:01.
Это с галкой расширенного вывода. Пытаюсь собрать хотя бы один из примеров. Что может быть не так? SDK, NDK, ANT - самые свежие, что дают на сайтах. Или Все дело в винде?
>>798702 Например в том, что я полный нуфаг и учил вообще питон. И QT более-менее знаю. И не успокоюсь, пока не запущу свой говноскрипт на ведроиде. А потом уже засяду за изучения джавы, наевшись говна. Жуткий пердолинг, конечно, но как-то же собирают apk в креаторе, а я не могу даже стандартный пример.
>>799510 После более года использования RxJava на Android (и полугода в C#/Xamarin), я могу делать ясные выводы:
1) Observable<T> несовместим с жизненными-циклами активитей/фрагментов. Очень неудобно, что "по хорошему" каждый Observable надо явно отписывать (что бы избежать утечек), тк “по умолчанию” они бесконечные и не было контракта, который явно бы говорил что Observable одноразовый.
В RxJava поняли эту проблему и ввели явные контракты на одноразовые действия: Single<T> и Completable. Но проблема в том что они плохо совместимы между собой, у них разные интерфейсы для связывания, нет общего абстрактного предка.
В итоге мой вывод: одноразовые-“hot”-асинхронные-таски гораздо легче в использование. Этим требованиям полностью удовлетворяет Java 1.8 CompletableFuture, вот только на Android его нет (пока).
P.S. Скоро выходит RxJava 2.0, я его посмотрел, но не нашел там нужных мне характеристик.
Аноны, как вы обрабатываете такую ситуацию, например, есть запрос, связанный с денежным перевод, т.е. он должен выполниться ровно один раз, юзаю rx + место, где observable живет. С переворотами, закрытием и открытием рпиложения всё ок, но когда андроид убивает приложение, то всё становится хуёво. Как быть?
>>799583 > всех этих транзакций У тебя их что больше одной за раз?
Нет такого "волшебного апи", которое запретит Android убить твое приложение. Даже "sticky" service, андроид может убить, он только гарантирует что потом его вызовет снова.
Но транзакций легко может стать много, если дейстовать как ты говоришь. Вдруг, на сервере что-то изменилось, или юзер с другого устройства что-то сделал. Или оффлайн-действия всякие.
>>799581 Ну например сделался запрос, я сохранил в бд какой то тэг запроса и время, да? А как потом отследить, что новый делать не надо, я что-то не догоняю.
>>799727 Ссук, чем тебе написать программу заметок впадлу?! Не нашел ни одной когда надо было (невырвиглазную, с виджетом на хаумскрине и синхронизацией в какое-нибудь открытое место). Так и пользуюсь дефолтным самсунговским memo.
Сап, двач! Нужно получить ссылку в Toast по клику. Лист с ссылками вот. можно посмотреть: http://pastebin.com/cm2Q5E0T Как теперь его привязать - ума не приложу. прописывал в онИтемКликЛистенер list1ofLinks.get(position) - ошибка. Писал в онКриэйт - ошибка. Создал метод, который на старте собирал внешний(вне метода) лист - всё равно ошибка.
Как поступить? Или нужно создавать потоки/асинк таск? ЧЯДНТ?
Использовали ли вы лоадеры? Если да, то использовали сразу или переходили с чего-то другого? Упростили ли они вам жизнь и насколько? Какую проблему они решают по сравнению с альтернативами?
Самая существенная инфа по ним это блогпост на пять частей, после прочтения которого ЯННП. В еще одном посте нарисован самый минимум как их заюзать, но даже на этом минимуме нужно дополнительно имплиментить три метода коллбэка лоадера. Правильно я понимаю что лоадеры и их дата помирают вместе с активити?
До сих пор я использовал асинкТаски и иногда сервисы, еще глядя в сторону rx. Лоадеры отпугивали тонной бойлерплейта.
>>800313 В чём отличие, друг? Гугланул, нашёл вот это.
"Но есть и небольшие отличия. Например, когда выводится сообщение, его можно смахнуть с экрана слева направо, не дожидаясь, когда оно само исчезнет.
Также можно задать свою продолжительность. В первых версиях это не работало, я даже задавал этот вопрос на StackOverFlow, где проблему подтвердили и обещали исправить. Недавно проверял - действительно, теперь работает."
>>800338 > нужно дополнительно имплиментить три метода коллбэка лоадера. > Лоадеры отпугивали тонной бойлерплейта. Ах, какая большая работа, целых 10 строчек кода!
> Правильно я понимаю что лоадеры и их дата помирают вместе с активити Нет, неправильно. То есть ты прочитал пять частей какого-то говна и так ничего не понял?
>>800391 Если ты не в состоянии элементарное описание компонента найти и прочитать, а только чьи-то высеры цитируешь, о чем с тобой можно говорить?
И вообще представь себе, что в этой профессии нужно много искать информации и читать. Книги, статьи, туториалы. И в большинстве случаев на английском. Если ты этого осилить не можешь, то может пора пойти вон из профессии? Улицы грязные, щебень не разгруженный. Найдешь, чем заняться.
>>800410 Так и есть. Грустная истина, но JavaScript уверенно шагает по миру. На нём сейчас вообще что-угодно пишут, а в будущем влияние только усилиться. Вот пример из мобайла: наша студия делает нативные приложения для Android/iOS. Но в последнее время стало сложнее находить заказы. Все уходят туда, где им сделают кроссплатформенное приложение на ReactNativ'е за чуть меньшие деньги, но раза в полтора быстрее. Так что, думаю, скоро и нам перекатиться придётся.
Да, сырой, глючный и вообще уёбищбный. Но позволяет очень быстро и дешево писать кросс-платформенные приложения. Сначала на уровне прототипа, потом как обычное.
>>800471 Пруф того что кто-то согласен покупать такие приложения у разрабов. Или вакансий с реактнэтивом. >быстро и дешево Для молодых технологий как-то сомнительно. >кросс-платформенные Не гони, он нихуя не кроссплатформенный, другой дело что не нужно менять язык для того что бы писать под другую платформу.
>>800620 >startForeground > It is still theoretically possible for the service to be killed under extreme memory pressure from the current foreground application
>>790312 (OP) Аноны, у меня есть лоадер, который отправляет сообщения на сервер, следовательно, юзер может отправить сообщения одновременно, но в таком случае лоадер возвращает результат только для первого сообщения, а если рестартить его, то только для последнего, что делать? Думаю инкрементить айдишник у лоадера, но это, наверное, слишком костыльно, что скажите?
пацаны, подскажите вот есть метод, который воззвращает List<E> допустим этот метод прописан в классе Anon в мэйн активити делаю Anon anon = new Anon(); anon.readList(); а теперь мне надо назначить имя этому List<E>, который вернул этот метод как это сделать я тупо уже основы джавы забываю сидя 8ой час за всей этой поеботой
Чем заменить parse.com? Нарыл много статей со списками альтернатив, но реальных отзывов как-то не много. Я бы и простой бэкенд запилил на пыхе, но клиент хочет подешевле. У кого есть отзывы по таким бекендам? Может какие-то подводные камни. Ествественно хотелось бы подешевле, побольше бесплатных записей в базе данных, максимально простую конфигурацию, чтоб хуяк, хуяк и работало
Предыдущий тред тут:
https://2ch.hk/pr/res/774895.html
Коротко о главном:
1) Мобильная разработка - это весело.
2) Android Studio & Java - легитимный набор, проверенно временем и поддерживается гуглом.
А также о неглавном:
3) PhoneGap/Ionic/Titanium/ReactNative - имя им javascript, принципы у них разные, первые три попытка в кроссплатформенность одного кода, ReactNative проповедует другой подход, а именно написание разного кода но на одном языке. Популярность у них разная как и размер комьюнити.
4) Xamarin - мультиплатформенная разработка. Попытка серебряной пули на C#. Довольно популярный. Куплено Microsoft. Теперь есть бесплатная версия.
5) BugVM (RIP RoboVM) - идейный наследник ксамарина, а теперь уже и его часть но на Java. Учитывая что Microsoft убила RoboVM, встречаем опенсорсный BugVM.
Отдельного упоминания стоят:
1) Kotlin - Java от JetBrains, новый и стильный язык, куча синтаксического сахара прилагается, есть стримы и делегаты. Хотите писать на котлине? Добро пожаловать в JetBrains и Avito.
Где брать инфу:
Интернет-ресурсы
1) http://developer.android.com/index.html
Наша библия. Документация/небольшие примеры/гайды. Но только на инглише, но это плюс. Минус в том, что это все таки документация с небольшими примерами и гайдами и искать там реализацию чего-то хоть немного сложного нету смысла. Раздел Training как раз для старта.
2) http://stackoverflow.com/
Пользуюсь чаще чем первым сайтом. Можно найти практически все.
3) Есть два вполне вменяемых русскоязычных ресурса. Для старта подходят очень даже.
http://startandroid.ru/
и
http://developer.alexanderklimov.ru/android/
Второй еще и условно бесплатный. Главный плюс - это русский язык, простые гайдики, но переводы классов иногда заставляют фейспалмить.
4) http://habrahabr.ru/ - редко но метко, можно найти годные статьи по каким-то реализациям, или переводы с developer.android. Хотя чего тут объяснять.
5) https://www.udacity.com/ - в треде очевидцы говорили что есть годный курс, но я лично не смотрел.
Книги, их никто не читает, но все советуют только одну
1) The Busy Coder’s Guide to Android Development - в отличии от остальных книг она обновляется, а так как ведро не стоит на месте а хуярит семимильными шагами, то я бы и не советовал другие книги.
А теперь, так как заебали уже всех, гайд для:
>"Я хуярил на делфи 5 лет назад а теперь хочу вкатится в андроид":
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush или codingbat.com.
Можно Эккеля "Философия java" почитать.
Или Хорстманн "Java. Библиотека профессионала" до 7 главы.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда. Полезно почитать про алгоритмы работы коллекций и их сложности.
4) Дженерик типы, они как раз юзаются в коллекциях.
5) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
6) Потоки ввода/вывода (streams). Не путать с тредами(threads).
7) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
8) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
9) Работа с Sqlite, нужна будет в любом случае.
10) Работа с json.
Привет клиент-серверка.
Пишите в треде что добавить