Это копия, сохраненная 10 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Коротко о главном:
1) Если ты учил джаву но не хочешь пилить тырпрайз до конца жизни - добро пожаловать в андроид разработку.
2) Android Studio & Java - единственный легитимный набор, теперь стал еще легитимнее.
3) Xamarin -для богатых и ебанутых виндовсопоклоников, медленно и невыгодно, но на шарпах.
4) PhoneGap - не пробовал но осуждаю, как и весь не-web на js. На самом деле изменил свое мнение, всякие поделки на js имеют место быть, и более того, в наших же интересах клепать несложные проекты на нем, так как объективно быстрее сделать юи.
Где брать инфу:
Интернет-ресурсы
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
Предыдущий тред: https://2ch.hk/pr/res/596036.html (М)
Прочти философию java.
Прорешай на javarush все задачи, на которые хватит баллов, это всё полезно.
Далее бери подписку на месяц и вкалывай, решая остальные задачи.
Придумай себе проект на андроид, к примеру клиент для двачей.
Читай то, что в ОП посте и фигачь.
Как толтко твой клиент сможет просматривать хотябы фурряч - приходи сюда, мы будем твой код хуями крыть.
Я начал кодить без знания Джавы и ведра вообще. Немного знал ООП, и всё. Синтаксис джавы - си-подобный, так что это проблем вызывать не должно. Просто взял и без задней мысли начал делать. Да, у меня всё ещё выходит говнокод, и я постоянно исправляю старые косяки из-за того что узнаю новые особенности платформы, но как по мне так такой спонтанный и бессистемный подход в некотором роде лучше. Учиться на своих ошибках - дорого стоит, но и понимание более фундаментальное приходит, когда исправляешь эти ошбики. А обучение по книжкам чаще всего у всех отбивает желание продолжать изучать какой-либо язык на стадии написания хеллоуворлдов и сортировок. Просто берешь в зубы стаковерфлоу и ведроидовскую документацию и начинаешь изобретать велосипеды на костыльной тяге, после чего переписываешь их до тех пор пока они не превратятся в изящный мотоцикл.
Я не знаю Си и вообще ничего не знаю. Начинать с Си надо? Или сразу брать видеоуроки по созданию какой-нибудь игры на ютубе и пытаться повторять?
>>619639
>Какой опыт?
Опыта около 10 месяцев. Как раз в первый месяц работы первый тред и создал.
>Выгодно ли на яве вообще писать?
Тупой вопрос на самом деле. Конечно выгодно блять, один из самых популярных языков, в тройке точно. И оплата как на остальных примерно. Можно хуярить как бекенд так и ведроид. Для фронтенда нужно будет все равно дрочить джаваскрипт.
А сугубо для ведра джава незаменима ну котлином мб разве что. Вариант еще на джаваскрипте писать, но там говорят может оказаться много пердолинга. Но для простых проектов советуют. Но опять же, там 3-4 популярных технологии на js и они все друг от друга отличаются.
>Какие проекты делали?
Делал 3 клиент серверки.
Первый проект сам клепал на стартапе за гроши, там многому и научился. Мое портфолио собственно. Правда стартап сдох, благо на плеймаркете осталось.
Второй делал месяц, успел только наклепать общую архитектуру и классы для работы с ебанутым Json-rpc. Но сьебал на другую работу.
Сейчас пилю говносоциалку, допиливаю за каким-то идиотом, такого хуйового кода я с первого курса не видел. Но проект мертвый и не оживет и от этого печально, пока нечем гордится.
>Анончики, приглашаю вас в конфу в телеграме
>Конфа общая как для обычной джава, так и для ЕЕ
Хуй знает что это такое, но вот принес с прошлого треда.
Алсо, я сижу в конфе в скайпе, там конфа под 300 человек, разумные вещи говорят, да и опытные все, правда туда без инвайта не попасть.
Хз, у меня постоянная работа 10 месяцев. Жить можно с успешных апликух, а ты их сделай сначала. У меня не вышло.
Переход на OpenJDK
Нет таких.
>Кстати, относительно этой новости... Как быть теперь? Забить хуй и не ебать мозги проблемами которых нету.
>Кстати, относительно этой новости... Как быть теперь?
Забить хуй и не ебать мозги проблемами которых нету.
фикс
Хотел посмотреть в Wireshark-e как проходит аутентификация одного андроид приложения (интересуют реквесты к закрытому API и ключи, которые оно отправляет).
Девайсов на андроиде нет, поставил Bluestacks, Wireshark видит его трафик, но пользы от этого мало - реквесты все идут через HTTPS.
Люди как-то получают нужные реквесты и ключи. В какую сторону смотреть? Реверс инжинирить приложение? Если да, то как? Если нет, то что посоветуете?
Есть REST API, через который приложение отправляет команды на сервер. Его адреса и json-параметры не задокументированы, так как подразумевается, что команды будут отправляться только через само приложение.
Разумеется, с каждым реквестом шлется ключ авторизации (я пока не знаю, генерится ли он кодом в приложении или другим веб-сервисом). Но я знаю, что люди как-то достают эти эндпойнты и ключи, и получают доступ к сервису напрямую, без приложения. Ну и я хочу того же самого.
Перехватить пакеты Wireshark-ом - не вариант, так как API работает только через HTTPS. Остается реверс-инжинирить? И если да, то что там самое удобное для этого под андроид?
Рисую пикчи с помощью(или правильно говорить в?) канве canvas.drawBitmap();
Скалирую канву canvas.scale();
рисую сетку canvas.drawLine();
И в результате не все линии рисуются, КАК НАСТРОИТЬ ПРАВИЛЬНЫЙ РЕНДЕРИНГ?! Так чтобы рисовались все линии и ни одна не пропадала.
В интурнетах только какие-то вопросы по рендерингу видео нахожу.
Нет, я просто просил ранее что-бы хоть намекнули в какую сторону покопать.
Спасибо, поищу/попробую сейчас.
Возьми paint, который ты рисуешь сетку и сделай в конструкторе: new new Paint (Paint. ANTI ALIAS FLAG)
Если я правильно тебя понял то тебе нужны все стринги из апликухи? Т.е. эндпоинд куда шлется, названия методов и тд?
Если да то реверс инжинирингом ты их получишь,они не обфусцируются. Реверс инжиниринг сам нагуглишь,там работы на минут 15.
А вот ключ авторизации другой вопрос, скорее всего она в шаредах хранится, но далеко не факт, он может на сессию создаваться. Но да скорее всего в shared preferences ищи.
Пишу как долбоеб, только что проснулся.
> Реверс инжинирить приложение?
Именно.
> Если да, то как?
Baksmali, дебаггер. Всё по классике.
Хороша практика выносить все кастомные View в отдельный модуль, но только в том случае, если это крупный проект и все эти кастомные view можно использовать где-то еще.
В остальных случаях смысла нет.
Просто именуй всё понятным языком, к примеру разметку для своих вьюшек именуй со слова: custom_
Причем пометка у такой ссылки могла бы быть data-..., то есть html5-атрибут. Другими словами, мне нужно сделать так, чтобы в WebView какие-то ссылки помеченные атрибутом data-... открывались в родном браузере телефона. Можно ли это вообще сделать? Если да, то не могли бы сказать куда копать, чтобы в ТЗ я сразу написал "смотреть в сторону NNNN"
Ты ведь можешь получать текст ссылки при нажатии, проверяешь в нем нужный тебе атрибут и делаешь intent с этим урлом. вылезет стандартный диалог через что открыть
Текст ссылки это анкор, href или весь тег "a" с атрибутами? Если весь тег с атрибутами, это было бы идеально, потому что я смогу через data-... отмечать часть ссылок.
Вот, есть у меня *.jar файл, что с ним делать, чтобы использовать в своём приложении?
>>620821
Нет, вызывается shouldoverrideurlloading, куда передается только url. Про анкоры не уверен. Я бы лучше добавил в путь ссылки get параметр, например external=true, тогда бы все ссылки отправлял в браузер с таким параметром. Ну или наоборот intenal=true.
>>620871
Закидывай в папку lib. Нужный в градле пункт уже прописан, просинхронизируешь проект и готово.
>Закидывай в папку lib. Нужный в градле пункт уже прописан, просинхронизируешь проект и готово.
Т.е. просто в папку, где сама студия установлена?
А как просинхронизировать?
Запрос проходит успешно, но почему-то вместо нормального ответа выдаёт эту строчку. Если в примере поменять сайт и заменить хттпс на хттп, то ничего не меняется.
Макака не даёт вставить нормальную ссылку, по ссылке первый же пример АсинкХттпкКлиент в списке слева.
Или лучше просто несколько NumberPicker сделать?
Угу, эт предлагали. Но ведь у меня лист в листе и листом погоняет, а кроме текстселектов ещё и чекбоксы. СЛИШКОМ СЛОЖНО.
В режиме дизайна отображаются и те и другие, просто для возможности обращения к ним. При запуска же чекбоксы заменяются чектекстом в зависимости от положения свитчера ниже.
Не обращайте внимание на то что чектекст в радиобаттоном, его позже уберу оставлю только текст, так что радиогруп не нужен.
Как можно зарабатывать на этом деле адекватные деньги? Пусть у меня 100 тысяч пользователей в месяц, которых у меня никогда не будет. Пусть каждому из них я один раз покажу рекламку. Итого: ~1$ на тысячу = 100 долларов.
При этом средний разработчик получает в разы больше за месяц работы над приложением, которое точно не окупится.
А, бля, я что-то подумал, что я в веге сижу и мы про стримеров говорим.
Пиздец поехавший стал.
Мало того что рекламу показать, нужно ещё и перейти по ней.
7 баксов дохуя слишком.
Может и ошибаюсь, но средняя цена за interstitial 2.5$ за 1000 в нормальных странах. Если приложение используют в каких нибудь пакистанах, будет еще меньше, около 1.5$.
Алсо может так выйти, что вообще кликать не будут, тогда CPM будет вообще маленьким. Потому и считаю 1$.
Хранить значение спиннера в модели, с которыми работает адаптер. Обновлять спиннер из getView.
А лучше почитай как ListView (GridView абсолютно аналогично) работает. Твой вопрос именно от непонимания идёт.
Можно, но не обязательно. Есть метод поиска ид по названию, дальше ты сам понял.
Глубоко.
Да, спасибо. Неплохое решение.
>Релайтив не думал сделать?
Эт хорошо когда под свой смартфон пишешь наверное.
>Релайтив не думал сделать?
Ммм, не задумывался. Просто сделал как знал что смогу.
Бампик.
Какие значения выставить?
как сделать, чтобы объекты из линеар бара располагались равномерно по его плоскости?
Совладал, но возникла новая проблема: можно ли заставить адаптер создать больше элементов, чем умещается на экране, так сказать "заранее"? У меня умещается только 2 элемента, а мне нужно получить значение с, например, четвёртого, который ещё не создан, т.к. гридвью не скроллили.
[
true,
false,
"blabla1",
42,
{..}
]
Точный тип и структуру я не знаю, есть ли способ распарсить её корректно?
[
true,
false,
"blabla1",
42,
{..}
]
Точный тип и структуру я не знаю, есть ли способ распарсить её корректно?
Люк, используй layout weight!
http://www.startandroid.ru/ru/uroki/vse-uroki-spiskom/38-urok-7-layout-parametry-dlja-view-elementov.html
Запили конфиг своей пекарни.
Глубоко залезать.
Читать то, что в ОП посте.
Ставишь себе сложную в плане архитектуры задачу и решаешь её.
Действующие лица:
MainActivity extends AppCompatActivity
SupportFragment extends Fragment // сапортный епта
WorkerFragment extends Fragment // опять же из сапортной либы
Легенда:
WorkerFragment по нажатию на вьюшку в нем делает startActivityForResult (запускается метод фрагмента, а не активти, если сорцы библиотеки не врут моим глазам)
Действие 1:
WorkerFragment цепляется в MainActivity
все чики брыки всем все резалтится
Действие 2:
WorkerFragment цепляется в SupportFragment
который цепляется в MainActivity
WorkerFragment цепляется через getChildFragmentManager
Результат приходит в SupportFragment
Вопрос какого хуя? Или это by design и родителские фрагменты должны перехватывать старты от детей и не форвардить их автоматом?
Я конечно понимаю что схема тупая, но это как бы уже после того как сделал и на такое напоролся.
>Я бы на твоем месте посмотрел бы в сторону дата биндинга.
Там вроде траблы будут с онЧек событием.
>>621021
А они там точно по порядку все? Или порядок нахуй не уперся? Он же все же лист юзает.
>>621129
А вот это годная штука, спасибо.
Только это говно затратное.
А у него тут итем листа >>621024
>>621161
>Релайтив не думал сделать?
А нахуй там рилейтив? Линеар в линеаре это удобная блочная верстка, что-то поменяешь все не пойдет по пизде. А релейтив с его идшниками та еще веселуха, и он скорее всего медленнее будет работать.
>При этом средний разработчик получает в разы больше за месяц работы над приложением, которое точно не окупится.
Ну как бы я так и делаю. Я не из тех дибилов которые работают для себя. Я бы ебловал если бы мог. А так я пока что деньги зарабатываю и скил повышаю, будет годная идея - буду делать но не во вред работе.
Да знаю я. Я хотел уточнить это ли имеет анрн в виду.
> Только это говно затратное.
Ну и что? Взялся за джаву — нечего байты ебать.
Если серьёзно, то затраты вообще несерьёзные.
>Взялся за джаву — нечего байты ебать.
Джава то тут при чем?
Это лист. В листе всякие движения жопой лучше не делать.
> Вопрос какого хуя?
Прост. Тоже с этой хуйней проебался когда то
>>621593
> и он скорее всего медленнее будет работать
Нет. Чем меньше уровней вложенности, тем лучше. Количество onMeasure вызовов уменьшается, в некоторых случаях сильно.
> It is a common misconception that using the basic layout structures leads to the most efficient layouts. However, each widget and layout you add to your application requires initialization, layout, and drawing. For example, using nested instances of LinearLayout can lead to an excessively deep view hierarchy. Furthermore, nesting several instances of LinearLayout that use the layout_weight parameter can be especially expensive as each child needs to be measured twice. This is particularly important when the layout is inflated repeatedly, such as when used in a ListView or GridView.
Уже много читал по поводу что быстрее.
На самом деле строго похуй, но линеары до какой-то там вложенности должны быть быстрее. Рейлейтив тоже со вздрочем работает.
Даже более того, есть люди которые говорят делать все блочкой, а есть те кто говорят что релейтив лучше.
Но тут я вспомню правило "преждевременная оптимизация - зло". И потому советую всем хуярить как удобно.
Так в любой либе для парсинга есть джейсон обжект, в который распарсится любой адекватный джейсон. А дальше растягиваешь его на джейсон элементы. Забираешь те которые нужны.
>Во-вторых можно и в листе. Опыт показывает, что даже getView можно забивать всяким говном на 150 строк — всё будет хорошо даже на старых бюджетках.
Это для тебя 150 строк, поиск не по идшникам потратит больше времени чем через айдишники.
Но юзай холдерпатерн забиваем на это болт.
Есть такая задача: пользователь скачивает файлы (.mp3), одновременно можно скачивать только 3 файла.
Необходимо - организовать очередь и доставить в UI поток информацию о прогрессе и результате. Сохранить файл в стандартную папку с музыкой.
Годный ли такой подход?
1) Создаем FixedThreadPool на 3 потока
2) Каждый поток занимается тем, что скачивает файл и сохраняет его в папку с музыкой, результат и прогресс сплёвывает через Handler?
Мне другое не понятно: если у меня каждый элемент списка содержит вложенный linear layout, в который динамически добавляются элементы. То как здесь избежать findViewById? Никак?
Никак.
>в который динамически добавляются элементы
Ты инфлейтишь их? Если да то это пиздец для листа, буде тупить при определенном количестве инфлейтов. И холдер не поможет.
Хотя напиздел.
> в который динамически добавляются элементы
файндвью нужна чтоб связать иксемель с кодом, можно писать вьюху из кода.
Вариант, но опять же инфлейты будут вызывать лаги, если не критично то забей.
Сорри, что не совсем в тему, но не могу придумать идею простого приложения под Андроид для запиливания.
Нужно, чтобы приложение содержало несколько функций пользователя, было реализовано несколько собственных классов (помимо стандартных), использовался MVC, и также чтобы присутствовала работа с датчиками/устройствами, работа с файлами, с базой данных (SQLite), с облаком и пр. (что-то одно или несколько из этих вещей).
Подумывал какое-то приложение для мат. статистики запилить, типа для ряда значений рассчитать всякие хар-ки, мб графики построить, но работы с системой маловато (если только запилить чтение/запись данных в файл). Или органайзер времени (задач), т.е. вбиваешь задачи для выполнения и сроки, если какая-то задача близка к завершению, то выдается оповещение (мб с помощью Notification), но это, наверное, слишком заезженно и простовато.
Алсо, думал простейшую гоночку в псевдо-3Д запилить, и управление сделать наклонами телефона (gravity sensor для этого нужен, как я понял?), но что-то боюсь сложновато будет, много по времени займет запиливание этого псевдо-3Д (еще для отрисовки хз что удобное использовать) и реализация управления сенсором.
Подскажите какие-то идеи. Или мб по приведенным выше что-то можете подсказать?
> работа с файлами, с базой данных (SQLite), с облаком
Очередной плеер музыки вк с кэшированием.
Предмет "Мобильные и встраиваемые операционные системы". Другие варианты заданий: написание драйвера для устройства, написание приложение под Win Phone или написание программы для других встраиваемых систем с ОС.
Выбрал себе написание приложения под Андроид, т.к. это как-то ближе хотя на самом деле ни с чем из этого не работал толком
Это ж надо еще наверное ВК API знать?
Мне бы желательно поменьше дополнительных инструментов изучать, чтобы быстрее сделать задание.
VKSdk есть. Там довольно просто.
Как же я рад, что не пошел на факультет ИТ.
> Это для тебя 150 строк, поиск не по идшникам потратит больше времени чем через айдишники.
Разумеется. Возможно, на порядок больше. Не 10 мкс, а 100. Бида.
Кроме токена хранить ничего не требуется.
Насколько безопасно так его хранить?
Какие подводные камни?
У меня была похожая хуйня, но неограниенное количество одновременных закачек с возможностью отмены, еще и в разных местах в приложении могло показываться и при закрытии должно было закончится в бэкгрануде. Наделал костылей с сервисом в котором есть ExecutorService с кэшем тредов. Из фичи общался с UI через интенты. Лучше бы сделал через DownloadManager и в одном треде его бы ебал вопросами ну че как там уже сколько загрузил и оттуда слал бы интенты.
http://stackoverflow.com/questions/10161266/how-to-securely-store-access-token-and-secret-in-android
На рутнутом телефоне может быть не безопасно, но во-первых кого это ебет, а во-вторых можешь шифровать своим еба методом уровня цезаря и тогда точно пока не возьмутся за реверс инжиниринг все будет ОК.
В DownloadManager можно задать имя файла под которым он должен сохранить загруженное?
Вообще вариант с DM выглядит более костыльным. По сути допиливаем нужный функционал через костыли.
Незнаю, как сейчас - пару версий назад было можно. Я так делал, когда только начинал кодить под ведроид. Но потом всёравно решил перейти на студию.
>можно задать имя файла под которым он должен сохранить загруженное?
Конечно можно: http://developer.android.com/intl/en/reference/android/app/DownloadManager.Request.html#setDestinationUri(android.net.Uri)
>Вообще вариант с DM выглядит более костыльным
Выбор между системными костылями и своими.
>Выбор между системными костылями и своими.
Своя реализация - это велосипед.
Велосипед лучше костылей.
Много ли можно заработать на этом?
OP пост
Напиши мне приложение, ну как контакт, короче. Ну я знаю, что ты талантливый программист, тебе несложно будет))) Как только окупаться начнет, сразу заплачу, зуб даю) Еще и друзьям про тебя расскажу, нарасхват будешь)))
Но это он про БД на сервере, а мне надо локальную.
Здесь другие ребята. Лабы под андроид писать не получится. Обычно требуют либо делать с нуля, либо доделывать начатое
Какая специальность?
Если долго и с глюками грузится - перезапустите программу, сервер раскочегарится. Суть не в этом. Хотелось бы советов мудрых услышать насчет внешнего вида и требуемого функционала для программы такого рода.
Так и получится. Студия сделана на базе intellij idea.
Т.е. ты грузишь со своего сервера страницу на которой картинки с двача?
Охуеть, а без сервера нельзя?
Можно, но это существенно повысит требования к скорости интернета клиента. Представь что инет у юзера не оч, и сраная страничка с картиночками будет грузиться 5 минут, так нельзя делать. Формировать же галерею все же куда проще на серве через ноду чем на телефоне.
На моем Nexus 5 с Android 6.0.1 тормозит ПИЗДЕЦКИ
https://play.google.com/store/apps/details?id=au.com.redata.android.demo&hl=ru
Получится JSON в котором хтмл код который надо засунуть записать в базу и возможно засунуть в вэбвью. Ну короче баннер рекламный. Мне в ванильной жавы треде уже ответили, FutureTask конфетка.
http://ionicframework.com/
Как думаете, стоит обмазаться? Иногда клиентам нужно простенкое приложение под сайт, если в такой хуйне можно быстро его сделать, то я не прочь.
мимо из php треда
черный софт пишут уже? востребовано?
У меня есть две версии приложения, full и free, различаются исключительно отсутствием рекламы. Предположим на девайсе установлены обе версии. Приложение умеет грузить картинки из галереи/с камеры (использую стандартные средства ведроида). При загрузке есть вероятность того что Активити вызывающая будет выгружена из памяти, и тогда при возврате она будет пересоздана. Как правильно описать intent-filter в манифестах платной и полной версии, чтобы при возвращении из стандартных активити Андроида не появлялся диалог с выбором, какое из приложений (полное или бесплатное) запустить?
Так есть же post, а вообще я сделал через фичу, там не вьюшка висит, а просто интерефейс который умеет реагировать и в done() через предоставленный Handler или через Handler главного треда post.
Ну смотри, юзер качает бесплатную версию, потом через какое-то время решает купить полную, но бесплатную не удаляет. И что тогда?
Правильно я понимаю, что это важно в том случае, если приложение очень популярно, платное и используется туева куча сторонних либ?
У меня используется 2 либы:
https://github.com/intuit/sdp
https://github.com/kolavar/android-support-v4-preferencefragment/blob/master/LICENSE
Мне не зачем волноваться и можно не делать такой раздел?
Я понимаю, что интересно всё исследовать, ты молодой-шутливый, но ты просто изобрёл велосипед. Абсолютно то же самое умеет делать AsyncTask: он именно так и работает.
Забей, алсо вторую поменяй на гугловский preference appcompat есть отдельной либой.
Ага. Осталось вспомнить зачем я использовал его вместо гугловского.
@Override
public boolean onKeyUp(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_MENU) {
Log.v("App", "menu event");
return true;
}
return super.onKeyUp(keyCode, event);
}
Бери Unity3D и пиши.
что планируешь делать в связи с ситуацией с api level 23 и apache со старыми своими приложениями ?
Анончики, хочу пойти на стажеровку в контору по разработке приложений под ведро, есть проблема из все что знаю это только с курса elegion от гугл ну так чуть тыкал в android studio. Вопрос в том что бы подготовить для собеседования, порекомендуйте самый минимум навыков, знаний что бы выглядить хотя бы знающим?
>ничего не знаю и исправить это не пытаюсь, хочу быть девелопером
Контора с таким же успехом может взять джамшута с улицы вместо тебя. Читай книжки, кури туторы, пили хелловорлды.
Дайте годную книгу на русском языке для хелоувордов
Есть. Но человеку, не умеющему пользоваться гуглом, я помогать не буду.
>Я понимаю что можно через AsyncTask,
У тебя раннейбл запускается в другом потоке? Тогда как ты вообще собираешься взаимодействовать с вьюхой?
А так, можешь попробовать делать, например, thread interupt для отмена, если у тебя работа с интернетом не блокирует поток. Иначе никак - ибо состояние interrupted тебе придётся проверять вручную в методе run
Сам валю из тырпрайза в ведроид, ибо заебало бесконечное количество AbstractSingletonProxyFactoryBean, 20 слоёв ебаной бизнес логики над бизнес логикой, бесконечная абстракция и прочие радости тырпрайза. Правильно делаю, или путь онли в сишечку?
Сотни их.
Всмысле?
Я ньюфаг, но как понял по семплам от гугла. Что надо в каждое активити вставлять фрагмент и работать уже с ним. С лейаутами также, вместо того, что бы все запилить в одном надо делать <include> -> <include> -> <include> и так далее. Такое ощущение, что изначально все должно было быть по-человечески, но у них не получилось и в итоге сейчас понавставляли кучу костылей и у меня жопа горит от этой запутанности.
>Я ньюфаг
Вот покодишь еще годик и поймешь что так и надо, даже больше, что без фрагментов, отдельных ресурсов для всего и т.п. - без этого просто невозможно. Всегда для фрагмента, адаптера, хуяптера с листенерами и вообще любой дрисни можно запилить отдельный класс и спокойно ебать его, а не оперировать длиннющими на три экрана строчками с бесконечными анонимными функциями для описания сраного алертдиалога, который пользователь и не увидит никогда. Запилил нужное говно в классе и забыл. А когда о нем надо вспомнить - залез в класс и выдрочил его, без получасового поиска нужного женерик названия в документе.
У каждого фрагмента есть ui, и своя логика загрузки данных. Для загрузки данных используются методы стороннего апи (синхронные, либо асинхронные), и соответствующие им коллбэки.
Есть 2 решения:
1) Захуячить setretaininstance(true) - но тогда надо смотреть, чтобы при доставке данных ui был доступен (как?), ибо при повороте он всёравно будет перерисовываться.
2) Не делать setretaininstance - но тогда придётся всю эту хуёню-малафью с методами апи оборачивать в лоадеры, что породит кучу огромных лоадеров с нехилым велосипедом.
Какое вы юзаете?
Rx
Но тут будет два варианта:
1) Хранить подписки во фрагмeнтe с ретаэйном;
2) Хранить подписки в синглтоне
>1) Хранить подписки во фрагмeнтe с ретаэйном;
>2) Хранить подписки в синглтоне
Что не отменяет взаимодействия с ui при доставке. Надо как-то проверить, что ui доступен, особенно интересно, как это сделать во фрагменте с ретейном, где сам фрагмент не пересоздаётся, но ui перерисовывается.
Нихрена не будет доставляться если ты отпишешься в onPause(). Ретэйн фрагмент умрет тогда, когда умрет активти, значит останавливай все. Ты не так понял ретейн фрагмент. Я имею в виду не UIшный фрагмент, а тот который просто висит в мэнэджере - UI не имеет. Так что смотри: UI фрагменты подписываются, отписываются, а ретейн держит сабскрипшены и вообще рулит процессом.
Ты смеешься? AndroidManifest.xml открой, а ошибки в логе.
А хули не так?
Пшол отсюда, мразь.
Но нахуй окно логина вешать на фрагмент?
С фрагментом работать намного хуевее чем с активити, как минимум из-за того что постоянно нужно смотреть привязан ли фрагмент к активити. В результате на каждый вызов ретрофита нужно прописывать ифы и так с любой асинхронной хуйней по сути.
Что бы трекать сессиию например и другие похожие вещи. Да и проверок особенно не нужно если ты пишешь на диск, а фрагменты просто реагируют. Вот был бы нормальный колбэк как Application.onCreate(), только Application.onDestroy(), а так нужны костыли.
>Что бы трекать сессиию например и другие похожие вещи.
Типа на онДетаче посылать запрос про офлайн? Это имел ввиду?
На диск это ладно, но для любой работы с юи нужен не контекст, а активити.
Если все правильно сделать - все подписки и колбэчики, то до не приципленного фрагмента они не дойдут
А все, уже разобрался, ебучий легаси. (http://stackoverflow.com/questions/16682847/how-to-manually-include-external-aar-package-using-new-gradle-android-build-syst)
Каким образом?
Ну блять, подписка просто более правильный подход, но по сути все равно идет слежение за тем привязан ли фрагмент к активити.
На счет онДетача фрагмента, если убить процесс системно, онДетач не должен же срабатывать?
Тогда каким образом можно следить за статусом пользователя? Ушел апликухой в бэкграунд, но еще в онлайне же, убило системой и онДетач скорее всего не сработает.
Так я и говорю, что нет у апликэйшлна точного метода, когда все. Не знаю откуда ты он детач взял. А вот у активти есть, если ты убьешь процесс, то onDestroy() точно вызовется.
>onDestroy() точно вызовется.
Вообще-то нет, не вызовется. Я и подумал что ты хочешь сказать что при убивании процесса на фрагменте онДетач вызывается, но видимо нет.
Ох, ебушки воробушки, аноны, как вы ебетесь с этими ведрами если тулзов адекватных и ускоряющих разработку гугол как не поставлял так и не поставляет? За что вы так ненавидите Xamarin? На ios разработка идет в лет, на ведро портируется в шум, если твоя аудитория это не носители говно-телефонов. Что не так?
ну я имею ввиду что быстро фичи фичевать. Я не думаю я всякой низкоуровневой херне, которая в большинстве приложений нахрен не упала. Просто беру и юзаю из коробки то что есть и оно работает. Без глюков. Есть места которые надо напильничком подлатать - но таких немного. В основном ты пишешь бизнес-логику а не трахаешься с оптимизациями, куришь логи девайса, ковыряешь dSym итд На это же уйма времени тратится в нэйтиве
+....ебал я в рот тех кто писал андроид студио - тупорылое и тормозное говно особенно эмулятор
Там есть разница, но SQLite попросту проще. Много чего нету, много что для галочки типы данных например и тд.
Но всякие иннерджоины и тд аналогичны, так что пох на самом деле.
Единственное что после обычной sql нужно будет почитать разницу чтоб не ожидать всяких убер фич и приемов.
SQLite изучается документацией. Она сильно упрощена, по сравнению с мускулями/постгресами.
Ты только что сломал мои розовый очки. Действительно не вызвалось, но то был терминэйт мануальный. При более не менее нормальном поведении, то есть когда грохает система, но еще не так жестоко(don't keep activities) всем все вызывается.
Да как нехер. Затаскиваю любую либу с гитхаба которая умеет это делать на api 14-19 и пишу рендер кнопки, который действует по всему проекту.
Android SDK тоже на Java, прикинь. Затащить любое .JAR дерьмецо можно быстрее чем это описано в туториале Xamarin, ибо понаписано плагинов для этого дела более чем достаточно. Все это превращается в пару раз тыкнуть мышкой в VS.
Ну а рендер по сути это нативная обертка над любой вью. Там все пишется старым дедовским способом - как гугл завещал. В итоге я имею кнопку которая описана в кросс-платформенном лэйауте и которая имеет 1 вид на ведрах, и так же имеет другой вид на ios. При этом верстка не трогается. Я пишу её 1 раз и дальше подключаю необходимые эффекты если надо. Но большинство анимаций например из коробки есть. Если надо что-то вычурное - пишем сами или тащим либу
При том мне доступен полный SDK - поэтому можно и самому написать используя обучающие материалы нативной разработки.
А вон там обсуждают, нужен ли бодишоп вообще
По теме: многие ли из вас работают удаленно напрямую?
Два дивана - это сила, называется. Бодишопы нужны аутистам, которые не могут в общение, и заказчикам, которые не хотят рисковать (энтерпрайз прежде всего).
Рейт $20 в бодишопе - это как минимум $10 на налоги (в отличие от хохлов, где все - ИП, в России за такое ебут), плюс офис (аренда, уборщица), плюс оплата труда хрюш, пинающих этих аутистов манагеров, тачку директору, хуе-мое, вот и $35-40 у заказчика. Заказчик тут платит не программисту, а за комплекс услуг. Заказчик тут - менеджер в каком-нибудь западном банке, у которого мысли о том, как он после 6 пойдет домой к жене, и ему гемор вообще не нужен, его интересуют формальные показатели и цифры, от которых у него зависит премия.
Напрямую платить $40/h заказчик за такой же скилл не будет, потому что бодишоп предоставляет услуги - он на себя берет риски того, что исполнитель может слиться, забухать, уйти на больничный. Поэтому, чтобы получать $40/h напрямую нужно развивать скиллы общения, наработать репутацию, что ты надежный и не сваливаешь на половине проекта, мучиться/наслаждаться с заказчиками не из энтерпрайза.
А столько же, сколько местным, платят только уникальным специалистам, когда гемор удаленки окупает пользу компании. Т.е. единицам. Обычно удаленность и отсутствие нативного английского уже подразумевает дисконт.
Минуса есть. Иногда жестко тупит VS, приходится перезагружаться.
Долгое время загрузки приложения, если не настроен линковщик, который должен уменьшать подключаемые библиотеки да и твой код тоже.
И обновления в Xamarin это зло. Нужно очень долго работать с этой платформой чтобы вовремя обновиться без последствий. Да и то...
Недавнее обновление например добавило в инсайты новых эксепшнов, которые раньше не возникали. Нужно точно знать номер стабильной версии Xamarin и библиотек Xamarin Forms.
Ну и нельзя давать себе вольницу при верстке лэйаутов и фигачить высокую вложенность контейнеров и управлять их видимостью. Обычно в такие моменты вспоминаешь нативную работу с фрагментами, когда заменяешь один лэйаут другим в рамках одной activity. Это реализуемо в ксамарин, но расходится с парадигмой XamarinForms.
Ну и опытный программист знает что на Xamarin списки из коробки неоптимизированны и есть отличное решение - отказаться от автоматических биндингов в ячейки и обновлять их ручками. Новички про это не в курсе и всегда когда получают глючное решение - ругают замарин. Может оно и объективно, но решение есть и оно даже на костыль не похоже.
Работу с Http нужно организовывать не через стандартные немспейсы, а подключать либу которая работает с нативными инструментами - ибо работа в 2-3g сетях стабильнее. Вообще нельзя сказать что прям все работает из коробки, но магазин компонентов и Nuget полон самых разных решений.
Если не надо делать что-то вычурное и необходимо это пилить на 2 а то и на 4 платформы сразу то Ксамарин самое то. Если нужно написать лаунчер какой или ещё что подобное - Замарин не ваш выбор однозначно.
Нестандартный UI пилится очень сложно. Если следуешь гайдлайнам - все ок. Как уходишь начинаются проблемы.
Время наш главный враг. В 1 рыло за месяц можно намутить добротный прототип на 3 платформы. Быстрота главное преимущество. Потому и денег стоит. Да и комфорт никто не отменял, я о многих вещах даже не задумываюсь, просто беру и делаю
compile 'com.google.android.gms:play-services:8.4.0'
всё отваливается и пидорасится, в логе только "Gradle build finished with 1 error(s) and 4 warning(s) in 2m 2s 280ms"
а конкретику найти не могу.
Ну на джсе тоже можно клепать. Толку то. Пока рынок требует будет на джаве писать.
Плагин сервисов подключил? Попробуй только карты подключить и base (или core, если там есть, а то вдруг выдумываю). Проверь версию грэйдла и его плагина.
Неа, хотя есть подозрения, что делаю что-то не так.
Не понимаю, почему вообще подключение в dependenses рушит билд.
БЛЯДЬ БЛЯДЬ БЛЯДЬ
Весь день ебусь, пиздец какой-то.
Только что очередной раз добавил новую активити по шаблону гугломэпс, по ссылке создал ключ, вставил, запускаю, и снова
Gradle build finished with 1 error(s) and 4 warning(s) in 1m 33s 994ms
Если создавать с нуля апп и делать всё то же самое. то получается, а так - нет. Пиздец
Уже нашёл, был какой-то конфликт с либой для асинхронных запросов, причём выяснил я это тупо отрубая компоненты, пока не нашёл эту парашу.
Котаны, а подскажите, есть ли список полезных советов, каких-то фишек, которые бы экономили время и нервы?
>Котаны, а подскажите, есть ли список полезных советов, каких-то фишек, которые бы экономили время и нервы?
>Gradle build finished with 1 error(s) and 4 warning(s) in 1m 33s 994ms
Используй линупс, там градл быстрее в разы работает. На моём ноуте в винде градл хэллоуворлд компилится за 10-12 секунд (с демоном, без демона однохуйственно, с демоном даже медленнее иногда почему-то выходило, хз, причём градл последний специально качал, а проебаться с настройками там сложно - их практически нет), а на линупсе (у меня centos 6.7, что для ведроразработки ещё и не самое оптимальное, приходилось вручную пердолиться с пакетами, которых в репозитории не оказалось) прямо сейчас запустил - первый раз раз 5.8 секунд (подрубился демон), последующие - меньше секунды (0.8-0.9)
Кстати, сейчас специально ради тебя перекомпилировал свой проект. Первая компиляция (то есть, полная, с clean и всеми тасками градла) вышло 30 секунд. На шинде до 2 минут доходило.
Это еще что, у меня R файл не генерировался, хотя я сделал clean и build, пока не удалил все drawable, а потом обратно вставил.
Привет пацаны! Как и многие решил угореть по андроиду, написал приложуху (афишу для местных кинотеатров) и заметил, что скролл не такой плавный как в приложении ВК.
Ради такого дела полез смотреть трассировку - если мотнуть экран вниз, то первое время все нормально (пик 1), но в какой-то момент все становится плохо (пик 2) и дальше лучше не становится. Во фрэйме, после которого все ломается, происходит "Expensive Bitmap uploads" Pixels uploaded "0.31 million", Time spent 11.750 ms, Upload 1038x300 Texture took 11.75ms. О каких текстурах идет речь я не понимаю, у меня даже при всех закомменченных ImageView такая же фигня.
Может я накосячил в программе или еще что. Поэтому я собрал пример полностью по руководству гугла http://developer.android.com/training/material/lists-cards.html#Dependencies и, естественно, ничего не изменилось. Скролл такой же рваный. В моей пустой программе тормозят даже пустые карточки (пик 3).
Что можно сделать, пацаны? Мой телефон говно? Или это я не понимаю сути андроида?
http://pastebin.com/69rh2Pxa - даже вот этот адаптер тормозит (с него 3й пик)
http://pastebin.com/F2K8BetZ - а вот такая верстка для 3 пика.
И хочу добавить что таких проблем как несколько постов выше с гугло-картами на замарине нет. Подключил за 2 минуты, расширил немного классец карт, добавил что надо и оно работает, компилится без всяких танцев с бубнами. Собсно за это фирма и деньги на лицензии платит
Попробуй на эмуляторе посмотреть. Просто тут действительно нечему лагать.
1) public class DataObjectHolder, почему не статик?
2) Этот OnCLikListener выглядит просто ужасно; Мне кажется легче в onBindViewHolder передать объект, который будет рисоваться во вьюхолдер и тогда нет нужды с этими кривыми хренями;
3) Есть подозрения, что все так хреново из-за RelativeLayout'a в корне иерархии;
Этот пост >>626664 про этот код >>626637
>>626695
Код не мой, я другой анон но есть вопросы.
>1) public class DataObjectHolder, почему не статик?
Вообще правильно, мол чтоб мемори ликов не было нужно статик делать. Но логически я никак не могу понять каким образом в данном случае будет мемори лик?
>3) Есть подозрения, что все так хреново из-за RelativeLayout'a в корне иерархии;
Очень сомневаюсь в этом.
> 1) public class DataObjectHolder, почему не статик?
> 2) Этот OnCLikListener выглядит просто ужасно;
Первое - это следствие второго.. Статик пришлось убрать, потому что myClickListener.onItemClick не получалось вызвать из статического объекта, а по-другому я не разобрался.
> Мне кажется легче в onBindViewHolder передать объект, который будет рисоваться во вьюхолдер и тогда нет нужды с этими кривыми хренями;
Не совсем тебя понял, но мне кажется это дельный совет. Поясни, пожалуйста, подробнее.
> 3) Есть подозрения, что все так хреново из-за RelativeLayout'a в корне иерархии;
В самом приложении нет релатив лэйаута, там вот так: http://pastebin.com/jjfBhMKx
>>626664
На эмуляторе такое же поведение, я трэйс в нем и сделал, в телефоне ядро без дебага собрано. Эмулятор у меня 5й версии вроде, на телефоне 4.4.2. Проблемы в обоих
Аноны, может быть проблема в том, что я в бете андроид студии 2.0 preview 4 пытаюсь работать?
Аноны, я проверил, от версии студии тормоза по прорисовке не зависят. Кто-нибудь может проект с recyclerview и карточками у себя погонять и посмотреть, будут ли тормоза такие же как у меня?
https://dropmefiles.com/kzpes - вот пустой проект, который ближе к низу списка у меня начинает тормозить.
Downloader сохраняет эту переданную ссылку в поле mCallback. Внутри Downloader объявляется AsyncTask, который в onPostExecute вызывает mCallback.onResult(yoba).
Вопрос: если в момент выполнения AsyncTask Activity будет убита, что произойдёт? Будет ли собран сборщиком объект Downloader? По идее объект AsyncTask будет иметь ссылку на родительский объект, значит ли это что он будет жить? Значит ли это что ссылка mCallback вмесие с Activity также останется жить?
Если всё да, то какой нормальный выход? Сделать WeakReference mCallback? Сделать AsyncTask статик классом (и можно ли так)?
Парни, это опять я. Опытным путем я нашел проблему. И теперь надеюсь, что вы подскажете мне, как быть.
Суть в том, что у меня тел philips, и в прошивке есть фирменная фишка XPower Tech (мать её).
Блин. Само отправилось..
>Данный режим работает на базе технологии PowerXtend, фирменной разработки компании Lucidlogix. Он необходим для того, чтобы уменьшить энергопотребление системы в процессе запуска тяжеловесных приложений – таких, как сложных игр с серьезной графикой, браузера с множеством открытых вкладок, программ для навигации и т. п. PowerXtend позволяет в этом случае сэкономить до 30% емкости аккумулятора! На практике это выливается в несколько дополнительных часов использования мобильного устройства в автономном режиме
Блин. Само отправилось..
>Данный режим работает на базе технологии PowerXtend, фирменной разработки компании Lucidlogix. Он необходим для того, чтобы уменьшить энергопотребление системы в процессе запуска тяжеловесных приложений – таких, как сложных игр с серьезной графикой, браузера с множеством открытых вкладок, программ для навигации и т. п. PowerXtend позволяет в этом случае сэкономить до 30% емкости аккумулятора! На практике это выливается в несколько дополнительных часов использования мобильного устройства в автономном режиме
По-видимому, эта технология тупо ограничивает fps в приложениях. Вот какого хуя эта фигня считает мое приложение тяжеловесным я не понимаю...
Ставишь fiddler на комп + его сертификат на девайс и читаешь весь шифрованный трафик
Но происходит беда - они не умещаются на экране, а скроллбар не появляется, что делать?
Омг, не ту картинку добавил.
Лейауты выглядят так:
автокомплит:
<AutoCompleteTextView
android:id="@+id/autoCompleteTextView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input"
android:scrollHorizontally="true"
>
<requestFocus />
</AutoCompleteTextView>
листайтим:
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="@dimen/appbar_padding_top"
android:scrollHorizontally="true"
/>
ЧТо-то я совсем даун, тут картинку забыл, мод, пофикси, если слишком даун.
Как лучше это сделать?
onActivityResult, уже разобрался.
Именно по-этому не имеют смысла любые смартфтны кроме nexus.
Уж больно любят пихать странную фигню, которая не нужна и тормозит/глючит.
Таких проблем нет и на Java.
Средство есть и называется: опыт.
Такие проблемы с картами должны быть у каждого. В результате их имеем у одного ньюфага.
Так что и здесь проблем нет.
Очевидно, что ксамарин привносит:
1. Тормоза
2. Новые баги
3. Хочет денег
И в треде про разработку под android не имеет смысла обсуждать ксамарин, т.к. тут java справляется лучше.
ActionBar скрыл, в как это сделать Toolbar`е тоже не догоняю.
Надежда на тебя, анон!
Есть activity (класс1 скажем) для экрана. На этом экране layout, на котором лежит imageview.
Из этого активити по нажатию на кнопку должна запускаться анимация imageview.
Анимацию формирует другой класс (класс2). В этом же классе анимация и запускается для imageview.
Анимация представляет собой AnimationSet, который в себя включает последовательность анимаций по перемещению imageview (TranslateAnimation), они идут подряд друг за другом, и на каждую из этих анимаций перемещения навешены листенеры, которые меняют картинку (пикрил1).
В чём проблема
1)нажимается кнопка
2)появляется событие в класс1
3)обработчик события кнопки в класс1 вызывает класс2, чтобы сделать анимацию и её начать выполнять
4)анимация в класс2 формируется, для imageview вызваю startAnimation(анимация).
5)!!!тут проблема. Я думал анимация сразу сработает, но сначала возвращается управление в класс1, в обработчик
6) как только по телу обработчика поток доходит до конца, только потом срабатывает анимация.
то есть, поставив в обработчике thread.sleep(10000), анимация через 10 секунд только сработает.
У меня вопрос, почему сразу не срабатывает, и как запустить её сразу?
Чисто визуально, программа работает нормально. Но мне нужно решить этот вопрос чтобы сделать ещё кое-какие фишки.
Старался как можно понятнее объяснить. Без класса2 не обойтись.
Система отцепит активити, но сборщик его не уберет, итого у тебя будут висеть активти, и другие объекты. Что бы так не случалось надо загружать по другому, тут два стула:
1) Отменять загрузку при смерти или даже паузе активти;
2) Писать на диск, а в UI реагировать на изменения;
Тема старая и болючая, вот ссылочки https://docs.google.com/file/d/0B2dn_3573C3RdlVpU2JBWXdSb3c/edit, codeforces.com/problemset/status, но они уже прогнили, как говно мамонта, и есть новые модные решения из коробки и все говно.
>>626965
Ну смотри вот мой код стандартного адаптера которым я пользуюсь (http://pastebin.com/vruYdEmA), присутствует в том или ином виде в трех приложеньках, хотя очень далек от идеала, так что use sparringly. Собственно все действо будет происходить в onBind(T data) потомков AViewHolder'a, а в констуркторе я обычно выставляю как OnClickListener (или еще какой) сам холдер. Заодно обосрите братушки.
Блять запятые и скобки прицепились, не серчайте.
Зачем ты вообще пихаешь thread.sleep(10000) в анимацию? Для отложенного старта анимации есть метод... то ли сетДелей, то ли сетСтартТайм, короче в списке автоподстанова анимации что то такое поищи.
я не пихаю, я как пример привёл. один хрен, не работает
я всё сделал, вопрос отпал
Хотет перекатиться, ебошить под мобилки. Заебал дотнет. Тут либо хуячить сайты, либо хуячить нативные приложения, которые нужны только секретаршам.
спасибо, почитаю
> Какого это было перекатиться с шарпа на жабу?
Как делать нехуй. Даже гайды по джаве не читал.
Мне понадобилось снова что-то на C# написать: так непривычны эти свойства в шарпе.
Порой листаешь список методов и ищешь, где же там getХуйня()
Я не понял. Ты писал на шарпе, потом на жабу, а теперь на шарп, где ты настолько отвык от проперти?
Именно. Всегда по привычке начинаю набирать метод со слова get/set или искать глазами.
Охуеть. А я думал, что всякие плюшки шарпа, типа свойств, прочно впаиваются в черепушку, что аж потом жить без них не можешь.
А что это в шапке нет ничего про Kotlin?
IntelliJ IDEA его поддерживает (и Android Studio, RoboVM Studio тоже)
Kotlin - язык 2011 года разработки, совместимый (в обе стороны) с Java
Из коробки поддерживает: проперти, лямбды, экстеншем методы (как в C#), нормальный дженерик, перегрузку операторов (+,- и тд), в нем НЕТ checked исключений.
В общем очень похож на scale, но проще и всего +400kb к размеру APK (с proguard будет меньше)
RoboVM + Kotlin - отличная замена Xamarin (C# 2001 года уж смотрится архаично по сравнению с Kotlin)
Вот видео (на русском) про язык, от главного разработчика
https://www.youtube.com/watch?v=wjkaPXT_vY4
https://www.youtube.com/watch?v=018n0aXiljc
https://www.youtube.com/watch?v=VU_L2_XGQ9s
P.S.
Разрабатываю на нем уже полгода, могу ответить на адекватные вопросы
P.P.S.
Сам я на него перекатился из Xamarin (на Xamarin из нативного Android/Java, когда захотелось делать кросс-платформенные приложение)
Тк Kotlin еще компилируется в JavaScript, то его можно держать
как запасной аэродром на случай если все перейдут в HTML5
>>628441
Под Android и iOS (RoboVM - выходит дешевле через Xamarin )
>В общем очень похож на scale
На Scala конечно
Сразу предупреждаю, в нем нет имплиситов (вместо них экстеншен методы)
и более простой паттерн-матчинг (эдакий switch на стероидах)
>Под Android и iOS (RoboVM - выходит дешевле через Xamarin )
Вот тут не понял. Так что дешевле выходит? И почему? Явно ксамарин по логике вещей должен быть дешевле.
Алсо поясни за робоВМ. Я так понял если ксамарин дает возможность писать одинаковый код на иос и андроид, то что с робоВм какие плюса и минуса?
Да и какую иде юзать и тд.
>>628434
Оп в треде, т.е. создатель шапки.
Ну на нем можно писать, но тут такой вопрос, как с работой? Я так понимаю что он хоть и может скомпилиться в жабу, но это же дженерик код в любом случае, разве нет?
Вообще и сам думал о котлине какое-то время.
Оставь контакты какие-то на будущее.
Очень интересно пообщаться с человеком пилящим под две платформы.
Еще одно хипстерское говно без задач. Не будет по нему столько материалов как есть по разработке для ведра на джаве, когда на любой тупой вопрос дает ответ первая ссылка в гугле. "Вместо function можно писать fun, оставшееся время которое Вы бы потратили на дописывание ction можно затратить на зазубривание всего говна, которое мы запихнули в наш язык, вроде объявления переменной 15 разными способами!"
Ну тут хуй знает на самом деле, я вот хотел бы увидеть как котлин в жабу компилится.
Просто если оно взаимозаменяемо то похуй. На котлине и вправду может быть удобнее писать.
Еблантий, какие тебе нужны материалы по Котлину как на джаве, если он использует жаба-инфраструктуру? Описание языка -на оффсайте, вопросы по ведру - в гугле.
>Явно ксамарин по логике вещей должен быть дешевле.
Я имел ввиду саму подписку: 25$/мес = Android+iOS+Continuous Integration (в Xamarin для CI нужна минимум Business подписка)
Время разработки примерно как в Xamarin (на Xamarin Forms все таки быстрее, но имхо это зашквар)
>Алсо поясни за робоВМ
По факту RoboVM это тот же Xamarin, только вместо mono там java-virtual-machine.
Поддержки WP нет, но блин если бы в Microsoft не отказались от проекта Astoria, можно было бы запускать и на WP.
>Да и какую иде юзать и тд.
RoboVM (сделана на базе IntelliJ IDEA), а можно как плагин подключить к AndroidStudio или IDEA (но нужна более дорогая подписка)
>как с работой
Не знаю, пока работаю в небольшой компании - тут приходится вертеться для разработки приложений под разные платформы. Вакансии пока не искал.
>>628483
Ты прав мой юный друг
Вот он >>628581 прав - kotlin это только язык, он использует стандартные классы Java/Android API
>>628540
Код на Kotlin компилируется прям в java-bytecode.
Байт код поддерживает описание классов, вот они то и видны со стороны java.
Пример на картинке:
В IDEA можно посмотреть представление любого Kotlin класса в байт коде.
Тут видно, что для пропертей генерятся get/set и что все методы/классы по умолчанию final.
>если бы в Microsoft не отказались от проекта Astoria, можно было бы запускать и на WP
Кстати провожу исследование "можно ли портировать часть Android API на обычную Java".
Это нужно чтобы запускать Android приложения на WP10 (вместо проекта Astoria)
и просто на Window/OS X/Linux без эмуляторов (к примеру для отладки).
Может быть кто нибудь захочет присоединится?
P.S.
Я знаю что у Google есть расширение к хрому которое примерно это же делает.
>Та понял что в байткод, но как в джаву превратить этот код?
Никак, зачем это?
Вот ты когда подключаешь .jar библиотеку там же нет .java файлов (там только .class байткод),
но твой проект как-то видит классы от туда и может их использовать. Так и здесь.
>Continuous Integration
>Чой-то такое?
Мда, приехали https://ru.wikipedia.org/wiki/Непрерывная_интеграция
>Есть аноны которые пишут в Xamarin?
Да и мой тебе совет - начни с чего-нибудь одного (либо писать под ведро либо изучать C#)
>Есть желание выучить c#
>Шилдт подойдет?
нашел где спрашивать, с такими общими вопросами тебе в c# тред
Хотелось бы совместить приятное с полезным.
1) Складывать два BigDecimal через +, а не через метод add()
JAVA:
BigDecimal sum = new BigDecimal(2).add(new BigDecimal(4)).add(new BigDecimal(8));
KOTLIN:
val sum = new BigDecimal(2) + new BigDecimal(4) + new BigDecimal(8)
с экстеншен методом можно еще так
val sum = 2.bd() + 4.bd() + 8.bd()
2) Добавлять оператор [] к спискам, сеттам, словарям (а не только как в Java в массивах)
и вызывать не только по int, но вообще почему угодно (к примеру Sting)
KOTLIN:
val map = HashMap<String, String>()
map["string-index"] = "string-value"
val result = map["string-index"]
3) Сравнивать через a > b (a < b, a <= b и тд) любые объекты с методом compareTo()
И главное что это просто методы и их можно добавить как экстеншен к любому
уже написанному (даже final) классу, типа String (он final) или Activity
Больше инфы: https://kotlinlang.org/docs/reference/operator-overloading.html
>>628928
На самом деле синтаксис как в 90% современных (не строго функциональных) языках, типа Scala, Groovy.
Тот же Swift очень похож на Kotlin (хотя и появился на пару лет посже)
>Никак, зачем это?
Затем что твой код могут захотеть перепилить, и на тебе, нужно искать котлин разработчика, которых нету.
>1) Складывать два BigDecimal через +, а не через метод add()
>3) Сравнивать через a > b (a < b, a <= b и тд) любые объекты с методом compareTo()
Да похуй как-то.
>2) Добавлять оператор [] к спискам, сеттам, словарям (а не только как в Java в массивах)
и вызывать не только по int, но вообще почему угодно (к примеру Sting)
Выглядит как пиздец.
>Это типа у них свой град?
Это типа концепция, когда на удаленном сервере (типа Jenkins/Hudson/Team City),
при каждом коммите в репозиторий:
1) Автоматически собирается новый била (у него прославляется версия)
2) Запускаются юнит-тесты
3) Всем заинтересованным людям на почту рассылаются отчеты о сборке/тестах
4) Если предыдущие пункты успешны, то тестировщикам рассылаются готовые билды
В случае ошибки ты сразу понимаешь после какого комета она произошла, плюс экономия твоего времени.
Через gradle, maven, ant, msbuild - абсолютно пофиг (хоть через bash скрипт)
>>628961
Ну так не ищи, пиши на Java
Понял, спасибо.
>Ну так не ищи, пиши на Java
А перепиливать существующие классы как, я тебя спрашиваю?
А так хуй знает, я бы переехал на котлин, но как минимум у нас его редко юзают. Хотя за бугром может и чаще, все топ либы имеют примеры на котлине.
Все "фичи" намекают на то что эта параша создавалася для js-макак, чтоб они слезли с дерева и начали уже пилить хоть что то полезное без необходимости переучиваться на нормальный яп. Не зря еще трансляция в жс присутствует.
>>628983
Бедный дети, не видевшие ни одного языка кроме Java.
Перегрузка операторов - это способ сделать код короче и более читаемым.
Очевидно что это не значит что нужно его везде пихать, всему свое место.
Кстати перегрузка == очень полезна, с нем к примеру можно
сравнивать две строки по содержанию (без intern() изврата)
Во многих JMV языках (scala, groovy, clojure) есть перегрузка операторов.
Да и не только https://en.wikipedia.org/wiki/Operator_overloading#Catalog
Блин даже в iOS Swift она есть.
P.S.
Я просто прусь с вас - им предлагают язык 2011 года, нет они хотя 1994.
> Перегрузка операторов - это способ сделать код короче и более читаемым.
Слишком сложно для индусов же.
"Всего, чего нет в жабе, автоматически объявляется хуитой, как только это появляется в жабе, это автоматически становится нехуитой. При этом, требуется сделать вид, что хуитой это называл кто-то другой." (c)
• Определение типа переменной самим компилятором
var a = File("/file") // a - типа File
var b = HashSet<String>() // тип b HashSet<String>
если нужно явно задать тип, то это делается так
var c: Set<String> = HasрSet() // второй раз дженерик указывать не нужно
• Защита от NullPointerExcaption (NPE) на уровне языка
Все типы могут быть в двух состояниях: nullable и not-nullable
var a: String = ""
a = null // НЕ скомпилируется
a.toString() // скомпилируется
var b: String? = null
b = null // скомпилируется
b.toString() // НЕ скомпилирует
b?.toString() // скомпилирует, если b == null, то toString() не вызовется
b!!.toString() // скомпилирует, если b == null, то произойдет NPE
• Отдельные типы для изменяемых коллекция (MuttableList, MuttableSet и тд) и неизменяемых (List, Set, Map и тд)
В неизменяемую коллекцию нельзя добавлять новые элементы (компилятор не разрешит)
• Нет оператора new
var s = FrameLayout(this, null)
• Неизменяемые (val) и изменяемые (var) переменные
var a = "alice"
a = "bob"
val b = "alice"
b = "bob" // не скомпилируется
• В конце строки не надо ставить ;
Еще видео о языке от его разработчиков:
Андрей Бреслав
(рус) https://www.youtube.com/watch?v=9x6utkLDBs8
Светлана Исакова
(рус) https://youtu.be/mTr8TWj9MUU?t=45m30s - на конфиренции Scala разработчиков (на удивление спокойно отнеслись к языку)
(рус )https://www.youtube.com/watch?v=IXFIUF_KW_o
(eng) https://www.youtube.com/watch?v=dJscNr1silY
(eng) https://www.youtube.com/watch?v=50lASllvG3Q
• Определение типа переменной самим компилятором
var a = File("/file") // a - типа File
var b = HashSet<String>() // тип b HashSet<String>
если нужно явно задать тип, то это делается так
var c: Set<String> = HasрSet() // второй раз дженерик указывать не нужно
• Защита от NullPointerExcaption (NPE) на уровне языка
Все типы могут быть в двух состояниях: nullable и not-nullable
var a: String = ""
a = null // НЕ скомпилируется
a.toString() // скомпилируется
var b: String? = null
b = null // скомпилируется
b.toString() // НЕ скомпилирует
b?.toString() // скомпилирует, если b == null, то toString() не вызовется
b!!.toString() // скомпилирует, если b == null, то произойдет NPE
• Отдельные типы для изменяемых коллекция (MuttableList, MuttableSet и тд) и неизменяемых (List, Set, Map и тд)
В неизменяемую коллекцию нельзя добавлять новые элементы (компилятор не разрешит)
• Нет оператора new
var s = FrameLayout(this, null)
• Неизменяемые (val) и изменяемые (var) переменные
var a = "alice"
a = "bob"
val b = "alice"
b = "bob" // не скомпилируется
• В конце строки не надо ставить ;
Еще видео о языке от его разработчиков:
Андрей Бреслав
(рус) https://www.youtube.com/watch?v=9x6utkLDBs8
Светлана Исакова
(рус) https://youtu.be/mTr8TWj9MUU?t=45m30s - на конфиренции Scala разработчиков (на удивление спокойно отнеслись к языку)
(рус )https://www.youtube.com/watch?v=IXFIUF_KW_o
(eng) https://www.youtube.com/watch?v=dJscNr1silY
(eng) https://www.youtube.com/watch?v=50lASllvG3Q
Важная часть про видео не уместилась на экране
Еще видео о языке от его разработчиков:
Андрей Бреслав
(рус) https://www.youtube.com/watch?v=9x6utkLDBs8
Светлана Исакова
(рус) https://youtu.be/mTr8TWj9MUU?t=45m30s - на конфиренции Scala разработчиков (на удивление спокойно отнеслись к языку)
(рус )https://www.youtube.com/watch?v=IXFIUF_KW_o
(eng) https://www.youtube.com/watch?v=dJscNr1silY
(eng) https://www.youtube.com/watch?v=50lASllvG3Q
>Тут тред про ведроид. Зачем тащить в ведро функциональщину ...
Что я понял за почти пять лет разработки под Android:
1) Бесполезно сражаться с будущем
Kotlin объективно удобнее и на него все перейдут, ты можеш сделать это чуть раньше.
Альтернативы пока нет:
• C#, Scala, HTML5 - слишком тяжелые для Android
• (слухи) У Google пока только в планах перейти на OpenJDK для поддержки Java 8
2) Чем меньше напишешь кода сегодня, тем меньше его переписывать (читать) завтра
Kotlin позволяет писать короткие и понятные программы.
Может быть тебе это не нужно, ты написал и забыл, но крупные мобильные проекты поддерживаются годами.
Зачем вообще создали жяву, если миллионы приложений на C++ и без того нормально работали? Зачем вообще создавался C++, если сотни тысяч приложений на си, фортране и коболе нормально работали? Зачем вообще всё это говно создавали, когда программы на вм Бэббиджа нормально работали?
Затем что крестопараша для петухов.
>>629035
1) Вот когда будущее наступит тогда и приходи. Продал родину за возможность не писать точку с запятой, пидор.
2) Программы получаются короткие, но нихуя не понятные. a + b - b - a -> foo(bar() <- hui : pizda) = c, и сиди разбирай чего добивался этим высером хипстер, работавший до тебя.
>a + b - b - a -> foo(bar() <- hui : pizda) = c
вот тут ты обосрался, трольченок, нет такого синтаксиса в Kotlin
Дело в том, что иногда по ночам мне кажется, что я яваблядь. Мне хочется выделять память, зарабатывать на доширак, пиздеть про энтерпрайз, сваливать свои проблемы на чужие плечи и писать нечитаемый бессмысленный говнокод.
Я ворочаюсь, страдаю, рычу, а под конец вскакиваю с кровати и хватаю первое, что попалось под руку.
Это может быть тапок, топор или простая поварешка, но в моем воображении она становится огромным прожорливым интерпретатором.
С этим интерпретатором я открываю корпус сервера, ставлю ещё две планки оперативной памяти и с громким боевым кличем выбегаю на улицу. Я бегаю под окнами своих соседей и ору: "Ява не тормозит, тупые нищебляди!! Купите нормальное железо!!"
Но они не покупают... Они привыкли.
И когда я уставший, но довольный, поднимаюсь в квартиру, наоравшись и набегавшись, одна из дверей открывается. Там, лукаво сверкая глазенками, стоит маленький соседский мальчик Женька. Он громко шепчет беззыбым ртом "Клоссплатфолменность!" и ободряюще мигает мне одним глазом.
Я, улыбаясь ему, прохожу мимо, и в душе моей поют заказчики.
А дома я открываю бутылку водки, морщась, выпиваю ее до половины, и ловлю кота. Ругая этого "сраного волосатого индуса", я сажаю его за клавиатуру, и чтобы он не убежал, приматываю его к ней скотчем.
А дальше все просто.
Я стою у окна, пуская скупую быдлокодерскую слезу по своей прыщавой щеке , и мечтаю. Я представляю, что огни домов -- это пламя костров, на которых сжигают крестопидоров, шум машин -- это рев кулеров в серверных, а в мире нет ничего, кроме великого энтерпрайза и нас, яваблядей...
И я жду, что вдруг, вот сейчас, в мою дверь войдет начальник и скажет: "Эй, раб, ты чо так так долго? Давай, быстро дописывай исходник. Похуй, если будет тормозить - разберутся те, кто будет сопровождать! ГА-га-га-га!" И ободряюще хлопнет меня по спине.
И тогда не будет в мире счастливее человека, чем я... Точнее, явабляди.
Что же мне делать, анон? Что же мне делать?
> Перегрузка операторов в Kotlin к примеру позволяет
С++ один из моих нелюбимых языков. Одна из основных причин - наличие этой самой перегрузки операторов. С этой хуитой логичность и интуитивность кода резко снижается, появляется необходимость изучения того, что делают эти операторы, а это порой пиздец как не логично.
Это высокая цена за сомнительное удобство. Всего лишь сокращение когда в ширину, не более.
Ты туповатый просто. Почитай про концепцию программирования через интерфейс, тогда поймешь, зачем это надо.
Я так понимаю Clojure, Scala, Groovy, Ceylon, C#, Python, Ruby тебе по тойже причине не нравятся?
В Kotlin очень не большой список операций и они в общем очевидны.
Да и в отличие от тоже же Scala или Clojure - нельзя создавать новые.
> Я так понимаю Clojure, Scala, Groovy, Ceylon, C#, Python, Ruby тебе по тойже причине не нравятся?
Я на них никогда не писал, так что не знаю. Но если там такое есть - то, пожалуй, да.
Не вижу в этом ничего особо плохого. А вот то, что строка не может быть null - реально хуёво, судя по тому, что выше написали.
>А вот то, что строка не может быть null - реально хуёво
Может если ты поставишь ей тип String?, а не просто String
(но тогда тебе придется расхлебывать случаи NPE самому)
В той же Java 8 ввели тип Optional<T> для разруливания таких ситуаций,
но только для его использования нужно туже строку постоянно заварачивать/разварачивать в/из него.
Ну поясни, что именно такого непонятного, неосилятор. В плюсах можно перегружать ограниченное кол-во операторов, в отличие от той же скалы и прочих, позволяющих создавать свои.
Вот есть у тебя класс, с перегруженными операторами сравнения. Как от этого испортится понимательность кода? Не даст тебе, ваську, отделить примитив от объекта?
Плюс (благодаря аннотации data) у класса на Kotlin автоматически сгенерированы методы
toString(), equals(), hashCode() (и еще парочка ускоспециальных)
Непонятно, что >/< это compareTo. А может и вовсе нет. Тогда как название метода точно отражает суть операции. Так что да, приписывать структурам данных операции с примитивами - хуёво.
Ты понимаешь что проблему из пальца высасываешь?
В той-же IDEA ты можешь навести курсор на оператор и тебе откроется его метод.
Блин как сложно объяснять это тем кто не видел ничего кроме Java.
В той же Scala все пиздец как сложнее из-за implicit (а ты даже не знаешь что это).
Суть в том, что сравнивать объекты по значению без перегруженных операторов тебе не позволит ни один язык ну в сишечке такие как ты любят сравнивать адреса указателей :)).
Если у тебя код вида
Hui hui1, hui2;
..
if(hui1 > hui2)
Абсолютно очевидно что здеся должно происходить. Если не очевидно - ты не знаешь языка.
> Блин как сложно объяснять это тем кто не видел ничего кроме Java.
Откуда ты знаешь, какие языки я видел и не видел?
Ну кроме моего ответа на тот список выше, что не достаточно для таких заявлений.
> (а ты даже не знаешь что это).
И это хорошо. Я не занимаюсь изучением новых языков просто "по фану", мне это неинтересно.
Выучить больше одного языка это непосильная задача для анонимуса?
(я неспешно выучил за пару дней, просто смотря youtube)
Плюс как в iOS ты можешь миксовать Object-C + Swift, так и Android
ты можешь смешивать Java + Kotlin (он для того и разрабатывается что бы медленно
переводить большие проекты на современный язык, а не переписывать их с нуля)
>>629180
>Откуда ты знаешь, какие языки я видел и не видел?
Ну по крайне мере я там перечислил почти все JVM языки + популярные сейчас в IT
>Я не занимаюсь изучением новых языков просто "по фану", мне это неинтересно
Странно я думал программисты любят узнавать новое, расширять кругозор (по крайней мере молодые).
И вот зря, из других языков можно черпать интересные концепции / подходы / целые паттерны.
Имелось ввиду что это нововведение не дает нихуя.
Ну правда я думаю в котлине есть что-то лучше чем перегрузка операторов. Обычный синтаксический сахар, да и не самый полезный.
>Все типы могут быть в двух состояниях: nullable >и not-nullable
>var a: String = ""
>a = null // НЕ скомпилируется
>a.toString() // скомпилируется
А как мне дать понять что объект мне больше не нужен?
> Ну по крайне мере я там перечислил почти все JVM языки + популярные сейчас в IT
Далеко не все, не надо так. К тому же область применения этих языков слишком разная, андроид-программисту питон нахуй не нужен, например.
> Странно я думал программисты любят узнавать новое, расширять кругозор (по крайней мере молодые).
Я как-то вырос из этих игр. Язык изучается по необходимости. До тех пор я сосредоточен на задаче, а это всегда интереснее.
Чой-то на котлине нету выбора геттер или сеттер делать?
А вообще стандартная генерация этой хуйни. Опять не сильно нужный синтаксический сахар.
Лучше бы на стримы и лямбды из коробки давил.
@
Берут на работу
@
Пишешь на котлине вместо джавы
@
На первом код ревью дают в морду и выкидывают на мороз
Я другой анон. И первый вопрос меня действительно интересует.
>А как мне дать понять что объект мне больше не нужен?
Вот даже повторил тебе уебану.
Сделал я глобальную переменную, тот же битмап. Но вот он мне не нужен. Каким хуем я обнуляю ссылку на него?
Я даже за котлин, много синтаскического сахара и намного лучше чем апач хармони который хуже обычной джавы.
Но ты отбиваешь все желание своим петушьим поведением.
https://kotlinlang.org/docs/reference/null-safety.html
Как можно хотеть помогать челику, который не в состоянии открыть гугл? Уёбывай отсюдова.
>Обычный синтаксический сахар
Вот это точно не СХ:
• концепция not-nullable типов
• immutable объекты и колекций
• мощный type inference (в Java тоже над этим работают, в 8 гораздо лучше стало)
>А как мне дать понять что объект мне больше не нужен
А зачем? Может ты не в курсе но в Java есть Garbage Collector.
GC и так его очистит когда он больше ненужен будет.
Только не говори что ты в Java переменные и филды зануляешь для экономии памяти.
(А если тебе это нужно делай их nullable var a: String? = null)
> Так и скажи:
> а) я джявист в синей рубашке, кроме жявы ничо не знаю;
> б) я нюфаг с ловкими маняврированиями.
Почему меня цитируешь, а ссылки не на мои посты?
Я тебе уже всё сказал. А иметь разговор с человеком, который первым делом переходит на личности и додумывает за собеседника, мне совершенно неинтересно. Всего хорошего.
>>629215
Ты не забыл что это анонимный форум, тут сразу насколько анонов отвечат.
>Сделал я глобальную переменную, тот же битмап.
Я не ругаюсь, но начнем с того, а зачем ты сделал его глобальной переменной
(не очень реалистичный пример)
Неизменямыми объектами нужно делать то что тебе нужно на протяжение всей работы
(в этом их смысл) и ты не хочешь словить NPE
Повторюсь сделай его тогда изменяемым:
MyGlobalBitmap: Bitmap? = null
Сказал А говори и Б.
Так блять с таким успехом ты мог просто дать ссылку на доку не? Нахуй вбросы кусков кода вообще? Все в доке же.
>>629220
>Я не ругаюсь, но начнем с того, а зачем ты сделал его глобальной переменной
>(не очень реалистичный пример)
Ой да ладно.
У меня идет генерация на карту двух картинок на которых я рисую.
Т.е. я подтягиваю два битмапа шаблона в хендлер, и с них уже делаю битмапы для рисовки. И да это быстрее чем тянуть иммутейбл битмап с диска а потом делать его мутейбл.
Да уже в доке прочитал про изменяемый.
>А зачем? Может ты не в курсе но в Java есть Garbage Collector.
>GC и так его очистит когда он больше ненужен будет.
А в котлине гарбадж коллектор читает мои мысли?
>Только не говори что ты в Java переменные и филды зануляешь для экономии памяти.
С битмапом это довольно важная хуйня.
Да и это нормальная практика для сложных обжектов. Те же адаптеры с фрагментами. Но кому я блять объясняю.
Немножко спутал сам себя:
Изменяемость / НЕ изменяемость задается префиксом:
var a // a изменяемая переменна/проперти
val a // a НЕ изменяемая переменна/проперти
Nullable / Not-Nullable типы делаются:
var a: Bitmap = Bitmap(4,4,Config.ARGB) // переменная a НЕ может содержать null
var a: Bitmap? = null // переменная a может содержать null
>>629222
>>629225
Нормальная практика это использовать LruCache
>Так блять с таким успехом ты мог просто дать ссылку на доку не? Нахуй вбросы кусков кода вообще? Все в доке же.
А нахуй вообще что-то самому делать? Может мне за тебя подрочить и зубы тебе почистить?
Нормальная практика это использовать LruCache, а не хранить в стических полях Bitmap
Оч смешно, моча.
Оч смешно, моча.
Оч смешно, моча.
Можешь и подрочить.
Вот ты хоть прочитал? Я же написал что попробовал все хорошее, это отдаст 192.168.1.104 в сети с роутером.
Что вы так на котлин кинулись? Все тут пишут на джаве, 1 человек на котлине и 1 на ксамарине.
Доебался, так доебался. Но даже так, никто не говорил про статики которые ты себе придумал.
Еще яву покажи.
Та толку если на нем работы нету. Перекатится в котлин = лишить себя работы и писать неподдерживаемый другими код.
Это невозможно
С зоны капчуешь?
Может стоит запилить аналог?
https://atlas.mindmup.com/2015/10/3d59a040592a0133d02a5d31ebcc5420/java/index.html
Лямбды https://kotlinlang.org/docs/reference/lambdas.html
Есть и синтаксис у них примерно как в Groovy или Swift
Пример метода принимающего лябду:
fun execute(a: Int, b: Int, c:Int, operation: (Int, Int, Int) -> Int) {
return operation(a, b, c) // лямбду вызываешь как обычный метод
}
Пример вызова этого метода: execute(1, 2, 3, { a, b, c -> a b c })
Если лямбда последний параметр то можно: execute(1, 2, 3) { a, b, c -> a b c }
Стримы https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-list/
В отличие от Java для базовых операция над коллекциями не нужен специальный
класс Stream тк есть нормальные extensions-методы (в этом плане Kotlin ближе к C# с его Linq).
val z = listOf(1, 2, 3, 4)
.map({ s -> 2 s }) // эти три строчки идентичны
.map { s -> 2 s } // эти три строчки идентичны
.map { 2 * it } // эти три строчки идентичны
.filter { it >= 16 }
.sum()
Для lazy операций есть специальный Sequace https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-sequence/
Так толку?
По-факту из ваябл только ксамарин и 4 технологии на джаваскрипте.
РобоВм на хуйдой конец.
Котлин как бы вообще язык и к технологиям выще не относится и юзает стандарт сдк.
Все.
А ну и база даных либо SQLite либо Реалм.ио.
А вообще можно делать подобное дерево по всяким либам.
Типа ормки или многопоточка. Но тут мне опыта не хватит запилить нормальный обзор. Та и мало у кого вообще хватит. В основном пересказываем статьи и тд.
Почему в богомерзком Xamarin есть EntityFramework 7 и я могу с sqlite работать как с обычной колекцией в памяти.
А в Android только сырой SQL, либо сраные билдеры запросов (realm.io, ormlite)?
Почему нет такой либы что я мог (как стримы):
db.filter(s -> s.age > 18).sortBy(s -> s.name).take(10)
У меня бомбит в итоге сам подобное написал
Берешь cupboard либо любую орм и не ебешь нам мозги.
ЕнтитиФреймворк как раз орм может и нет но это надстройка уровня орм
>realm.io
Вообще база на плюсах и отдельный разговор.
>ormlite
Вот уже ближе.
Я хуй знает чем тебе орм не понравился, впадлу прописать строчку которая отдаст коллекцию обжектов?
Ну не скажи.
Удобно, готовишься такой с собеседования, открываешь эту майнд-мап и идешь по каждой ветке, по каждому названию, если понимаешь что сможешь минуть 20-30 рассказывать про эту тему взахлеб, значит наверно знаешь про что речь.
Я считаю, надо. Кстати что за ресурс чтобы эти майндмапы
Я вот тут по памяти накидал, но что-то маловато думаю.
https://atlas.mindmup.com/2016/01/94f97b50a1000133787e49e1d84f8256/android/index.html
1) сравни, пример с сайта:
realm.where(Dog.class).equalTo("name", "Rex").and().equalTo("city", "Moscow").findAll()
2) против (так я работаю со List<Dog> в Kotlin):
Dogs.filter { it.name == "Rex" && it.city == "Moscow" }
3) В EnityFramework7 это будет:
Dogs.Where(s => s.name == "Rex" && s.city == "Moscow")
(2) и (3) почти идентичны, вот так должны белые люди делать запросы к базе.
P.S.
Еще и имена полей в билдере пишутся прям строкой ("name"). Можно конечно константой,
но лучше не станет.
P.P.S.
Извинити что отвлек, просто я через это уже прошел (ormlite, ef).
Сейчас мне легче хранить (серелизованные) данные в файлах чем мучится с sqlite схемой.
>>629461
Может он embeded занимается :)
Мне это всё чисто для галочки нужно, так что никак, лол.
>realm.
Так это уже трабла риалма а не всего остального.
На cupboard выборка более стандартная вроде.
Но там не будет как на шарпах, так как джава этого не позволяет пока.
>в Kotlin
Куда ты котлин еще припаял? Я уже не понимаю что ты хочешь.
>В EnityFramework7 это будет:
Это лямбдой будет. С переопределенными операторами. Удобство уровня я ебу.
Ты еще доебись что в джаве дженерики не такие красивые и юзабильные как в шарпах, чего уж там.
>чем мучится с sqlite схемой
Мучится? Сириусли? Орм ему не нравится, со стандартной работой sqlite ему мучатся. Может ведро не твое тогда?
Ладно еще соглашусь что описывать все без орм реально долго, особенно с контент провайдером. Но орм облегчает тебе жизнь, а то что ты пытаешься доебаться до джавы в которой мало синтаксического сахара приводя в пример язык блять 2013 или когда там котлин релизнули года и шарпы которые в принципе моложе и главное не имеют обратной совместимости.
Спасибо за внимание иди нахуй.
Я даже никогда не слышал про подобное.
Подскажите в какую сторону смотреть?
Сходил я на https://commonsware.com/warescription, годовая подписька (включает все обновления) стоит СОРОК ПЯТЬ БАКИНСКИХ, что в новых реалиях слишком дохуя. В связи с чем предлагаю скинуться. Заявки принимаются неделю (до 27.01) по адресу: 29otbcgtadANUSyandM&6exPUNCTUM`]:ru. Указывайте потолок, который готовы выложить (лично я готов потратить $5-7 из своих $19 стипухи). Если есть знакомые ведродевелопы -- зовите.
Все принявшие участие будут получать обновления как только они будут выходить (или пока какой-нибудь крысакун не скинет книжку в сеть и нашу подпиську аннулируют -- лицензии у книжки именные.)
Аноны, пилю клавиатуру без активити. Нужно, чтобы при клике на Key он менял изображение. Нихуя не пойму в http://developer.android.com/intl/ru/reference/android/inputmethodservice/Keyboard.Key.html Помогите разобраться.
1. Java Core
2. Собственно конкретно разработку под андроид
3. SQL
Неужели на этом все? Ну то есть обычно в большинстве ЯП для работы надо знать пачку фреймворков и сопутствующих технологий. А что с андроидом, что еще надо знать в добавок к тому что я перечислил, что бы быть нормальным разработчиком?
Клиент-сервер, JNI, etc. Зависит от того, чем ты будешь заниматься.
Фреймворков действительно толком никаких нет, а те, что есть - уже совсем далеко от джавы (типа хамарина).
Внезапно. Не совсем.
Уверяю не все так просто. Тулить говнокод ты сможешь, но в ведре проблема с постоянной обновой сдк и постройкой ровной архитектуры. А это внезапно самое сложное.
>>629626
1) Тебе нужна будет пермишен (в AndroidManifect)
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
2) Берешь WindowManager (обязательно у Application, тк активити его перегружает)
WindowManager wm = getContext().getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
создаешь View которую будешь показывать поверх других окон
(это обязательно должно быть View, с активити/фрагментом это не прокатит)
Button myButton = Button(this);
создаешь специальный WindowManager.LayoutParams и проставляешь им тип TYPE_SYSTEM_ALERT
WindowManager.LayoutParams lp = new WindowManager.LayoutParams(...)
lp.type = WindowManager.LayoutParams.TYPE_SYSTEM_ALERT // вот это самое важное
Добавляешь свою View в WindowManager
wm.addView(myView, lp)
Ну можешь еще подкачать RxJava, Retrofit, Protobuf
(ну и конечно Kotlin - с ним ты откроешь новый чудный мир)
А так-же все по юнит тестам, типа Mockito, NUint4
Спасибо большое, попробую
>Protobuf
Так и не понял зачем он нужен.
>юнит тестам, типа Mockito, NUint4
Ты их в проектах юзаешь? Приходится делать особенную архитектуру и тд? Читал что с тем же даггер2 лучше.
Алсо, поясни сколько у тебя опыта? Кой-то веки кажется в тред кто-то опытный залетел.
>Так и не понял зачем он нужен.
замена json/xml с высокой скорость кодирования
>Ты их в проектах юзаешь?
Да, тестами покрывать надо и Android приложения
>риходится делать особенную архитектуру и тд? Читал что с тем же даггер2 лучше.
По моему ты слегка запутался, Dagger2 это фреймворк для DI.
Ты можешь через него моки подставлять, но для их создания тебе как-раз нужен Mockito.
JUnit это вообще движок для написания тестов (перепутал слегка название с C# NUnit)
Вообще мне эти dagger2 (roboguice) уже надоели, сейчас у меня период
ручного подставления зависимостей в конструктор.
--- несколько лет в Android разработки
Есть здесь хипстеры, тргавшие react native под Android?
> Куда ты котлин еще припаял?
Потому-что всю Java-хуйню как-раз исправляет Kotlin.
Но даже с ним как-то лучше не становиться в плане удобства работы с базой.
>Может ведро не твое тогда?
Четыре года опыта на android, чуть меньше в ios, wp, xamarin, robovm - все время ищу ИДЕАЛ для удобства разработки.
>Ладно еще соглашусь что описывать все без орм реально долго
Ну хоть в чем-то мы согласны. Наверное и тебе через пару лет надоест каждый раз
писать однотипный код, когда есть отличное API (лямбды/Stream) для работы с коллекциями.
> За что вы так ненавидите Xamarin
Платная хуйня + сайту видно, что они в первую очередь хотят впарить свой продукт менеджерам, а не разработчикам.
>Ну хоть в чем-то мы согласны. Наверное и тебе через пару лет надоест каждый раз
писать однотипный код, когда есть отличное API (лямбды/Stream) для работы с коллекциями.
Вполне может быть. Но меня больше беспокоит дырявость самого ведра. Говно лезет практически отовсюду, новая версия ведра = новые саппорт либы = новые баги. Сидишь просто дрочишь стековерлоф 24/7 вместо того чтоб код учится писать.
Ну и еще добавлю что в скорейшем времени нам таки дадут и лямбды без костылей типа ретролямбда и стримы.
>замена json/xml с высокой скорость кодирования
Понял спасибо, правда не особо пока юзабилити понимаю. Но почитаю на досуге.
>Да, тестами покрывать надо и Android приложения
Только рад бы, правда еще не умею, так как не приходилось делать/ та и в шею гонят постоянно. Алсо, если можешь поделится каким материалом по сабжу будем рады, пора шапку обновлять уже знаниями поглубже.
>По моему ты слегка запутался, Dagger2 это фреймворк для DI.
Ну так разве DI не требует особой архитектуры?
>JUnit
Ага стандартный джавовский.
Алсо, почему-то попадаются разрабы которые клали и на DI и на тесты, какбуд-то бы даже не пытаются что-то новое выучить. Хуй что вытянешь из них.
---- меньше года в разработке.
>Четыре года опыта на android, чуть меньше в ios, wp, xamarin, robovm - все время ищу ИДЕАЛ для удобства разработки.
Мне стойко промывают мозги что иос попросту лучше для самого разработчика чем ведро?
Так ли это как думаешь? Все кричат что разработка быстрее, меньше багов и подводных камней. Сам не пробовал так как ни мака ни гейфона, а ебенить через виртуалки не хочу.
Да, на иос легче. Там в разы меньше ебли с жизненными циклами. У меня друг полную хуйню говнокодит вплоть до описания сетевых запросов прямо во вьюконтроллерах. При этом нихуя не падает и все ок.
>У меня друг полную хуйню говнокодит вплоть до описания сетевых запросов прямо во вьюконтроллерах.
Так с ретрофитом так и делают, в колбеках удобно с UI работать, враперы только мешают.
>Да, на иос легче.
А чего с концами не перекатился тогда?
На иос меньше фрагментации, не нужно выяснять, почему твое приложение глючит на нонейм поделке от китайского Васяна стоимостью 1000р. И не нужно делать дизайн под миллиард разных разрешений экрана.
Когда большие объёмы данных по сети нужно передавать. Но что-то мне подсказывает, что для Android приложений это не актуально.
>Protobuf
>Thrift/Avro/Hessian гораздо лучше
сорт оф отличных фрейморков для серилизации
>>629990
По последней статистике (пруфы потерял) разработка на Android это +30% к времени на iOS
(с учетом тестирования и багфикса)
А вот по моим наблюдениям (пару лет назад) скорость разработки (в нативе) примерно одинаковая
С появлением Swift (наверно) разработка под iOS станет еще удобнее/быстрей.
И кстати Swift на 90% по синтаксису схож со Swift (те же var/val, non-nullable типы, лямбды,
перегрузка операторов, stream-подобный синтаксис работы с коллекциями т тд)
>И кстати Swift на 90% по синтаксису схож со Swift
И кстати Swift на 90% по синтаксису схож со Kotlin
>С появлением Swift (наверно) разработка под iOS станет еще удобнее/быстрей.
Да хуй знает, у меня пока написание кода занимает намного меньше времени чем дрочь с подводными камнями и проектирование моего говнокода.
Лолшто. Они похожи системой типов с ? и !.
Остальные фишки вроде паттерн матчинка и остального синтаксиса были в куче языков ещё 10 лет назад.
Дык оно всегда так было и будет. Для этого обычно сначала прототипируют всё на скриптопараше в процедурном стиле и используют всякий mindmaps.
Блин хотел написать, что они оба сперли синтаксис у других языков,
но мне почему-то показалось это очевидным.
Я кстати никогда не утверждал что они уникальны. Да и вообще все современные
строготипизированные и мультипарадигменный языки очень похожи.
Вообще, говорить что кто-то у кого-то что-то там спиздил - не очень политкорректно, лучше писать как написано на вики - "испытал влияние".
>Да и вообще все современные
строготипизированные и мультипарадигменный языки очень похожи.
Я тебе больше скажу - почти все языки вышедшие в один промежуток времени очень похожи на свои однонишевые аналоги.
Ну и хуй с вами.
Но если v7 включает в себя v4, то по логике же я могу ставить minSDKversion - 4? Или нет? Запутался уже.
Ты хуйню какую-то прочитал, семерка действительно включает четверку, но минсдк выставлять не надо.
Точнее надо, конечно, но такой, какой нужен тебе. Смысл в том, что если ты пользуешь фичи конкретно семерки, то то и минсдк должен быть больше либо равен 7. Сейчас вообще вроде бы почти все ставят 15. Фэйсбук точно.
>v4, v7
Ты ебанутый? Сейчас никто не ставит меньше 15, даже Android Studio (AS) при создание
нового проекта подставляет 15.
>v7 либа включает в себя v4
То что у v7 есть зависимость на v4 не значит что она может работать с API 4
>Но если v7 включает в себя v4, то по логике же я могу ставить minSDKversion - 4
Ну формально наверное можешь (если AS позволит), только тогда ты не должен
использовать никакой функционал из v7, а только v4
>>630418
>>630443
Спасибо за ответы.
>Ты ебанутый? Сейчас никто не ставит меньше 15, даже Android Studio (AS) при создание
нового проекта подставляет 15.
Ну а если я пойду на работу и мне скажут пили проект с мин. апи7 или еще ниже. Я же не скажу им "вы че ебанутые? 15 поставлю и хватит", вот и разбираюсь в этих суппорт либах.
>устройств с API 7 меньше 0.1%
>мне скажут пили проект с мин. апи7
Сейчас нет настолько ебанутых компании.
Говорю по своему опыту, под API 7 мы разрабатывали года 2 назад.
http://developer.android.com/intl/ru/about/dashboards/index.html
Из опыта только Си немного и всё.
Как правильно вкатится? Что читать по Java? Насколько глубоко в Java окунаться? Когда надо с изучения Java переключится на вникание в Android?
Ну из подходящего для меня лишь http://developer.alexanderklimov.ru/android/
, но подойдёт ли мне он с нулевым знанием Жабы и хватит ли той жабы что он даёт в своём кратком гайде по жабе?
>>631136
ОП в треде, заебала уже платина эта, сделаю вам новую шапку с пояснением для ленивых хуев блять.
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush.
Можно эккеля "философия java" почитать.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда.
4) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
5) Потоки ввода/вывода (streams). Не путать с тредами(threads).
6) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
7) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
8) Работа с Sqlite, нужна будет в любом случае.
9) Почитать про json.
Привет клиент-серверка.
Потом может еще допишу.
>>631136
ОП в треде, заебала уже платина эта, сделаю вам новую шапку с пояснением для ленивых хуев блять.
Чтоб быстро хоть как-то вникнуть в джаву берешь и гуглишь javarush.
Можно эккеля "философия java" почитать.
Что тебе нужно понять в самой жабе.
Энтри лвл.
1) ООП - сам принцип нужно именно понять, так как ооп язык.
2) Типы данных. Примитивы и ссылочные.
3) Структуры данных - Массивы/коллекции - без них никуда.
4) Классы/интерфейсы и все вытекающие.
Уже можно быдлокодить потихоньку и учить андроид параллельно с тем что ниже.
Дальше
5) Потоки ввода/вывода (streams). Не путать с тредами(threads).
6) Threads, особо не нужно вникать(в java.util.concurrent можно не лезть, в ведре все равно особо не пригодится), но нужно понять как работает многопоточка и что такое Runnable.
7) Прочитать про паттерны что-то. Начать с listener, adapter, singleton, iterator так как на каждом шагу. Ну и по накатанной.
Уже сделаешь что-то нормальное.
Дальше.
8) Работа с Sqlite, нужна будет в любом случае.
9) Почитать про json.
Привет клиент-серверка.
Потом может еще допишу.
> Типы данных. Примитивы и ссылочные.
Сюда же алгоритмы добавь. Чтобы в общих чертах понимать принцип работы LinkedList, HashMap, понимать разницу между HashMap и LinkedHashMap, сортировку, очереди, ну и так далее.
10) (GOD TIER) Выучи язык Kotlin https://kotlinlang.org
Все его плюсы расписаны выше, а так же материалы для обучения.
Минус "он никому нахуй не нужен" полностью сводит на нет все его сомнительные плюсы. Не советуй больше этой хуиты, спасибо.
Eclipse
А вакансий на эту парашу столько же сколько на haskell? То есть одна и так по развитию языка?
>А работу ты мне давать будешь по котлину?
А ты знания только для работы получаешь? Само программирование тебя не интересует?
Боюсь что с таким подходом к делу, тебе не стоит становится программистом.
(хотя php возможно для тебя)
Кстати, к тому моменту, как ты закончишь школу универ,
все уже будут писать на Kotlin.
>>631203
У AS есть преимущества:
+ дополнительная статистика (gpu / network)
+ data binding
+ в версии 2.0 будет ускоренная заливка apk в телефон/эмулятор
(если тебе это нафиг не нужно, то стоит задуматься о IDEA)
Ну без еды мне эти знания нахуй не нужны будут, а кушать я хочу больше раза в неделю.
Студия само собой. Вообще шапка для кого написана?
Скала? На ведре? Орли? Но гомо. С таким успехом можно еще плюсы подключать, не нужно людям говном голову засирать.
Да и хватит срать уже своим котлином, правда доебало. Язык норм, но блять третий день к ряду уже. Лучше бы на вопросы отвечал раз опытный такой.
Ну так иди гей-шлюхой фронтенд/php макакой работать.
Знаний почти не нужно, а на пожрать хватит.
>>631237
>Скала? На ведре? Орли? Но гомо.
Да норм, только говорят там runtime 6 мегабайт (а у Kotlin +400KB к APK)
>Лучше бы на вопросы отвечал раз опытный такой
>Как правильно вкатится?
Это вот на такую хуйню что-ли? Где адекваты?
Я вообще, полгода сюда не заходил, дай выговориться.
Будет стоит потраченных денег или тупо "как стать модным и молодежным погромистом за 21 день".
>Я вообще, полгода сюда не заходил, дай выговориться.
Та почитай внимательнее, есть вопросы по разработке, некоторые довольно не очевидные.
Я не котлинофил. Ты кажется не тот класс детектора подгрузил. Check your ClassLoader.
> Их сертификаты хоть где нибудь котируются?
Хуй знает. Я понимаю что нет никаких волшебных курсов, но хочется найти такое где разъяснят все на примере какого-нибудь годного проекта.
В Visual Studio 2015, так как-раз завезли кросс-платформенную поддержку C++
Мне пришел в голову несколько извращенный способ этого для API < 21 (тестировал на API 16).
Это чисто для фана, в реальных приложения конечно его не нужно использовать.
(тем более он прячет настоящий статус бар)
Потому что адекваты не пишут код, в котором нужно приведение типов.
А для редких случаем (работы со всякими убогими Java API) можно и потерпеть.
В принципе и в Android это уже начали понимать и в API 23 ввели дженерик
метод запроса системых серсисов:
http://developer.android.com/intl/ru/reference/android/content/Context.html#getSystemService(java.lang.Class%3CT%3E)
Глядишь в Android 7.0 и findViewById<T> добавят.
Плюс "as" созвучен с "is" (который здесь замена instanceof).
Кстати, в C# есть такой-же операнд "as" (C#-фагам легче будет перекатывать из Xamarin :)
аргументировано :)
Здесь то конечно неземная красота и кому после такого:
Cup<Coffee> cup = new Cup<>(new Coffee())
нужен Kotlin с его синтаксисом:
val cup = Cup(Coffee())
Инвалид, ты не понял? Твоё говно никому не нужно, авторитет твоего мнения ниже плинтуса. Съебал отсюда как вкатился, быстро, решительно.
А если не выкачусь, то что?
Это копия, сохраненная 10 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.