Тред для тех, кто пытается вкатиться в андройд разработку или что-то похожее. По возможности стараемся угощать ньюфагов чаем и поливать друг друга радугой.
>Хочу вкатится в 20/30/50 лет, не поздно?
Нет, не поздно. Лично знаю несколько примеров из жизни когда вкатывались в 30+ лет.
Основы программирования, логические операции -> Джава(базовый синтаксис и особенности языка) -> ООП -> особенности различных версий Джава -> алгоритмы и структуры данных -> многопоточность -> дженерики -> функции высшего порядка -> Котлин -> Android SDK(UI, версии и различия, особенности оси на уровне работы виртуальной машины) -> работа с БД, CRUD(можно и на этапе знакомства с алгоритмами) -> git -> networking/REST API/JSON/сериализация -> актуальные фреймворки зачем и почему, спойлер: экономия времени -> архитектура, зависимости, инверсия контроля -> ?..
Вот примерный флоу, которому я бы следовал, если бы учился сейчас. Начал бы сразу с алгоритмов, если честно.
В эту же последовательность нужно вставить clean code, SOLID, DRY/DIE, KISS, YAGNI и прочие модные аббревиатуры, которые весьма актуальны. Что-то упустил, но, думаю, этого достаточно.
Нет. Не стоит. Есть точка зрения, что котлин позиционируется как "удобная/лучшая джава", подразумевая то, что ты хочешь писать на джаве, но более современно и практично. Да и глупо игнорировать джавоский мир, который является в топе по числу библиотек и решений, где тебе все равно придется погрузиться когда-то в его синтаксис.
>Прочел книгу по java/kotlin/flutter и посмотрел видосы, на деле ничего не понимаю. Куда идти дальше?
Делай свои мелкие пет-проекты, можешь копировать чужие и дополнять функциями которых там нет. Главное правильно пиши сам, гугли, трать часы и дни на мелкие функции НО сделай сам, что бы полноценно понимать что к чему. Вся суть сводится к тому, что бы ты изучив ROADMAP который указан выше, вынес знания, которых хватит на создание и понимание пет-проектов с помощью которых познаешь суть разработки. Также на собесах любят когда есть портфолио в гугл плей.
>Где взять примеры проектов?
Можешь банально поискать на ютюбе или в телеграмме. Для примера:
1. Нужно хорошее знание Java/kotlin. 2. Понимание базовых принципов Android (жизненный цикл activity/fragment, что такое Context, intents, services, UI thread, support library и ее версии (уже androidx), shared preferences, SQLite, Handlers, Executors, Content-Providers, firebase. 3. Знание популярных библиотек типа Retrofit + Glide/Picasso + RxJava2 + Dagger2(по обстоятельствам) + гугловские поделки jetpack, понимания СОЛИД и других паттернов проектирования. 4. Базовое понимание что вообще такое Gradle. Рекомендую хорошенько изучить XML. 5. И хотя бы несколько готовых приложений.
upd: Также стоит прочекать вакансии в вашем городе и собрать самый часто используемый стек технологий и отталкиваться от него.
Незабывай изучать английский, потому что гуглить придётся именно на нем ибо информации в разы больше.
Сериалы и шоу, для того что бы увидеть полный список нужно купить подписку. Есть двойные субтитры RU/EN. Цена 300 рублей, но часто проходят акции 300 рублей за 2 месяца подписки. https://ororo.tv/ https://ororo.tv/ref/1835272 - реф ссылка. Указал потому что: Переход по Вашей ссылке дает пользователям бонус +10% ко времени их следующего абонемента.
Также советую полностью сменить язык интерфейса на всех устройствах.
>>1822730 → хамарин формс. сначала начал андроид ковырять с котлином, не зная котлин ковырял ковырял и подумал "чет котлин туго идет, нафига мне его учить то" Там побыстрее разработка. Все таки xaml я знаю и это xaml, а не инфлатеры Но там свои проблемы. Вот мой список граблей что помню 1 долгий запуск. лично меня бесит 2 полный клон моего приложения жрет в 2 раза больше памяти А я из тех у кого не топ смарты и меня это бесит. 3 они дают AppShell это как навдрейер. очень удобный (все таки хамл), но блин он держит ссылки на страницы корневого уровня всегда. Бред. Конечно типичный мастер-чилд таким не страдает, но это ж уже рукоделие 4 GridView с карточками кривой. При удалении элементов схлопываются маржины справа. это баг, но делать мне больше нечего как багрепорты писать. 5 асбтрагированность от платформы это хорошо, но иос мне не нужен, так что только мешает это 6 Оказалось что я не могу прицепить longClickListener к картам. Его там просто нет. Мне тупо нужно было контекстное меню, а оно только для списков сделано. Нагуглил что пишешь велосипед в андроид модуле где используешь таймеры, а в трекере написали что этот функционал они за год не сделали и перенесли на мауи (который будет аж через год). 7 почитал какая там либа для мускуля, взял ее и... нельзя указать foreignkey< ну чтобы генерило таблицу. фичкреквесту 9 лет уже. Я код посмотрел и добавил за 30 минут. Потом оказалось что миграции тоже сам пиши. Легко, но после room это дикость. 8 ну и конечно размер apk
Но раз я уже немного вьехал в андроид, то вернулся, благо там андроидх
>>1822731 (OP) Анончики, всем привет Хочу запилить приложение на мобилку. Простенькое, для личных целей (для целей локального коммьюнити, если точнее). Окончательно разочаровался найти какие-то внятыне видеоуроки по приложениям на котлине (изначально хотел делать на нем), потому прошу подсказать аксакалов: есть какие-то годные признанные отцами уроки по созданию android-приложения на java? Мне простенькое запилить, особо в дебри погружаться не хочется, да и я не профессиональный программист. А если пойдет, то уже можно в дебри
>>1822960 С первого взгляда это больше похоже на то, что я назвал "дебри" Мне бы что-то попроще, там где "смотри как я делаю, вау, написали пару строк кода, у нас уже норм приложение, ухх!" Что-то нагляднее А разбор приложения (который с урока 34) там без базы нихера не понять. Или это уже максимум просто и я охуел совсем?
>>1823139 Первична платформа, а не используемый язык, так что вопрос должен быть поставлен так: "возможно ли перейти с Android на iOS". Так или иначе, не вижу причин, из-за которых это бы не было возможно. Языки схожи, принципы и паттерны те же. Да, есть и различия, но в их понимании нет ничего сложного. Мобилка есть мобилка.
Перепост из прошлого треда. Может, кто ещё отпишется. Вот раньше была такая вещь, как RoboVM - нечто, позволяющее писать аппсы под iOS на жаве. Но потом её купили мелкомягкие, и оно потухло. Хотя, вроде, есть живой форк (https://github.com/MobiVM/robovm) и ещё BugVM (тоже, вроде, форк, но полудохлый). Ещё есть Multi-OS Engine от Интела и нечто под названием Gluon Client Plugin, использующее GraalVM от Оракла. Может, что-то из этого кто-то из анонов уже использовал? Как оно? Насколько оно надёжное и беспроблемное? Отпишитесь, плиз.
>>1823470 >>1823478 Просто хуй его знает. Если я буду юзать котлин с последними наворотами, это всё будет нормально работать на старых андроедах(с 5, например)? Алсо, чекал книги по андроеду, так вот книг с контентом ПЕРВОГО ПОКОЛЕНИЯ в 2020 не выходило вообще. Это значит, что джава, как язык для андройда — ВСЁ?
>>1823508 Тут не от языка зависит, а от андроид СДК. Но чаще всего даже относительно новые фичи имеют поддержку старых версий андроида, if (Build.VERSION.SDK_INT>..) пишешь относительно редко, midsdk на уровне 5-6 андроида cейчас вполне комфортен.
>>1823508 И джава не совсем все, т.к есть солидный массив приложений на жабе, которые переписывать чисто ради того чтоб было все не на жабе а на котлине никто не будет.
Но все что пишется новое - пишется на котлине, практически 100%. Сам гугл обьявил что теперь андроид разработка - "kotlin first".
Уже доходит до того, что если по проекту нужно знать жабу - это зачастую отдельно указывается в описании вакансии или спрашивается на первых этапах собеса. Один раз даже спросил с ноткой удивления - мол есть те кто жабу не знает, на что ответили что да, последний год уже идут джуны который жабы знать не знают и учили сразу исключительно котлин.
Т.к по сути котлин это та же жаба, только с кучей дополнительных фичей и более удобным и кратким синтаксисом. Найти вещь которую можно сделать легко на жабе и нельзя на котлине нереально, при этом вещей которые есть в котлине, но нет в жабе предостаточно.
З.Ы Речь конечно о используемой ведроидом 8-й жабе, если сравнивать котлин с 14 (или какая там уже, 15?) - не все так печально. Но в целом сейчас я не вижу ни 1 причины начинать проект на жабе вместо котлина.
>>1823547 >переписывать там жи вроде полный интероп с жабой должен быть. тоесть, основная кодбаза на жабе, если у нас всё по солиду, где-то должен быть интерфейс, который можер реализовать на котлине. или это я сейчас хуйню сморозил?
>>1823553 Да можно спокойно совмещать, так в общем-то и делают, там кажись только пару дополнительных телодвижений - типо котлиновский компаньон промаркировать @JvmStatic если их с жабы дергать будут, я лично обжегся на пересечении джава/котлин только раз - подробностей особо не помню, прикол был в том что линт подсказал что проверку на null можно выпилить, мол там null и так быть не может, убрал и получил 0,002% крашей с npe в проде.
>>1823508 >джава, как язык для андройда — ВСЁ? Да. Старые проекты поддерживают, могут переписывать/писать отдельные модули на Котлине. Новых на Джаве единицы. >>1823547 >можно сделать легко на жабе и нельзя на котлине нереально Многомерные массивы в Котлине ужасны
>>1823567 >Многомерные массивы. Уфф, аж универскими лабами повеяло. Ну вот накидал за пару минут, код офк говно - но особых отличий от жабы в худшую сторону я не вижу.
>>1823644 >о, в котлине можно квадратные скобки перегрузить? нет офк, перегрузка операторов это еще в крестах кажись есть, но не жаба-подобных языках.
Вообще немного не понимаю удивления, в древних версиях котлина можно было только методами стучаться чтоль? Сейчас по индексу можно не то что в массивы, в листы можно)
>>1822731 (OP) Здрасьте А есть вариант именно в андроид-приложении, написанном на java/Kotlin запустить питоновский скрипт, который выплюнет некоторое количество данных, и уже дальше работать с ними? Понятно, что это считается моветоном, но все же.
Реально устроиться flutter разрабом имея продуктовый опыт только в вебе разработке, ну и знания самого флаттера на уровне написания простеньких приложений, аля дерни апишку, сделай круд, распарси жсон?
Посоны, а разработочка по андроед фьючапруф? Через пяток лет мобильные камни будут по мощи как ноутбучные сейчас и можно будет крутить тот же условный электрон, например. Или нет? Поясните.
Почему говорят, что фрилансить на андроиде сложно? https://www.upwork.com/freelance-jobs/android/ Подаешь заявку, описываешь заказчику почему ты у мамы самый умный, кидаешь примеры своих приложух из гугл плея Что может пойти не так?
Алсо, заказчики ведь люди чаще всего впечатлительные, поэтому им достаточно того, чтобы твоя приложуха из портфолио была со стразами и всей-всей-всей md-мишурой, в коде-то они в 99% вообще не секут, лол
>>1826244 Я для обучения скорее с++ взял - будет больно, но для обучения самое то (если есть время и нервы), а только после него вкатываться в уютную, удобную и безопасную джаву/котлин.
>>1826237 Ну я и есть околоджун, просто много из себя ставлю и пишу сразу как положено с использованием navigation components, например. Да и вообще все на джетпаке, перечитал уже почти все гайды гугловские. На работу пока не устраивался, скоро начинаю писать первое серьезное приложение для гугл плея и гитхаба. Зимой мб пойду на галеру в офис за 20к (живу не в дс) и получу этот год-два опыта, а потом буду ловить удаленку мидлом
Но как же хочется без этих галер ебаных, в тот же фриланс на апворк. Инглиш знаю, до этого пару лет работал копирайтером на etxt (кто знает тот поймет), в общем знаю как выживать в чане с говном с 1$-индусами и че надо писать заказчикам. Material Design знаю на хорошем левеле. Ну чем я не фрилансер?
>>1826256 Я бы не совался на апворк, серьезно. Говорю как человек просидевший первый свой год работы в микро апворк конторе.
Почему? Трудно что-то вырвать прежде всего. Условно говорят сидит сейлз (с В2 инглишием и подвешенным языком) с аккаунта шхуны, где есть уже какое-никакое портфолио и рейтинг - и то, найти проект ему весьма и весьма нетривиальная задача.
И если б проекты были нормальные - так нет, код почти всегда индусское дерьмо, заказчики бывают оч разные, но регулярно пытаются прокинуть на бабки.
В общем геммор еще тот, совмещать в себе и сейлза и разраба как по мне сомнительное удовольствие.
По итогу, на мой взгляд фриланс биржи - это дно разработки, ниже только студенческие лабы/дипломы
Для меня, даже с высоты моего скромного опыта эти все пропоузалы на проект за 1к баксов выглядит как очередь для нырка в навозную кучу и сейчас если я буду искать работу, то в первую очередь я буду бросаться на вакансии в крупных галерах, во вторую на средние и продуктовые - и только с голодухи и безисходности я готов снова пойти в upwork-agency фиксить индусское дерьмо.
>>1826273 После крестов можно учить и понимать почти любой язык, а джава как 1й язык может зациклить новичка на хай лвл, ооп языках с виртуальной машиной и прочим. Впрочем если цель формошлепство - учи сразу котлин
>>1826274 Брат, рассказывай подробнее Где нашел, как долго искал, фуллтайм или нет, из какой страны компания? Какие у тебя умения и что было на собесе?
>>1826280 учился у инфоциган(гигбрейнс). по итогу на вкат потратил год. дохуя было отказов. в итоге устроился в подмосковье. 30 на испытательном, 50 после. спрашивали на 1 этапе многопоточку, жизненный цикл и "расскажите что знаете/умеете". на 2 этапе гоняли по библиотекам, даггер, рх, мввм, мвп, ретрофиты, бд. когда устраивался знал только джаву, за неделю поднатаскался на котлин.
>>1826291 и да, до этого особо не кодил, сисадмином(не эникеем, а сети сервера и вот это вот все) хуеву гору лет работал. щас 28, так что историй про то что - вы ненастоящий программист - небыло
нужно написать прилагу мелкую, для изучения ин. языка. считать из файла урок (файл json или xml), и показать экран с упражнениями из урока. кароч хз, я пока думаю, для начала один единственный формат упражнений, типо вставь пропущенную букву в предложение. Оплата только битком, писать orium.box@gmail.com
>>1822731 (OP) Пацаны, короче, брейте бороды, чтобы их не было. Так, чтобы хлебало гладкое было. Голову тоже лучше налысо брить. Код тогда отличный будет выходить.
>>1828015 Не думаю что апворк хороший вариант. Мне кажется следует либо идти в гейм-дев конторы, а если хочешь сам на себя работать - ну сделай в соло игру, напихай туда рекламы/доната и заливай себе в стор. Я бы шел вначале в контору, а в свободное время пилил бы свой проект.
>>1828064 >Я бы шел вначале в контору, а в свободное время пилил бы свой проект
Двачую этого лично знаю людей, которые увольнялись и пилил проекты от 6 до 12 месяцев в итоге получая выхлопа 0% и только уходили в минуса, не считая того что за это время дохода небыло ибо и работы основной небыло.
>>1828092 Так чаще всего и бывает, большинство таких приложений имеют пару десятков скачиваний - от самого разраба и круга его друзей/коллег.
Самый успешный случай: работал на одной галере и знал одного разраба с своим, живым проектом в гугл плее - какая-то карточная игра (оффлайн + онлайн), монетизация на рекламе и подписке, тысячи активных юзеров (точно уже не помню).
Это самый позитивный случай из тех что я знаю, но даже с него, выхлоп - 300-400$ в месяц, при зарплате на галере около 2к.
>>1828590 Знаю чела вкатывался в кодинг, до вката сделал проект БЛОКНОТ, СУКА БЛОКНОТ с фичами, в то время там было 500к скачиваний и 100к юзеров ежедневных пользователей.
Поясните, почему до сих пор кто-то юзает или даже требует в разработке проектов для DI Dagger? Какой в нем смысл, когда есть богоподобный Koin. Он настраивается легче, он быстрее, адекватно показывает в консоли где ошибка, если она есть. У него есть офигенная функция инициализации синглтонов при старте приложения, а не при первом обращении. Так нахуя кому-то еще нужен дагер? Просто нежелание принять новое?
>>1829138 > Кошерно ли нынче использовать RxJava Смузихлебы заклюют.
>>1829121 > почему до сих пор кто-то юзает или даже требует в разработке проектов для DI Dagger Ну вот щас, 2 недели у менеджеров попрошу на миграцию и будем использовать божественный коин а получу залупу за щеку. К тому же даггер работает, к нему все привыкли, там зачем тратить человекочасы на переезд на коин?
>>1828600 Кстати, до сих пор не встречал идеального блокнота. То табуляции там еврейские, то тупят с кодировками, то не могут запомнить настройку word wrap.
>>1829121 Если в проекте используется Даггер, миграция максимально бессмысленна и убыточна, если речь идёт о чем угодно, кроме Hilt, который имхо является эталонной реализацией, которая лучше всего вписывается в парадигму разработки под мобильные девайсы. Koin - service locator. Он предоставляет ссылки на объекты, которые привязаны к функциям - это простая замена ручной реализации. Даггер имеет правильную di-каноничную структуру полный граф зависимостей, просто дебажится, генерирует код с помощью аннотаций, что позволяет скрыть реализацию и максимизировать абстрактность. Он гибок, масштабируем, потому выигрывает в сложных проектах. он дешевле в долгосрочной перспективе >>1829138 >>1829816 >удобная парадигма Парадигма - реактивное программирование, частью которого является реализация вида: >парадигма с цепочками Observable-ов Kotlin Flow, считай, является нативной реализацией RxJava, где ключевым механизмом являются корутины. Вот, пожалуй, и всё. всё же, функционал у RxJava шире Проекты, где уже используется RxJava, не будут переходить на Flow. Новые же, вполне вероятно, будут пилить и на нём.
>>1829984 Хз, у меня даггер ничего кроме горения жопы не вызывает. Сложная для понимания, громоздкая штуковина которая только усложняет жизнь. Может в не в моей вселенной, где вертятся огромные мобайл проект написанные по клину и покрытые тестами даггер и полезен, но на кой хрен он для 95% проектов нужен я не понимаю.
Пробовал писать проект с этим дерьмом, спустя 2 дня словил какую-то абсолютно ебанутую ошибку (циклическая зависимость если верить гуглу), поковырял 40 минут, не починил - снес к хуям зависимость на даггер и больше никогда ее не добавляю. Либы должны упрощать жизнь, а не усложнять. Реального полезного функционала 0, а дополнительной ебли овердохуя.
(офк для собесов пару бредовых предложений про так какая охуенная вещь DI и Ioc я знаю, но не верю ни в 1 слово из них).
Сейчас в вакансиях все чаще Koin мелькает, может там все хоть чуточку понятнее.
вкатился во флаттер с бекграундом в виде опыта в веб-разработке. на руках имеется оффер и еще завтра второй будет (оба на позицию джуна 800$, но я за 3-5 месяцев выйду на уровень мидла и попрошу ревью с удвоением хп).
>>1830630 Молодец, как долго вкатывался? Какого уровня знания в вебе? Флаттер хорош для своей нишинебольшой кроссплатформенный клиент/прототип, сколько бы его не ругали. сам его использую
>>1830723 ну в вебе я был около трех лет, на реакте писал где-то чистыми полтора года. заебался чето с браузером ковыряться и решил ну его нахер. как раз из-за короны период был, когда смог вкинуться в изучение нормально. В целом познакомился с ним зимой, а плотно изучал последние 2 месяца. Собесы прокачивают как ни крути. Даже если вы на 100% уверенны, что не пройдете - все равно тех. собес будет полезен. Вы сможете услышать вопросы, которые надо будет подтянуть. Джунские вопросы уже от зубов отскакивают после 5-6 собесов. Я расчитываю, что он не для прототипов будет, а откусит большУю часть рынка мобильного. коммьюнити растет, это хороший показатель.
>>1830919 >Я расчитываю, что он не для прототипов будет, а откусит большУю часть рынка мобильного. Когда у тебя начинаются подобные маняфантазии, сразу спроси у себя: 1) Чем он лучше реактнейтива/замарина/ионика/qt/итд; 2) Почему ни у кого не получилось, а у него получится?; 3) Он имеет какие-то преимущества перед нейтивом в техническом плане? Особенно учитывая, что когда он перестанет хотя бы так жутко лагать никогда уже SwiftUI и Jetpack Compose будут взрослыми.
>>1831235 1)приятнее разрабатывать. меньше проблем с перформансом, проще сделать 60фпс анимации и т.п. замарин и ионик умирающие темы. на рынке почти не имеют своей доли. 2) за флаттером гугл + некст система на замену ведра будет вся на флаттере. она уже на нем + поддержка десктопа уже появилась и веб хуярить можно. я еще не пробовал, но думаю кайфово. 3)это кроссплатформа = главное преимущество
>меньше проблем с перформансом Если говорить про отрисовку UI, то всё ровно наоборот. Хотя, я хуёво шарю в андроиде, но на айоси рн рисуется нативными средствами и не лагает на простейшем списке, в отличие от флаттера, который даже это говно переговнил по скорости работы.
>за флаттером гугл Скинуть тебе сайт с похороненными гуглом проектами? За рном фейсбук, а за замарином м$ (скоро выйдет MAUI и будет ещё один декларативный мобильный гуй-фреймворк). Тащемта, сейчас неподдерживаемые никем технологии и не всплывают.
>некст система на замену ведра будет вся на флаттере а) Вроде как валидный поинт — но когда она будет-то? Ещё через несколько лет? А потом ещё ждать несколько лет пока она начнёт теснить андроид? Учито что-то что будет востребовано через 4-6 —да, это жостко; б) Тащемта, если хотя бы залезть на доку фуксии и быстро глянуть картиночки, то становится понятно, что флаттер будет одним из фронтендов, причём даже рендерится он будет не сам, а системными средствами (как рн сейчас), кекус. А разрабатывать реально нативный UI для фуксии прямо сейчас можно на... плюсах и, нахуй, расте. Готовь жепу к байтойобству, если так ждёшь фуксию, лол.
>3)это кроссплатформа = главное преимущество Ну, я тебя не об этом спросил. Как ты его бизнесу продавать будешь? Просто сейчас с кроссплатформой такая ситуация, что она нужна либо для тестов всяких гипотез, либо малкому бизнесу, и рынок достаточно узкий (вакансии можно найти в основном в ооо ашот&ко и галерах, клепающих аппы этим ооо ашотам, либо в паре больших компашек, но ничего кроме прототипов на этом ты делать не будешь). Большой бизнес предпочитает потратить бабла, чтобы не отгребать 1 звездочные ревью в сторах из-за кривого скролла и прочих особенностей технологии, имплементировать новые системные фичи максимально быстро, не спотыкаться о то, что чего-то нет и долго надо делать руками или вообще нормально сделать нельзя, получать продвижения от самих сторов (чего в том же аппсторе кроссплатформе банально не светит никогда, а в том же маковом аппсторе уже не пропускают приложения на электроне, что как бы кек). Короче, пока кроссплатформа будет позволять только экономить, при этом значительно жертвуя качеством — она так и будет узкой нишей на рынке.
>>1831572 > не отгребать 1 звездочные ревью в сторах из-за кривого скролла Этого и в нативных приложениях жопой жуй так то. Чаще хуевые оценки ставят из-за функционала, а не потому что у тебя списочек просел до 20фпс. Юзеры будут кушать говно, пока нужный им функционал работает. Ты конечно сейчас скинешь мне приложение пердузы, но там ясно было зааноншено мол встречайте кроссплатформу, отчего борцы за чистоту кода сразу побежали ставить единички хотя там и правда нарукожопили. Та же ригла на флаттере имеет вполне ок рейтинг на иосе https://apps.apple.com/ru/app/%D1%80%D0%B8%D0%B3%D0%BB%D0%B0-%D0%B0%D0%BF%D1%82%D0%B5%D1%87%D0%BD%D0%B0%D1%8F-%D1%81%D0%B5%D1%82%D1%8C/id1505062873
Ща еще на декстоп раскатят, надеюсь электроноговно сдохнет нахуй после этого.
>>1831613 >Та же ригла на флаттере имеет вполне ок рейтинг на иосе Лагает ещё хуже пердузы (особенно открытие модалок в статьях, просто 3 фпс), правда ЦА из бабушек и дедушек явно на это внимания обращать не будет, вот уж ахуенный пример.
>но там ясно было зааноншено мол встречайте кроссплатформу, отчего борцы за чистоту кода сразу побежали ставить единички Ага, набегают сотнями и ставят еденички, лол. Маня, это называется ЦА — у пердузы это молодёжь, в отличие бабушек у риглы, и требования к приложениям у них другие.
>Ща еще на декстоп раскатят, надеюсь электроноговно сдохнет нахуй после этого. Сказал так, будто на нём написано что-то кроме полутора редакторов текста, лол.
Весьма абстрактный вопрос, но все же, аноны, подскажите на тему:
Есть несколько стульев в плане работы с sql и Android Room: - "Большие" запросы с кучей джойнов и с использованием @Embeded, все выцепляется в одном запросе
- Куча мелких запросов, никаких адских sql запросов, но дополнительный слой над ДАО (ну или в нем самом), где выплоняется несколько запросов и объединяется результат
В первом случае имею ебучей длины sql (под 100 строк), но все выцепляется за раз.
Во втором случае sql намного проще, но появляется доп. слой в котлине по отправке нескольких запросов и объединению данных , есть риск что плодить запросы дороже чем выцепить все за раз, но это хуй знает.
Как вы пишете на этой ссанине (Android Room) логику получания сложных объектов с вложенными структурами?
Я не смог подружиться с @Relation, оно не оче работает с one-to-one, а у меня именно что нужно это вложыенный несколько раз one-to-one выцеплять.
>>1832881 Интересно, что за проект такой) Я бы выбрал 2й вариант, тупо потому что с склейкой любой джун разберется если что, а вот копаться в sql запросах куда более мерзкое дело, не каждый андроид разраб достаточно хорошо знает все эти ваши джоины и прочее.
>>1832676 Спасибо, схожу туда, сидел прост 3 года на qt и как magnum opus хочу сделать приложение на qml в качестве прощания, но так никто не делает, и если возникают вопросы по реализации ответить в гугле некому)
Прожект с наличием иерархии объектов, аналогично, например, иерархии животного мира, где там есть типы, классы, отряды и тд, всякие характеристики, куроч есть дохуя у меня и one-to-one и one-to-many и все это выглядит уебищно с первым вариантом, которым я пошел.
Плюсом первый вариант не подходит для того чтоб делать выложенные несколько раз структуры, там и так-то довольно ущербно все это с этими префиксами и необходимостью перечислять колонки, добавляя этот сраный префикс. Куроч боль ука этот Android Room
>>1823567 >java для андроид все Чет орнул в голосину с долбоеба. А ничего, что так, на вскидку, 98% библиотек и не только написано на жабе? И котлин только сахарок для синтаксиса и быстрой разработки? Я уже промолчу, что на жабе можно писать не только туфту под мобилки, а закрыть, например, весь стек технологий для проекта, написать серверную часть к примеру. Да и захотелось дропнуть мобилы, знаешь джаву, вэлкам куда хочешь, хоть в написание оболочек для кофеварки. С котлином соси бибу на андроиде. Пруф ми вронг, как говорится
>>1833520 >Да и захотелось дропнуть мобилы, знаешь джаву, вэлкам куда хочешь, хоть в написание оболочек для кофеварки Только вот всё равно придётся дауншифтнутся максимум до начинающего мидла, просто потому что ты не знаешь предметной области.
>написать серверную часть к примеру Да это на любом языке сделать не проблема, особенно в эру микросервисов, когда каждый пук можно писать на разных языках. Только вот дауншифтинга по причине описанной выше так же не избежать.
>Пруф ми вронг, как говорится Тащемта, ты типичный нюфажек, который считает что кого-то ебёт его знание языка (который изучается от корки до корки за пару месяцев в данной ситуцаии, если ты не вкатыш, а твоё стремление сменить сферу в будущем намекает что к тому времени ты уже не будешь вкатышем, лол). Знание языка — это требование к, блядь, джуну, а не к разработчику.
От разработчика требуется знание платформы, паттернов, архитектурных подходов, набитые шишки во всех возможных местах, понимание что и как работает и как сделать то и это чтобы не лагало. Бывают конечно исключения, когда сложность языка ушла куда-то нахуй и уже целая история найти человека хорошо знающего язык (C++, например), но это не про джаву и котлин вот никак (у которых различия чисто синтаксически-сахарные).
Короче, сферу можно сменить всегда, но без просадки по зп и лычке ты этого не сделаешь (если не перейдёшь на буржуйскую галеру, в таком случае можно и апнуться, но только в случае удалёнки), а знание языка в такой ситуации — вообще второстепенная вещь.
>>1833556 Блин, ты перефразировал мой предыдущий пост более нудным образом. Друже, знаешь, с котлином, если начать неожиданно с него, может получиться такая же история, как с пхп-макаками в свое время, не типизированные язык, все дела. То же и тут, всякие множественные конструкторы, отсутствие nullPointer, примитивные типы от объектов, проебанные статические члены и не приватные поля хороший замах на функциональность, только вот нахуй он тут и еще много чего. Это, блядь, фундаментальные вещи любого другого ООЯП, а котлинодибил о них ни сном ни духом, умный интерпретатор за него все замутит да здравствует сахарок. Я к тому, что котлин хорош для скоростной разработки говна на коленке, но не для вдумчивого осознания происходящего и тем более не может собой заменить жабу, лол. Вместе - да, отдельно - нет. Никто никогда не будет переписывать имеющиеся вещи с жабы на котлин. Да хули, банально погугли че нить под андроид, на сцаном стэковерфлоу какой процент ответов на котлин? Правильно, никакой, все на жабе. Заебись обучишься аки боженька
> 1833619 > на сцаном стэковерфлоу какой процент ответов на котлин? Правильно, никакой, все на жабе. Заебись обучишься аки боженька
Есть автоконвертация жаба-кода в котлин. Да и какой нужно быть одебилившей джэвэмной, объектно-ориентированной котлино-макакой чтоб не осилить джавовый код прочитать хотя бы?
>>1822731 (OP) Здрасьте Здрасьте Люди добрые Понемногу пилю свое приложение, фор фан, так сказать, понемногу вкуриваюсь в тему Добавил в приложении кнопку перехода на секонд активити, и все работает Но в правом нижнем углу значок письма Изначально там уже была какая-то кнопка Код для этой кнопки
findViewById<FloatingActionButton>(R.id.fab).setOnClickListener { view -> Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show() } В общем, его я закомментарил, кнопка перестала нажиматься, но она осталась. в xml файле активити нет никаких упоминаний о кнопке https://pastebin.com/cixWg3Yx - xml, там только одно текстовое поле В превью никакая кнопка не отображается. Что за нах магия? Что делать?
>>1833619 >Я к тому, что котлин хорош для скоростной разработки говна на коленке, но не для вдумчивого осознания происходящего и тем более не может собой заменить жабу, лол. Друже, чтобы писать вдумчиво, осознавая что происходит под капотом — надо писать максимум на, блять, си. И вообще вкатываться в программирование по хорошему надо через него, потому что он даёт минимальную абстракцию над железкой и ос, а не закрывает всё виртуальной машиной и тысячей абстракций, начиная от языковых заканчивая твоими абстрактными фабриками синглтоновых бобов.
>Да хули, банально погугли че нить под андроид, на сцаном стэковерфлоу какой процент ответов на котлин? Правильно, никакой, все на жабе. Заебись обучишься аки боженька Ну, если для тебя подобное это проблема, то стоит задуматься о карьере грузчика.
>>1833520 >Чет орнул в голосину с долбоеба Так же подумал, когда увидел твои нюни. Собственно, анон тебе уже всё расписал. Единственное, что тут можно добавить - да, новые проекты действительно пишут на Котлине, в чем ты можешь убедиться самостоятельно. обзванивай галеры/спрашивай на проходной/выбирай свой способ >>1833619 >всякие множественные конструкторы, отсутствие nullPointer, примитивные типы от объектов, проебанные статические члены и не приватные поля Это юзкейсы, которые были реализованы для стандартизации/упрощения. Ты можешь сделать всё то же самое на манер джавы. Считать null-safety минусом, конечно, интересная позициянет. Автобоксинг тоже является элементом удобства, потому что компилятор самостоятельно избавляется от лишней ссылочности, что идёт на пользу производительности. Статика - зло, ловушка для дурака, так что это тоже правильное решение. ФП на любителя. мне нравится >Никто никогда не будет переписывать О том, что это нецелесообразно, уже было сказано. >Заебись обучишься Есть разница между целенаправленным и глубоким изучением и ознакомлением с тем, что необходимо для понимания механизмов, с которыми ты сталкиваешься в работе. >>1833896 multidex
>>1832881 Не стоит, короче, брать исключительно один подход это как раз и разорвет потом мозг - может возникнуть ситуация, когда будешь пытаться впихнуть невпихуемое. Включай мозг и продумывай где лучше разбить по разным сущностям, а где ебануть @Embedded и вытаскивать все джоинами. Обращай внимание на то как часто происходит обращение к бд касаемо какой-либо сущности, как будет удобнее работать, насколько действительно большая сущность. Возможно, где-то сущность используется только частично, а не целиком. Прикидывай в голове в каком месте какой подход будет оптимальнее.
>>1833520 Чувак, конечно, жава задумывалась для разработки всякого embedded, но на практике все продолжают писать прошивки на C (иногда C++). Java слишком жирной оказалась для этих целей. Для кофеварок не то что STM32F0/F1 хватит, а даже какой-то старой Atmega8. А там Java означает сожрат всю flash и не только.
Поэтому, валиднее говорить, что, мол, захочешь тырпрайз под банки писать - жова лучше. Хотя, как ни крути, сейчас все проекты под ведро пишутся на Кт.
Аноны, есть вопрос. Если выложить приложуху в гугл, то как проходит оплата разработчику с монетищации и сколько времени проходит с момента оплаты покупателем до появления денег на счету девелопера?
>>1829984 > Koin - service locator нет, Dependency Injection
>Если в проекте используется Даггер, миграция максимально бессмысленна и убыточна В целом да, но если проект относительно недавно начат (считай - менее года назад), то лучше переехать. Ну, или держать одних и тех же разрабов на нем, лол.
>dagger > просто дебажится > гибок > масштабируем > выигрывает в сложных проектах тут просто в голос. Просто без троллинга или оскорбление посоветую - юзани в одном проекте Коин. А потом можешь придти сюда и признать неправоту.
> Kotlin Flow, считай, является нативной реализацией RxJava Урезаной минимум наполовину. БОльшую часть реальных задач из реальных проектов, которые при помощи RX делаются на изи, ты не особо сделаешь на корутинах без мозгоебли, танцев с бубном и т.д. Да и из беты они не так давно вышли.
Кстати, любителям дагера вопрос. Вы все еще дрочите ебанутый на голову инжект вьюмоделей в активити\фрагменты каждый раз плача или все же погуглили хоть раз в сторону Коина и увидели, как там реализована по-человечески работа с вьюмоделькой и ДИ?
>>1833812 Бамп кнопкой письма! Где ещё может лежать какой-то кусок кода, который может быть ответственным за эту кнопку? Подскажите, в какую сторону копать.
>>1835234 Кнопка письма это FloatingActionButton. Вообще она добавляется в разметку. Попробуй перейти по ссылке нажав на айдишник view. В том месте где у тебя R.id.fab
>>1834921 >нет, Dependency Injection Ок, пруфаю устами профессионалов. Фаулер: The fundamental choice is between Service Locator and Dependency Injection. The first point is that both implementations provide the fundamental decoupling that’s missing in the naive example — in both cases application code is independent of the concrete implementation of the service interface. The important difference between the two patterns is about how that implementation is provided to the application class. With service locator the application class asks for it explicitly by a message to the locator. With injection there is no explicit request, the service appears in the application class — hence the inversion of control. Уортон: Since Koin isn’t a dependency injector but a service locator with a clever reified trick that you can use to manually perform dependency injection, the boilerplate will scale disproportionally. Именно поэтому Коин плохо масштабируется. Цель Коина - упрощение, цель Даггера - масштабируемость и редукция сложности сопровождения в разрастающемся проекте. без стёба советую изучить вопрос различия этих паттернов, потому что они действительно существенны >юзани в одном проекте Коин Юзал, вполне подходит для быстрого создания прототипа, не более. Правда, не очень воодушевляет перспектива ловить рантаймы. >Урезаной минимум наполовину. Я об этом упоминал ранее. Множество Rx-функционала будет недоступно для тех, кто выбирает этот вариант в настоящее время. >>1834923 @ViewModelInject в Hilt + делегация by viewModels(), хотя код будет написан быстрее даже в том случае, если ты решишь самостоятельно реализовать фабричный класс под собственные кейсы, что сэкономит тебе время в будущем.
Ньюфаг итт, решил полазить по классам, добрался до файлов из android/sdk/sources, андроид студио эти файлы подсвечивает красным, unresolved symbol везде тыкает. При этом проект нормально собирается и запускается, проблема только с этим. Кто-нибудь сталкивался и знает как пофиксить?
Двач помоги. Хочу написать простой сканер BLE маячков с технологией ibeacon на андройде, java. Нужно постоянно получать MAC, UUID и RSSI для дальнейших вычислений. Есть действительно простой и не громоздкий способ написать такой сканер? Все примеры нихера не понятные и не работают простым ctrl c -> ctrl v. В java не шарю особо.
>>1830128 Поковырялся 40 минут и сдался? Работал с большими долгоживущими проектами? Мне переодически нужно несколько часовых подходов, разнесённых на 2-3 дня, что бы вкурить что тут происходит (как про Dagger, так и про другую ебовую логику) Но согласен, для небольших проектов Dagger избыточен, да и в целом тяжёлый для понимая
>>1836153 Читал подобное объяснение разницы SL и DI от Жеки Вартанова
И тут меня смущает, вот что: в koin мы явным образом просим об удовлетворении зависимости через присваивание, а в Dagger просто вешаем @Inject и все работает само, но при этом для классов Activity, мы должны явно просить (.inject()), что бы зависимости были удовлетворены
Т.е. там и там мы в явном виде запрашиваем об удовлетворении зависимостей, просто в Dagger менее явно
Судя по всему нормального cross platform ui framework никогда не будет. И чтобы свою хуйню писать , надо еще kotlin изучить. Ну хоть не java, спс на этом)
Мимо юнити сишарп макака
Кстати вопрос, даже два.
Были слухи что гугл свою новую ось создает вместо андроида. Где-то с год назад слышал это. Как сейчас дела?
И еще, не силен в архитектуре. Но есть ли возможность запускать приложения как сервис в винде? Хочу себе gps локатор запилить. Чтобы если проебал телефон, то запилинговать мог. Ну и еще на смарфон тяночки такое поставить) Ну и возможно ди сделать так чтобы этот сервис/приложение потом при заводском сбросе не удалялся и так и работал?
>>1836615 Да знаю что там можно изначально в настройках поставить выдавать местоположение, но это работает до того момента, как злоумышленник не сбросит телефон к дефотным настройкам. Или это пофиксили давно?
Напридумывали аббревиатур, за которыми скрываются банальнейшие вещи и долбются в сраки в своих крафтовых барах, обсуждая с гонором всю эту хуету. Эх бля, вам бы на хабор, лайков бы набрали там.
Кста, я забил на свою идею изучать андро по докам гугла, там какой-то пиздец неструктурированный начинается в Architecture Components
Читаю книжки. Ща осваиваю котлин из серии The Big Nerd Ranch, и он пиздец как охуенно идет, за неделю 200+ страниц осилил. Не думал что так будет легко, навреное знание явы рили реашет
Потом буду продолжать изучать андро по книге из той же серии the big nerd ranch 4 издания, там вроде все уже на джетпаке, да и отзывы о ней норм
>>1836471 >Поковырялся 40 минут и сдался? Работал с большими долгоживущими проектами? Мне переодически нужно несколько часовых подходов, разнесённых на 2-3 дня, что бы вкурить что тут происходит (как про Dagger, так и про другую ебовую логику)
Аналогично, я въезжаю в новые вещи достаточно долго. Вроде уже 2 года опыта, а в дагере и rх я околонулевой. Но тут проблема не в том что "ниасилил" - а в том что реально не вижу смысла жрать кактус. В сторону не менее для меня сложного для rх такого бугурта нет
Самый большой из тех что я поддерживал - аудиостриминговая аппка, несколько десятков тысяч активных юзеров (за месяц), никаким дагером и не пахло (и слава богу). Там основная проблема была в тотальном забиве на dependency inversion и в целом скатывания в тотальный монолит (спасибо ебанутым требованиям БА без времени на рефакторинг).
>>1836946 Учить кодинг по книгам и докам? Как по мне подход такой себе, как только разобрался с языком (и базовыми основами того как нужно писать код и выстраивать архитектуру) - нужно садится и писать приложуху и разбираться по ходу дела со всем ведроид сдк.
Ананасы, задумался над такой вещью: Всех джунов учат тому, что на те же фрагменты нельзя писать свои конструкторы (причины я думаю все знают, система будет юзать дефолтный без параметров). Но, я сейчас задумался - почему нельзя создать свои конструкторы, а помимо них, специально для системы ручками прописать все тот же пустой дефолтный - что при таком сценарии может пойти не так?
>>1837280 Сам первый раз столкнулся с большим проектом, приложуха для физ. лиц крупного банка (Аааааааааааа)
И тут уже хочешь не хочешь придётся жрать кактус, особенно когда нужно сделать, то чего ещё в проекте нет или рефакторить приложение в светлое будущее, благо на это выделяют 20% рабочего времени
Спустя пол года работы, изучил только крохотную часть приложения (4-5 экранов), про которые я могу сказать "Я знаю какая там логика". Это для меня дико необычно, т.к. до этого все проекты были написаны +- с нуля и ты мог пояснить за логику на любом экране
>>1837278 Насчёт не выделяют время на рефакторинг, можешь попробовать продать это менеджерам
Есть хорошая книга, которая поможет в этом: "Наш код. Ремесло, профессия, искусство | Бугаенко Егор"
Еще рекомендую как будто меня спрашивали "Элегантные объекты. Java Edition | Бугаенко Егор" От подходов автора к ООП, будет рвать жопу на протяжении всей книги, но после осмысления твой код может стать чуточку лучше) Например автор считает что конструкция if должна быть объектом: new If<Int>(bool, int1, int2);
>>1837283 Солидарен с тобой, сам написал свою первую приложу опираясь на "Освой андроид играючи"
Но тут есть подводный камень, с которым ты столкнешься - незнание всех возможностей языка/фреймворка/либы и из-за этого будешь местами придумывать велосипеды
Так что со временем всё равно придётся изучать гайды полностью
Пару вендоров только свои смарты позволяют обновлять на свежую версию системы. Самсунг и еще кто-то там. И то, пару раз всего, а потом новый смарт покупай. Кекв
Я до сих пор хз что делать. Покупать опять айфон за оверпрайс или самсунг.
В андроиде для меня намного больше возможностей (для полного счастья не хватает ток клаву подключить и ide открыть), с айос там конечно поменьше, типо торрентов нет, из локально сети не посмотреть фильм/сериал, ну и самое главное, нельзя разработкой заниматься без macos. Это прям пиздец, уже бы наверно пару приложух замутил по приколу.
Но у айфона есть киллфича прям. Хуй ты его разблокируешь и сменишь владельца. Я всегда смогу найти свой смарт, ток, конечно, если в нем есть зарчд батареи
>>1837366 >Начнём с того, как ты скажешь системе какой конструктор юзать? >Если покажешь рабочий вариант, то будет очень круто.
Мысль не в том чтоб заставить систему юзать не дефолт, а в том чтоб самому спокойно пользоваться своими конструкторами, а системе сделать дефолтный с своей логикой для ее потребностей
Насколько я понял сдк делает что-то вроде этого: Fragment f = clazz.getConstructor().newInstance();
>>1836494 Я бы сказал, что разница соответствует "промежуточному" месту sl между жёсткой инициализацией объекта и di. >но при этом для классов Activity, мы должны явно просить (.inject()), что бы зависимости были удовлетворены Это один из кейсов, которые должен был покрыть DaggerAndroid, но не пошло. >просто вешаем @Inject и все работает само И мы получаем минимальную связанность и полноценный IoC, чего не может быть в Koin, где само понятие зависимости условно. Это та жертва, на которую пришлось пойти ради упрощения. Нет, мне действительно нравится Koin пока я не ловлю рантаймы, но такова уж особенность reified, он действительно хорош для быстрого наброска "на коленке"посмотрел свои маленькие проекты, выглядит нереалистично просто, но для чего-то сложного, что нуждается во внедрении архитектурных решений, я возьму Hilt.
>>1838093 Ну если подумать всерьез - на практике все завязано на лайфсайкл, полагаться на создание обьекта в андроиде - гиблое дело.
Хотя мне тут нужно разобраться в теме до конца, сейчас например наткнулся на то что активити в случае когда ее убивает в бэкграунде при своем восстановлении, за каким-то хреном, достает как фокусник из шапки старые инстансы фрагментов, как это работает до конца я пока не совсем понимаю.
>>1839175 Плюсую, никому классическое ооп как правило не нужно. Взять те же основные архитектурные паттерны для андроида: как правило пытаются разделить стейт (модель), поведение и представление. По логике ооп разделять стейт и поведение уже не очень, попахивает какой-то функциональщиной.
Пацаны, хочу в приложении делать проверку при помощи кода, который присылается с сервера и исполняется динамически. Суть кода сводится к проверки сигнатуры АПК:
Signature[] sigs = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures; Signature sig = sigs[0]; // далее мы через sig получаем хешкод, массив байт, массив символов и из всего этого генерируем md5 строку, которую потом проверяет сервер
Вопрос - взломщик сможет подменить результаты методов Signature в апк файле приложения: hashCode, toChars, toByteArray? Насколько это сложно будет сделать?
>>1839934 > хочу в приложении делать проверку при помощи кода, который присылается с сервера и исполняется динамически Нихуя не понял, ты собрался dex присылать с сервера и его выполнять или че? > Вопрос - взломщик сможет подменить результаты методов Signature в апк файле приложения Может, просто ищется по использованиям класса Signature, он же не обфусцирутеся.
Нет, он просто несет пылающий факел просвещения в пердаки как настоящих, сишно-крестовых байтоёбов, так и скрытых, уже абстрактных байтоебов, которые уже отучились ебать байты и указатели напрямую, но еще не отучились от императивной процедурщиеы
>>1839972 >Нихуя не понял, ты собрался dex присылать с сервера и его выполнять или че? Само приложение написано на C#, скомпилировано в машинный код (IL2CPP). Там есть прокси-классы, которые работают с Джава объектами из NDK вот так: var unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); var activity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity"); var packageManager = activity.Call<AndroidJavaObject>("getPackageManager");
var packageInfo = packageManager.Call<AndroidJavaObject>("getPackageInfo", packageName, GET_SIGNATURES); var signatures = packageInfo.Get<AndroidJavaObject[]>("signatures");
Хочу генерировать эти проверки на сервере и присылать клиенту. Но тут вопрос, сможет ли взломщик легко модифицировать АПК файл приложения так, чтобы объект Signature возвращал правильные данные(то есть данные приложения с оригинальной подписью).
У меня в проекте дизайнерша намалевала все элементы с скругленными углами (а свитчи, алерты и прочее вообще нужно сделать как в айос, пздц) и я задался вопросом - как лучше сделать эти 100500 скругленных углов?
Сходу вижу 2 варианта - шейп с скругленными углами на бэкграунде, или вкладывать эти все вью в CardView где есть corner radius. Оба варианта имхо одинаково костыльные (100500 бэкграундов с разными цветами и радиусами угла vs чуть более засранная иерархия лейаутов), может есть какой-то третий путь?
>>1840954 Когда долго делаешь задачи, либо делать их не качественно, либо доебывать старших разработчиков всякой хуйней, проебываться и делать только простые задачи.
>>1841094 1. Вынести oldBalance и newBalance в 2 переменные в самом начале функции 2. Проверять newBalance обычным if'ом 3. Операцию изменения баланса вынести после проверки и изменения всех патронов
Котаны, а какие есть бест практис для работы с блютузом, чтоб event-driven, корутины? В примере блютуз чата от гугла, используют Thread. Еще где-то асинхтаски. Есть ли смысл повторять эти подходы вообще?
>>1841791 Асинктаски депрекейтед уже (если ничего не путаю). Вообще самое стильное и молодежное конечно же корутины. От какого года этот пример от гугла?
После двух нажатий на кнопку все начинает работать :) В смысле ветка else Там в поле, которое должно меняться, есть стартовый текст, который должен подменяться. Он не меняется. директория в res, там создана новая директория raw, в ней файлы .txt, иначе в поле this.resources.openRawResource(R.raw.c0)не подставить, не появляется вариант. Подскажите, что я делаю не так и куда копать в сторону ответа.
>>1841951 Разбираться впадлу (чтение файлов ручками всегда стремной вещью было), но код очень странно выглядит. Декларация метода внутри ифа - зачем, вложенность побольше сделать?!
Если maxcounter иммутабельная константа - так и создавай ее сразу как const, не парь людям и компилятору мозги.
e.printStackTrace() - в андроиде такое писать странно.
>>1841951 Плюс к предыдущему, не стоит в котлине без нужны явно тип писать при инициализации переменной var string: String? = "" - тут можно String? опустить, к тому же зачем ты ее делаешь nullable, когда по коду ты туда null не присваиваешь и даже при создании сразу даешь туда валидную пустую стрингу а не null.
Насчет интов - аналогично, вместо private var counter: Int = 0
>>1841957 >>1841958 >Разбираться впадлу (чтение файлов ручками всегда стремной вещью было), но код очень странно выглядит. А то! Это же мой код! Поговорим о главном: мне нужно, чтобы по нажатию поле текста заполнялось нужной мне карточкой (сейчас просто по порядку). Какие "бест практис" для этого в андроиде? Забить кучу строковых ресурсов? Некие базы данных? Есть какие-то относительно незапарные варианты, ну или общепринятые практики? Для запарных время ещё не пришло Укажи мне путь
>Декларация метода внутри ифа - зачем, вложенность побольше сделать?! Это мой особый стиль А как нужно было сделать? В другом файле и просто импортировать? Или до цикла? Или вообще до описания класса активити? >e.printStackTrace() - в андроиде такое писать странно. Тут будет отсылка к вопросу про "бест практис"
>>1839175 >>1839263 Шо такое "классическое ООП" или "100% ООП"? Это когда объекты подобные биологическим клеткам взаимодействуют посредством отправки сообщений?
>>1840954 Рекомендую спрашивать на собесе/первых днях работы: "Чего вы от меня ждёте?" Плюс запрашивать фидбек половину испыталки, что бы не накручивать себя неведением
>Поговорим о главном: мне нужно, чтобы по нажатию поле текста заполнялось нужной мне карточкой (сейчас просто по порядку). Какие "бест практис" для этого в андроиде? Забить кучу строковых ресурсов? Некие базы данных? Есть какие-то относительно незапарные варианты, ну или общепринятые практики? Для запарных время ещё не пришло Укажи мне путь
Вопрос в том насколько здоровенные у тебя тексты и сколько их. strings.xml используют для хранение коротких вещей, краткое изложение корана туда пихать явно не следует.
Raw файлы - может и подходит, можно хоть в статические стринги в случае если в процессе работы приложения ты их не будешь эти тексты редактировать/удалять/обновлять (например с сервера). Если нужно делать с этими текстами что-то помимо чтения (или если они тупо здоровенные) смотри на встроенную БД SQLite с Room и LiveData (рекомендую еще почитать про паттерн Repository). Я бы предпочел БД сделать.
Но твой метод чтения все равно какой-то кривой, вбей что-то вроде "Reading Android raw text file" на стековерфлоу, разнеси чтение файла и настройку клик листенера в разные методы (и блжад не вложенные в друг друга. Чтение из raw можно вообще вынести с активити куда-то в утилиты, если это нужно не только на данном экране.
В идеале вынести разнести логику и представление, смотри паттерны MVP/MVVM.
>>e.printStackTrace() - в андроиде такое писать странно. >Тут будет отсылка к вопросу про "бест практис"
Log.e("Имя активити", "Мой метод чтения из raw файла обосрался, сорян", e);
Хотя бы так. + неплохо бы и юзера уведомить о том что чет поломалось и не загрузилось, сделай какой-то глобальный Алертдайлог для подобного.
>>1842067 Ого Ладно, не всё сразу Решил БД пока не трогать, т.к. там думать нужно, а ещё мне не нужно менять эти текста, мне даже "на горячую" не нужно их заносить >смотри паттерны MVP/MVVM Хотел спросить "что это такое вообще", но не стану. Почитаю, как будет время
>И стандартный логгер в андроиде мерзкая вещь, рекомендую подрубить что-то стороннее, например: >https://github.com/JakeWharton/timber Мне бы со стандартным разобраться :)
Раз уж я тут отписал, есть актуальный вопрос Мне кажется, аксакалы с этим на раз-два справятся Хочу присвоить тексту строковый ресурс (извлечь строковый ресурс в текст) Но имя этого строкового ресурса генерится переменной textOfCard.text = getString(R.string.???) Что туда подставить? Как туда подставить сгенеренную переменную?
>>1842147 >>1842147 > >Раз уж я тут отписал, есть актуальный вопрос >Мне кажется, аксакалы с этим на раз-два справятся >Хочу присвоить тексту строковый ресурс (извлечь строковый ресурс в текст) >Но имя этого строкового ресурса генерится переменной >textOfCard.text = getString(R.string.???) >Что туда подставить? >Как туда подставить сгенеренную переменную?
Ох, я не думал что ты совсем новичок(
Никаких секретов нет, берешь и подставляешь) Есть метод setText() у которого есть перегрузка под интовый параметр с id (т.е как раз конструкция R.string.???) Например: return_policy.text.setText(R.string.text_return_policy)
??? - это айди. У тебя в проекте есть папка res, в ней string.xml. В ней есть пары ключ - значение, например такие <string name="app_name">Hello World!</string> Где app_name - и есть ключ, который можно подставить в R.string.???
>>1842162 Эй, ну что же ты, анон Я бы не стал спрашивать, хотя бы не попробовав гуглить Давай на твоем примере: Есть строковый ресурс <string name="app_name">Hello World!</string соответственно, если мы сделаем textOfCard.text = getString(R.string.app_name), то полю textOfCard задастся значение Hello World! Замечу, что мы сами написали всю конструкцию, зная "ключ" app_name Но как провернуть такой же трюк, если app_name генерируется в ходе работы программы, т.е. является переменной? Никаких var там не подставить, ${} тоже.
>>1842168 Так и не понял в чем проблема. Хотим - скармливаем туда id ресурса, откуда стринга достанется сама. Если у нас что-то генерируется на лету - то мы туда можем засунуть любую кастомную стрингу из любого источника. email_support.text.setText("123") или email_support.text.text = "123"
Или ты о классе R? Он генериться на этапе компиляции, просто давая intовые айдишники всему дерьму из ресурсов, с динамикой лезть туда не следует.
>>1842168 В ресурсах лежит статика, ссылки на нее (в виде этих интовых id) запихиваются в класс R на этапе компиляции. Никакую динамику ты там не сделаешь, ты туда пихаешь заранее все что может понадобится, максимум там можно еще сделать квалификаторы, чтоб получать разные ресурсы в зависимости от плотности пикселей, языка, дневного/ночного режима и т.д.
А все что генерится в рантайме - берешь и присваиваешь напрямую, причем тут вообще класс R в таком случае не ясно.
>>1842177 >>1842183 Ненене Или я туплю по-крупонму, или я плохо объясняю С картинками: У нас есть куча стартовых пар "ключ-значение" (тех самых строковых ресурсов) В ходе работы программы в зависимости от настроек нужно вывести на экран при нажатии ряд значений из пары "ключ-значение", ключ же при этом генерируется в ходе работы программы команда textOfCard.text = getString(R.string.app_name) задает нужному полю с id textOfCard нужное в данный момент значение, т.к. мы знаем его ключ и ввели руками, прописали app_name Как вывести эту же команду, если app_name генерируется в ходе работы программы? Ну к примеру: в зависимости от настроек нам нужно 0, 2, 3 значение мы генерируем var app_name = "ddd" + number При жэтосм всем есть строка <string name="ddd0">Hello World!</string> Как подставить сгенерированный ключ ddd0 в это выражение (или другое?), чтобы задать полю textOfCard текстовое значение Hello World! ?
С точки зрения языка это не ключ, не строка, это название поля класса R, название переменной. Единственный вариант достучатся к ней как ты хочешь - это Reflection Api, там мы можем пытаться достать любое поле/метод чисто по его имени в виде строки. Но это жуткий костыль, к которому прибегают в крайних случаях от безысходности, это явно не тот случай.
>>1842295 Ну это и есть рефлексия о которой я говорил. Field idField = c.getDeclaredField(resName); return idField.getInt(idField);
И да, рефлексия считается лютым костылем в регулярном коде. Я юзал в проде 2 раза, чтоб сделать невозможное возможным (в динамике менять FCM_SENDER_ID для одного левого сервиса пушей и залезть в чужой сдк и поменять параметры которые извне не доступны). А для таких бытовых вещей юзать рефлексию очень странно.
>А как иначе можно? Есть какой-то способ выводить текст, но именно те куски, которые мне нужны? Ну, как-то структурировать и выводить?
Масса вариантов, не понимаю зачем заниматься подобными извращениями. У тебя есть какой-то большой текст откуда ты хочешь быть способным достать рандомный кусок? Или у тебя список текстовых файлов с которые тебе нужно доставать по какому-то индексу? Можешь подробно расписать кейс который породил такие мутные схемы в твоей голове?
>>1842342 Чет не заводится. Наверное, такое бывает, когда пытаешься вставить джавовский код в котлин файл Или я просто не туда вставляю. >И да, рефлексия считается лютым костылем в регулярном коде. А почему так считается? С моей точки зрения человека, слабо знакомого с языком, очень даже логично. Это не секьюрно?) Или есть какой-то подводный? >Можешь подробно расписать кейс который породил такие мутные схемы в твоей голове? Короче, есть кнопа и текстовое поле. И много кусков текста. Просто разных кусков, никак не связанных. В зависимости от настроек до запуска активити берутся несколько кэтих кусков и выставляются в случайном порядке. Далее при нажатии кнопки выдается первый из перемешанного списка, потом второй,...
>>1842369 Все таки до конца не понял, ну и ладно. Если речь идет прямо о кусках текста - я все таки бы заморочился с БД. Если заморачиваться не хочешь и тебя прямо прет по папке /res глянь такую вещь как string array для того же strings.xml. Напихать туда все твои текста, достать их в виде массива одной строкой, а дальше стучи по индексам и вообще делай что хочешь.
>>1842374 Ну, куски по полтора предложения длинной, но их будет много. 500+ кусков по полтора предложения - это много?
БД звучит красиво, но блин, это сложно. Выглядит со стороны прямо пиздец как сложно. Я в питоне еле прикрутил, хотя делал считай степбайстеп, а тут еще по джавовским видосам крутить. Я бы сначала сделал так, а потом оставил бы себе план на расширение.
>>1842381 >Ну, куски по полтора предложения длинной, но их будет много. 500+ кусков по полтора предложения - это много?
Никогда с подобным в андроиде дела не имел. Но 500 с хреном не слишком много имхо. В каком виде они у тебя сейчас есть и как тебе конкретное из них доставать нужно, тупо по № (индексу) или еще как?
>>1842391 не совсем или да В общем, пример с картинкой Есть 100 фрагментов Выставлены определенные настройки, которые уменьшают количество, скажем, до 5 номера 0 1 2 77 99 До нажатия кнопки я хочу перемешать все тексты и выстроить в очередь 2 1 77 99 0 При нажатии той самой кнопки я хочу выводить их по порядку из перемешанной очереди. Пока что так.
>>1842399 Ну если прямо не хочешь заморачиваться то делай через string-array. <string-array name="text_fragments"> <item>First</item> <item>Second</item> <item>Third</item> </string-array> Такую херобору пихай в strings.xml.
Дальше, в рантайме достаешь этот массив строк resources.getStringArray(R.array.text_fragments)
И делай свои грязные делишки. Офк напиши себе скриптец чтоб привести свои строки к виду <item>First</item>, 500+ руками вбивать идея не лучшая.
>>1842369 >А почему так считается? Как правило рефлексия используется, что бы можно было делать, то что запрещено автором используемого класса/библиотеки, например обратиться к приватному методу
И при таком обращении ты сточкой пишешь название метода к которому хочешь обратиться, а автор такой взял и поменял название метода, после чего ты получаешь ошибку в рантайме
>>1822731 (OP) Здрасте Слушайте, а обязательно изучать Hilt, Hephaestus, вот эту вот рыгачку? В принципе, уже 2 года как используем Dagger 2 и он как раз. Про коин знаем, идите нахуй, спасибо
И вообще, че щаз нужно изучить по минимуму, чтобы не быть на обочине?
>>1842805 Я считаю, что Hilt является воплощением того, каким должен быть di-фреймворк в контексте мобильной платформы, поэтому советую рассмотреть его, как минимум, для ознакомления с используемыми практиками. Если говорить кратко, это обертка для Dagger, смысл которой заключается в полной интеграции с Jetpack и компонентами его библиотек, циклом разработки и платформенными компонентами. До него этим воплощением пытался стать DaggerAndroid, который, что было заявлено в качестве основы философии подхода, был нацелен на устранение недостатков и специфических проблем языка и речь в данном случае как о java и производительности java-кода, так и о байт-коде и самой структуре построения графа объектов, которые пытались решить с помощью оптимизации кодогенерации платформенных компонентов с учетом жизненного цикла объектов и безопасности. В Hilt же оптимизацию связали с Jetpack-либами и их компонентами, которые, по сути, являлись и являются наиболее уязвимым местом с точки зрения производительности, без внесения существенных изменений в механизм работы Даггера с кодогенерацией. Этот подход наиболее удачен как с точки зрения проектирования продукта, так и с точки зрения его тестирования и потенциального внесения изменений в di-структуру, т.к. инструменты Даггера более низкого уровня лаконично вписываются Hilt-проект и сделать это гораздо проще, чем с DaggerAndroid, эффективность которого не оправдала себя, а используемый подход не позволял полноценно применять его в одном проекте с Даггером, либо же просто делал его бесполезным и лишним. Пока сложно говорить о том, будет ли он распространен в качестве основного инструмента, но внимания он определённо заслуживает.
>>1842867 Ну, соглашусь по поводу DaggerAndroid. Такая себе, тулза, если мягко говоря. Не удачная. Окей, благодарю за ответ. Посмотрим чего оно вообще такое, этот дивный зверь под названием Hilt.
>>1839972 >Может, просто ищется по использованиям класса Signature, он же не обфусцирутеся Сам нативный класс Signature может быть изменен? Так, чтобы приложение продолжало работать и не крашилось.
>>1842409 >>1842524 Анон, спасибо тебе! Наконец запилил - допилил свою прогу, сейчас буду допиливать мелочи. Ну, а потом новые крупные функциональности. Да, замечу, что об синтаксис я очень спотыкаюсь. Да простят меня местные аксакалы, но питон интуитивно куда понятнее новичку.
>>1843136 >Да, замечу, что об синтаксис я очень спотыкаюсь. Да простят меня местные аксакалы, но питон интуитивно куда понятнее новичку.
Смотря с чего начинал. Я плавно уходил с универских с++, поэтому куда более простоя джава с похожим синтаксисом зашла на ура, а там просто сел и в 1 день на котлин перешел.
При этом с питоном я тоже дело имею (универ, ML и все такое) - и он напротив вымораживает в некоторых деталях. Чего стоит только то что от табов логика кода зависит, это же просто ахуеть.
Вот есть скажем интернет магаз, где есть фрагмент с здоровенным ресайклом c товарами. При нажатии на товар открывается фрагмент с подробной инфой по товару, тот фрагмент с списком товаров уходит в бекстек. Потом жмешь назад - и мы видим тот же фрагмент 1 в 1, ресайкл с той же позицией и т.д.
По лайфсайклу view при уходе в backstack уничтожается, а при возвращении создается заново. Но при этом во всех приложениях она спокойна живет (причем выглядит так, как будто именно живет, а не восстанавливает стейт, даже никакого лага на подзагрузку не видно.
Как это делают? Как-то сохраняют и переиспользуют вью? Сохраняют стейт и как-то настолько быстро по нему восттанавливают вьюху? Или эта навигация сделана вообще не через бекстек, а фрагменты тупо открываются поверх старого? В общем проясните как добиваются такого поведения, какие тут best practices.
>>1822731 (OP) Всем привет Хочу вставить форматированный текст (заголовки, шрифты, разные цвета) Но так, чтобы относительно просто, не хочу собирать конструкцию из кучи TextView Какие есть для этого варианты, которые не порицаются обществом? WebView? Есть что-то относительно простое, чтобы текст одним модулем вставить?
>>1842805 Hephaestus(теперь Anvil) - это мастхев при работе с кинжалом. Постоянный include модулей это для меня был единственный минус даггера. С Anvil'ом это теперь идельный di фреймворк. Всякие коины-хуёины и в помётки не годятся.
пиздец, читаю тред и охуеваю. столько слов незнакомых, Hephaestus, Hilt, коин джетпаки. Я бы охуел это все после 30 учить, башка совсем уже не та. Хорошо, что всегда можно наговнокодить какую-нибудь ерунду по старинке без вот этого всего, залить в стор, и получать себе копеечку на пропитание
>>1822731 (OP) Всем привет Хочу сделать выпадающий список, но чтобы были только картинки С текстом это делается в одну строку, а с толкьо картинками https://stackoverflow.com/questions/3609231/how-is-it-possible-to-create-a-spinner-with-images-instead-of-text Чет дохуя, много букофф Мне же только картинки выставить Есть более элегантный способ? Кстати, чел снизу описывал вариант для котлина, который у меня не заработал, написал Not sure if anyone is still using Spinners in 2020, что как бы намекает (наверное) Есть ли более легкий вариант? как сделать легче, если нужны только картинки, силами котлина?
>>1844934 Понял. У меня такая задача, надо в качестве мониторинга кидать пост запросы на сервер с данными. Если запрос не прошел, ничего страшного, как я понял, мне нужны асинхронные запросы.
>>1845481 >>1845529 Чет странное В общем, хочу урезать функционал этого решения до показывания только картинок / иконок Они квадратные, 35 на 35 Закомментарил в коде кусок последней функции, выглядит так override fun getView(i: Int, view: View?, viewGroup: ViewGroup): View { var view = view view = inflter.inflate(R.layout.custom_spinner_items, null) val icon = view.findViewById(R.id.spinner_imageView) as ImageView //val names = view.findViewById(R.id.spinner_textView) as TextView icon.setImageResource(flags) //names.text = Network return view
И теперь спиннер отображаетиконки на выбор, а справа пустое место
В принципе, если выставить нужную ширину, он уйдет, но ведь это же не системный подход, правда? Как программно выставить так, чтобы он был главным элементом, ширина у него была wrpa_content и не было никаких полос белых? Где копать? Посмотрел, при значении ширины 90 спиннера, и 40 кастом спиннер итем полоска минимальная, но есть. Перебирать уж очень не хочется.
Пацантрэ, нужен совет от гуру разработки под андроид. Один товарищ придумал (с его слов) супер-идею мобильного приложения (рассказывать хочет только под NDA, так что пока хз, что там), для реализации которой нужно написать костяк приложения с базовым функционалом типа Тиндера (без примочек, только основное).
Вопрос: сколько человеко-часов займет создание первой версии такой поделки? Я сам плюсовик, под андроид никогда не писал...
>>1846145 Сам работает в другой области, в какой-то металлургической компании занимается госзакупками. Кстати, по этой теме предлагает запилить одно приложение для автоматизации процессов, вот тут уже детали я знаю и могу сказать, что идея достаточно здравая
>>1846227 ну ладно. Мб это какая-то форма моей личной неадекватной неприязни к тем что постоянно придумывают чо делать и советуют всем, как будто самостоятельные разрабы только и ждут как им кто-то укажет что делать, а не делают свои идеи, что значительно приятнее. Хотя я бы сам наверное тоже чота придумывал и советовал, просто полет творчества вырывается с них и им становится приятно от этого, думаю. Вообще-то, на фриланс биржах есть как раз те люди, что делают приложения под ключ за деньги, если "советчики" реально верят в свою идею.
>>1846278 У меня ситуация скорее обратная. Общаюсь с кучкой бывших однокурсников, которые неплохие, в общем-то, программисты, но достаточно замкнуты в своей сфере и максимум пилят "гамы". Нет у них ни знания какой-то предметной области, ни каких-то навыков работы с людьми или в какой-то индустрии, кроме как на своих прогерских галерах. Я вот как раз рад был с этим парнем познакомиться, потому что он вне нашего прогерского мирка работает, понимает, на что есть запрос, имеет выходы на полезных людей.
Вообще, надо сказать, что идея заказать работу у фрилансера у меня появилась практически сразу. Но, с другой стороны, тогда зачем тут я? А у меня какая-то с детства, видимо, мечта сидит основать свой стартапчик в гараже. Хотя не знаю совершенно, возможно ли на данной деятельности поднять хоть сколь-нибудь значимые деньги
>>1846313 > Нет у них ни знания какой-то предметной области, ни каких-то навыков работы с людьми или в какой-то индустрии, кроме как на своих прогерских галерах. Сорри, но как будто у тебя есть. > каких-то навыков работы с людьми не нужно, все автоматизировано, общение через почту по желанию, с клиентами > в какой-то индустрии что именно ты знаешь что они не знают?
>>1846363 >Сорри, но как будто у тебя есть У меня как раз тоже нет. А вот у этого моего товарища есть. Зато я более-менее могу прогать. Таким образом, мы можем друг друга дополнить
Столкнулся с идиотской проблемой, но хз как решить. Есть констраинт, по углам к его верху прилеплено 2 кнопки и к верху прицеплен вьюпейджер с картинками (на всю ширину). Проблема в том что как бы я не компоновал/перемещал эти вьюхи вьюпейджер всегда сверху, какого хрена?
>>1846665 Нет, захардкожено пока все. Шиза еще веселее - дело не в слайдере вообще, сместил его - а кнопок не видать. Включил отображение всей разметки - их вообще нет... На превью есть, а на девайсе нет. Студию уже с инвалидацией кеша перегрузил, 2 инстанса эмулятора пробовал - один хрен. Видимо то что я мучу в рантайме убивает их как-то, но не понимаю как...
>>1846665 Нашел причину, увидел мааленькие куски нижних границ этих кнопок вверху экрана. Такое впечатление что банальный topToTop лепит их не к верху вью, а прямо к верху экрана, игнорируя системный топ бар. Если сместить их вниз - все ок. Только на этом экране, и на превью при этом все норм. Я нихрена не понимаю.
>>1846680 И конечно же оказалось что я это я дебил, а не баг сдк, накрутил нечитабельную хуиту для наплыва фрагментов под header с блекджеком и отрицательными марджинами. Сейчас сидел все утро рефакторил и приводил в божеский вид эту залупу. А констраинт работает как положенно.
Всем привет. Дайте советов мудрых, есть ли смысл вкатываться в программирование под Андроид? насколько перспективная отрасль? Знания джавы на уровне System.out.println("Hello World"); Да и в принципе любого языка. А еще я старенький. Сорян если ответ уже есть, неохота все подряд читать в какой-то надежде.
Анончики, подскажите, в чём может быть проблема. Последняя строчка кода с "getPackageArchiveInfo" у очень небольшого кол-ва пользователей вызывает эксепшен. И я не могу понять почему. Может как-то связанно с sdcard.
- В основном они запускают приложение на эмуляторе BlueStacks. У них в такой data-path: /data/app/com.my.app-O-f0Umyla--0HU3oA2MAPA==/base.apk
- Среди них был и девайс "alps SYX-T704" с таким путём: /mnt/expand/54b9f3f6-ccfe-44a2-89ac-9f774993c1c9/app/com.my.app-2/base.apk
- У всех процессор "ARMv7 VFPv3 NEON" - Андроид API в основном v23 и выше
Аноны, тупой вопрос про data binding и design панельку в андроид студии.
Когда мы биндим и задаем дефолтное значение: android:text="@{model.name, default=`John`}"
Дефолтное значение отображается в design панели в студии, что оче удобно! Но мне аболютно нахой не нужно это значение в рантайме, как можно это реализовать? Не задавать дефолтное значение неудобно для дизайна
Работает, спасибо. Хотя сейчас я попробовал воспроизвести изначальную проблему и не смог (default не рендерится если бинженное значение пустое или null), видимо я оче тупой.
>>1838097 у нас мультимодульный проект с чистой архектурой на 80+ экранов. Используем koin и никаких проблем масштабирования не было и не предвидится. Есть большой опыт использования даггера, но выбрали коин из-за простоты и удобства и не пожалели. Проблем с ошибками в рантайме нет, обычно они выявляются на этапе дебага, даже до QA не доходят, не говоря уже о проде. При этом стэктрейс понятный и без проблем находишь, что ты упустил. Кроме того, можно запустит перед сборкой тест для анализа графа зависимостей у нас он на всякий случай прогоняется на CI c остальными тестами. Специально проводили тестирование скорости сборки, но на среднем проекте. С коином ожидаемо быстрее.Так что все недостатки коина надуманы, при этом главное преймущество - простота использования, чего даже новый hilt так даггеру и не дал.
>>1847075 Ну ты сам подумай. Сколько сейчас людей пользуется мобилами с андроидом? Собирается ли андроид подыхать? Ну и то, что старенький, не так важно, если ещё мозги не ссохлись.
>>1847690 Я только рад тому, что есть положительные примеры использования Koin. И всё же, мне очень нравится Hilt, как и сама тенденция упрощения инструмента, который, очевидно, должен быть простым в использовании, ведь это непосредственным образом влияет на стоимость конечного продукта.
>Специально проводили тестирование скорости сборки, но на среднем проекте. С коином ожидаемо быстрее dagger-reflect для разработки и отладки, на CI release билд с dagger-compiler
>главное преймущество - простота использования Подключение нового gradle модуля к приложению: dagger: 1?. Создаешь даггер модуль, если есть биндинги 2. Подключаешь модуль в build.gradle 3. Используешь зависимость koiln: 1. Подключаешь модуль в build.gradle 2. Всегда создаешь koin модуль 3. Подключаешь koin модуль в коде 4. Используешь зависимость.
Если взять использование koin'а на примере нашего приложения: 1. 80% зависимостей это конструктор @Inject'ы без биндингов интерфейсов. В коине все это говно надо писать руками. Нет спаспибо. 2. В коине нет мультибиндигов. Это вообще пиздец, без комментариев. 3. С коином каждый из ~150 модулей надо подключать в коде руками, Anvil для даггера это делает автоматом(что в комбинации с мультибиндингами позволает реализовать "плагин" модули, которые подключаются только в build.gradle приложения)
Так-то для пет-проектов всегда похуй, что использовать. Но мы же тут говорим про сириус бизнес, и в нём даггеру нет равных.
>>1847722 то то и оно! я ж так и думал, но с другой стороны мб все ниши заняты и особо никто уже и не нужен, а если и нужны то какие то суперпро, я тенденций рынка не знаю поэтому и спрашиваю. Еще ньюанс что живу в мухосрани, а идти работать мб придется не на удаленку, а в контору, а контор то у меня таких и нет в задрыщенске. Собственно хотелось узнать поподробнее че тут да как.
>>1848100 Ну, у меня в городе вменяемых компаний с мобилками тоже 1-2. Остальные либо в Киеве, либо в Харькове, либо во Львове. В городах меньше - как правило, не так много компаний, где есть моб. разработка.
Всем привет Не могу сформулировать запрос: Есть, например, форма короткой регистрации игроков, там 3 игрока, вводятся их имена, задаются параметры Ниже кнопка "+“ При нажатии добавляет четвертого игрока, а сама кнопка съезжает ниже Как это реализовать? Как это вообще загуглить? Получается, что кнопка плюс динамически меняет активити? Есть какой-то пример в сети?
>>1848251 Да много как можно сделать. Если в форме максимум 4 игрока - то можно просто сделать скрытую по дефолту 4-ю форму и просто менять ее визибилити по нажатию. Если их может быть фиг знает сколько - гугли How do you dynamically add elements to a ListView on Android? или то же самое но для RecyclerView (если игроков может быть достаточно много)
Анимацию на пальцах не расскажешь, но там тоже все не сильно сложно. Самое простое - домножить координату вьюхи на коэффициент, который плавно будет плавно меняется в заданных тобой значениях.
>>1848251 >>1848275 Вариант со скрытой четвертой (и еще парочкой скрытыми формами) мне вполне себе нравится :) Костыльненько, в моем стиле. Хотя можно запариться и сделать нормально.
Еще такой вопрос, связанный, можно сказать: хочу прикрутить некую таблицу 2 на х, где по второй графе будут сортироваться. Только вот я смотрю, и в таблице (которая TableLayout) нет сортировки/ Почему этот вопрос связан? Как я вижу, вариант каждый раз пересоздавать таблицу? Но я не знаю, как можно динамически пересоздавать элементы Знаю только, как можно в уже готовых менять какие-то параметры. Как лучше сделать?
Аноны, базовый вопрос по котлину, корутинам и как лутше делать в андроиде.
Допустим есть у вас метод, который использует android room и лезет в базу, условный AppleDao класс, поверх еще какие-нибудь абстракции,СЕРВИСЫ например, AppleService, который использует AppleDao.
Допустим в Dao я не стал заморачиваться с LiveData а просто без задней мысли возвращаю результат, предполагая, что оберунть это говно сверху корутиной - не проблема вовсе. Это сильно хуево?
И вопрос по наименованию методов, безотносительно sql, допустим вы знаете что метод нельзя выполнять в ui треде, а надо ебошить отдельным тредом/корутиной, может быть есть какая-нибудь общепринятая методология наименования, чтобы по методу было понятно? Типа там AppleService#loadAllApplesBlocking(), но это залупа жеж, слишком МНОГО букаф :(
Почему разработка на андроид такая отвратительная? Почему Android Studio так разбух и сочится каким то обильным несвежим говном? Я просто хочу создать простой кастомный будильник, с фоновым сервисом, почему мне для этого надо учитывать столько невнятного дерьма? Как можно проще? А то я реально не понимаю нафига это деление между джавой и котлином, все эти активити, господи ёбаный рот этого казино.
Ваще гугл, честно говоря, занят тем, что пилит библиотеки-костыли для хуево спроектированных частей android framework. Т.е., намазыванием слоев говна на другие слои говна. А хочешь еще прикол? Да, май френд, сверху этого бывает ещё тоненький слой говнеца, чтобы тоже исправить. А ещё я молчу про разные модно-ванильные либы, от которых разные хипстеры тоже в восторге, но которые тоже являются сам кайнд оф слой говна.
Ну и проекты, конечно же, конечно же, в процентах 65 случаев таке ж лайно в плане секса кодовой базы, архитектуры и т.д.
Это вот то, чего я зрозумив за 4 года андроидной коммерческой разработки.
>>1850165 Ох бро, можешь пожалуйста вкратце пояснить или ткнуть в направление, как мне создать сервис и добиться от него чего-либо? А то я чувствую что голова взрывается от этого всего на моих C# такой хуйни не было
>>1850161 Всё из-за того, что ты выбрал неправильный подход. Какой смысл пытаться разобраться в документации, не имея знаний о платформе и её компонентах? Гугли "alarm clock example", тебе выдаст новичковые туториалы, где всё подробно разжевывается.
>>1850168 Та с сервисами, на самом деле, не так вме и сложно. В кратце, запиливание сервиса на Андроиде выглядит как-то так: 1. Наследуешься от класса Service (это и будет класс твоего сервиса) 2. Добавляешь класс своего сервиса в манифест 3. Запускаешь сервис путем Context#startService(Intent), скажем, из твоего активити. Создавая интент, разумеется, в него необходимо положить класс твоего сервиса (именно который YourService.class) Собственно, простейший сервис создан и запущен. Почитать об этом всем в целом можно тут: https://developer.android.com/guide/components/services.
Дальше можно с ним чего-то делать и каким-либо образом взаимодействовать. Можно, в принципе, через кидание тех же интентов и onStartCommand. А можно чуть удобнее - через т.н. локал биндинг: https://developer.android.com/guide/components/bound-services#Binder (вообще, стоит почитать всю ту страничку чтобы знать как вообще можно "пинать" сервисы и какие особенности и ограничения есть у всех этих способов; например, локал биндинг довольно удобен и прост, но имеет ограничения и в некоторых случаях его не заюзать).
Насчёт работы сервиса в фоне. Начиная, по моему, с 8 Андроида, необходимо запускать foreground service https://developer.android.com/guide/components/foreground-servicesпо-сути, это просто перевод уже запущенного сервиса в режим, а не запуск нового если хочешь работать в фоне. Иначе, система ебнет твой сервис очень быстро и стремительно. Если в кратце, то форграунд сервис - это сервис, к которому будет "привязана" "несмахиваемая" нотификашка. И юзер будет знать, что у него что-то работает в фоне.
В принципе, это оооочень сжато и бегло по сервисам, которым нужно пахать в фоне.
Обязательно дЖаву учить? Что если мне надо просто запилить концептуальный прототип игры? Вроде можно же юзая хтмл и жс запилить мобильную игру, не? И если с нуля в катываться в джава андроид это сколько времени займет в часах?
>>1850382 Геймдев на жабе, ога. Вообще геймдев это анрил/unity, для андроида я еще имел дело с Corona SDK. А где можно писать вменяемые игры на жабе - ну я хз если честно...
Я бы вообще на знание языка не зацикливался бы, 2-й и последующие выучить намного легче чем 1-й.
Помогите, как отладить сборку APK? В этом я совсем нуб. Исходный код скачен с опенсорса f-droid, в Android Studio собирается, работает. Собираю проект - не устанавливается "не удалось установить приложение".
Как отладить сам телефон, как узнать - что не хватает? Где прочитать настоящую ошибку, почему мой пакет не ставится?
>>1851674 $ ./adb install ../app-release-unsigned.apk Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES: Failed to collect certificates from /data/app/vmdl761073460.tmp/base.apk: Attempt to get length of null array] 3781 KB/s (29573637 bytes in 7.638s)
>>1851617 Хреновая идея, дизайнерша сидит на стороне заказчика, а я пержу в другой стране на аутсосе, мое мнение хуже котируется. Да и проект для азиатского рынка, у них там огромные кнопки с золотым переливающимся бекграудом считаются красивыми видимо.
Сам разработкой под Android не занимаюсь, но по ощущениям с каждым годом всё больше и больше проектов начинают делаться на кроссплатформенных решениях: React, Angular, Dart/Flutter, да и на том же Kotlin'е можно писать под iOS.
Это правда или мне просто показалось? Нативные приложения скоро умрут? Правда, что для бизнеса писать для двух платформ одновременной дешевле в два раза?
>>1852459 >Нативные приложения скоро умрут? Не умрут >мне просто показалось так точно >для бизнеса писать для двух платформ одновременной дешевле в два раза? дешевле это может быть только до того момента пока разработка не упрется в ограничения обмазывания кроссплатформенностью. А что произойдет тогда - уже проходили это и не раз, достаточно обратить внимание в сторону крупных проектов которые вернулись из кроссплатформы в натив. >да и на том же Kotlin'е можно писать под iOS С Котлин Мультиплатформ не знаком, но полагаю что частичное его использование в купе с нативной разработкой вполне оправданно. Но только частичное. >Dart/Flutter Лично смотрю в сторону флаттера. Сдается что будущее у него есть
>>1852597 Ionic и прочие полудохлая херня. Если говорить о кроссплатформе то тут есть текущий фаворит реакт нейтив и набирающий популярность флаттер, все остальное не взлетело/полудохлое и никому не нужное.
Если говорить рн или флаттер - рн популярнее, опять же js разрабов как говна и я видел не раз как чуваков с просто реакта сажали неожиданно писать под мобилки (самое странное что они справлялись).
Но мне куда больше нравится флаттер, дарт как язык имхо поприятней жиэсо-говна (хотя опять же, мне он напоминает внебрачного сына родной жабы и богомерзкого жиэса). В самом флаттере очень приятные глазу виджеты "из коробки", на том же андроиде для создания такого красивого ui ебли гораздо больше требуется. И опять же очень классный подход когда флаттер рисует все сам, не трогая нативные компоненты. В целом я бы сказал что с UI в флаттере все охуенно, а вот в плане реализации бизнес логики все несколько хуже.
>>1852772 Да дарт неплох, я его вкупе с флаттером ковырял конечно буквально несколько дней, но бугурта особого не испытал.
Единственное что смутило - это привет от жиэса в виде отсутствия многопотока. После жабовских танцев с тредами и чуть позже с корутинами дарт в этом плане выглядит диковато.
>>1853018 Вижу отвратительный нейминг и простую задачу, которую можно было бы красиво оформить с помощью рх или корутинок, если бы ты писал на Котлине.
>>1853018 Так это не дело, мой юный друг! Тебе тут нужен clean architecture. Также тебе нужны котлин и корутины. Views нужно дергать через ViewBinding. Нужно использовать ViewModels.
Все как учил Google, друг!
Не зря же в Google работает столько людей стольких ориентаций, гендеров и убеждений! :)
Работяги дайте совет. Работаю 2 года Android разрабом, пол года на Flutter пишу. Хочу менять работу и мне такая мысль в голову закралась, а стоит ли вообще оставаться в мобилках или может быть двигаться в сторону серверной части ? UI фреймворки и платформы меняются, в свою очередь серверная часть нужна будте всегда. Что думаете?
Движение вперед полезно в любом случае. По крайней мере, оно полезно как минимум даже тем, что отвлекает от херовых мыслей, не говоря уже о развитии тебя как профессионала и придания жизни вкуса. Я иногда читаю доу.уа да, я с Украины, в том числе и комментарии, и диву даюсь насколько некоторые индивиды там без инициатив и пофигистичны даже по отношению к самим себе, насколько они ни о чем не мечтают, насколько у них нет амбиций, насколько они готовы "тупа провеслать на галере" всю жизнь. И им не интересно ровным счётом ни-че-го. Вот, как говорится, в натуре "колбасники"! А хуле, хата на трое - предел мечтаний, а все свободное время - с банкой пива, пускай и крафтового, перед гейфликсом.
Вопрос куда - это уже отдельный вопрос. Можешь и в бэк-энд идти, но там, так или иначе, тоже будет что-то новое всегда, пускай и происходить этот процесс будет медленнее.
Я, например, тоже почти 4 года как андроид разработчик, но вот подумываю во встройки двигать. Но даже в embedded, каким бы он стабильным и "старопердунским", по заявлениям некоторых весьма "модных" граждан, не был, появляются новые железяки там, новые камни и МК. Да, очень многое из этого вряд ли прям таким распространенным станет, но тем не менее.
>>1853478 Ну кстати двигаться ближе к железу неплохая идея. Есть тот же глобал который похоже вполне себе занимается андроидом под IoT, регулярно вижу вакансии под NDK для С++.
Хотя опять же, каким боком смена стека считается ростом? Наоборот, скорее немного теряешь в навыках при переходе. Конечно приятно и интересно попробовать что-то новое, но на мой взгляд это нифига не рост. Рост это после сеньора пойти в лиды, а дальше двигать либо в архитекторы и далее по технической части, либо в сторону менеджмента (имхо предпочтительный если ты не хиккан и с инглишем все хорошо, ПМы с нормальным техническим бекграудом а не курсами по скарму охуенны) .
>>1853534 >Тут соглашусь. Смена стека это часто понижение зп и позиции. > >А что думаешь в плане перспективы?
Я пока не очень парюсь насчет перспектив, у меня только к 2 годам опыт подбирается. Мобайл в ближайшее время не умрет однозначно.
Я вижу тут 2 риска - первый, то что нативная разработка будет вытеснена кроссплатформой. Пока не сильно верю, доля рынка у них конечно есть, но все более-менее серьезное пишут нативным.
2-й то что андроид как таковой вытеснят с рынка в той или иной мере. И вот в это я верю куда охотнее. Субъективщина, но все же напрягают пару моментов: то, что СШП разосрались с китайцами и похоже будут появляться альтернативы (те же хуавеевская хармони). То что в мире это дерьмо не взлетит я практически уверен, но сука китайцы с патриотизмом и wechatом головного мозга вполне могут уйти с андроида на чет свое. А это минус огромный рынок.
И в ту же копилку последняя айос. По сути раньше самый существенный довод в плане андроида было то что на андроиде есть виджеты, кастомизация, выбор дефолтных приложений и все прочее. Но сейчас айос догнала по функционалу андроид и на мой взгляд (человека который всегда апл хейтил слегка) айос сейчас объективно лучше. Что сейчас на стороне андроида? Зоопарк из одинаковых 6.67 лопат? Зоопарк из фирменных оболочек? 120гЦ которые аппка чаще всего не осиливает отрисовать (хотя экран могет). Или дырка в экране сильно лучше челки с faceId? Мб ток батарейка и герцовка, но думаю в течении пары лет завезут и это и тогда айфон станет действительно более разумным выбором.
Даже сейчас маркет шейр 50/50 +-, но при этом айос всегда в приоритете. Почему? А потому что при шейре 50/50 по деньгам все далеко не пополам. Поэтому айос версия всегда в приоритете. Поэтому я не раз сталкиваюсь с ситуацией когда айос версия впереди андроида по фичам, а то и вообще стоит задача скопировать айос приложение, андроид вообще идет во 2-ю очередь. Про обратную ситуацию я не слышал. Регулярно вижу коллег андроид разрабов с айфоном и маком, айос разраб с ведроидом - огромная редкость. И дальше похоже будет только хуже.
Грустно все это, но даже я задумался о том что вместо нового синкпада возможно стоит взять новый мак (жду тестов/обзоров) и потом пощупать свифт и кроссплатформу... Вот не верю я в средне/дальнесрочные перспективы андроида. Именно из-за конкуренции с гей-ос.
>>1853632 Есть в твоих рассуждениях что-то. У меня у самого опыта работы около двух лет. Но из-за того что работаю в галлере, я и на питоне, flutter, php успел пописать.
Сейчас хочу найти что-то нормальное поэтому и раздумываю куда свернуть.
Думаю немного начать щупать spring в свободное время.
>>1853632 Как андроид может сдохнуть, если там 2,5 миллиарда активных устройств и нижняя цена устройства с актуальной ос - 60баксов. Так что там неосвоенных рынков в 3 мире просто непочатый край. Да, малоплатежеспособные пользователи - но там и 5 млрд пользователей - вполне осуществимо. А полтора миллиарда айос - это потолок. Всей кто мог себе позволить яблофон за 600-1200баксов его уже имеют. А уж мерятся фишками ос и очень слабо разнящимся функционалом - интересует очень мало кого.
>>1853763 А толку? Деньги то за приложения адекватные платят в штатах/европе в основном. А если Андроид останется в качестве основной ОС только для Индий и прочих Бангладешей, то вангую и рейты будут соответствующие, за которые только индусы и будут работать.
>>1853764 В Европе андроид в 2 раза популярнее, в сша медленно, но верно сокращает отрыв айос. Ну и стран 3его мира много. В каждой стране будут госуслуги, банковские приложухи, етк. Плюс приложения, которое выпускает компания из сша, а пользуются по всему миру. Ну да, может разница в оплате еще будет увеличится, но самих приложух под ведро должно больше пилиться.
Почаны, есть вопрос по ЧИСТОЙ АРХИТЕКТУРЕ, по MVVP.
Я так понимаю что click listener'ы уходят в ViewModel в этой схеме. Но что если в логике click listener'а нужно что-то напрямую дернуть у View и это не представляется возможным решить data binding'ом, а надо именно взять по id вьюху и обновить.
Щито тогда делать? Пробрасывать в ViewModel иные вьюхи?
>>1853632 Да, кстати. Во многих соглашусь. Вот это вот "А можете сделать как на iOS?" очень распространенная фраза клиентов.
Перспективы ОС, согласен, туманны. Мало того, что есть риск проеба рынка Китая, так ещё и есть риск непосредственно Гугла))) Ведь, надеюсь, все ж помнят их склонность к закрыванию проектов. А тут они ещё и что-то, похоже, с Фуксией мутят. Хоть Гомоватые и говорят, что у Фуксии другие цели, но слушать их - себя не уважать. Короче, пызда. Пару лет назад была видна таки перспектива на развитие платформы, сейчас - вообще хз, такое ощущение, что все скатывается фпизду.
И насчёт андроид-аппаратов тоже соглашусь. Моему аппарату 2 года (китайский факман). Подумывал обновить зимой. Начал смотреть чего вообще есть. Ну, короче, похоже ничего, кроме iPhone 11/12/12 mini, в общем, и нету. Все эти Xiaomi, OnePlus уже такое себе, если честно. Куча цифр и громких слов, а толку - абсолютный 0. Так, ебаный в рот этого казино, блять, раньше если оно хоть было довольно дешёвым и, при этом, факман, то сейчас - докидываешь половину от этой стоимости (если не меньше) и идёшь покупаешь неплохой iPhone.
>>1853632 Кстати, забыл добавить. Ну... У меня есть iOS-коллега, который раньше ходил с Android. А знаешь, чем все закончилось? Он перешел на iPhone. Просто потому что "Ну, да, Android может много чего. Файлы-хуяйлы, каштомизация и т.д и т.п., только вот нахера мне это все? Это ж телефон, а не компьютер, лол". И, кстати, я с ним соглашусь. Я лажу с Android, но вот никогда не каштомил, не васянил, "проводником" пользуюсь раз в год.
Подскажите пожалуйста, где искать ментора? И стоит ли его искать в самом начале обучения? Я сделал одну программку для себя, которой пользуюсь на работе, но она из говна и палок, в общем достаточно убогая прога. Конечно хотелось бы попасть в небольшую компанию и выучиться и работать там, но думаю что это не реально. Как вообще лучше поступить?
>>1853876 >И насчёт андроид-аппаратов тоже соглашусь. Моему аппарату 2 года (китайский факман). Подумывал обновить зимой. Начал смотреть чего вообще есть. Ну, короче, похоже ничего, кроме iPhone 11/12/12 mini, в общем, и нету. Все эти Xiaomi, OnePlus уже такое себе, если честно. Куча цифр и громких слов, а толку - абсолютный 0. Так, ебаный в рот этого казино, блять, раньше если оно хоть было довольно дешёвым и, при этом, факман, то сейчас - докидываешь половину от этой стоимости (если не меньше) и идёшь покупаешь неплохой iPhone.
ну я тоже с тех пор как дали условного мидла и появились какие-то вменяемые деньги начал посматривать в сторону эпла. И если мак скорее необходимость чем желание (см.пункт "Сделать как на айос", буду пожалуй ждать 16' на арм), то андроид вендоры реально разочаровывают.
Вот сейчас у меня Redmi note 8 pro. Он еще вовсе не старый, работает бодро - но апдейтов уже не будет. Экран ипс, хотелось бы конечно же амолед. Камера приемлемая, но до флагманов далеко.
И начал я смотреть что можно взять... Основное мое требование которое отметает большую часть рынка это не быть лопатой 6.5+. Хорошая камера, корпус без пластика, хороший амолед экран, что-то похожее на чистый андроид. И вот если забить требование не быть лопатой - выбор очень широкий, а вот с моими требованиями выбор очень скудный.
Oneplus косячит с экранами, да и те балансируют на грани лопаты, смотрел в сторону пикселей - так у некоторых 5-й расклеивается... Хоть от сони поделие квадратное за 1к бери... Хотя скорее всего в некст году возьму все же 5 пиксель, рискну.
Но прикол в том что на этом фоне айфоны выглядят достаточно неплохо. Хорошие камеры, материалы, экраны, долгая поддержка, адекватные габариты. Если б не логика построения интерфейса iOS и убогие батарейки - мб пошел бы за айфоном.
>>1853924 Ищи программы стажировок/обучения/практик на галерах. Сразу на джуна достаточно сложно. Входной порог для этих обучающих программ вполне адекватный, хотя конкуренция офк будет. А там тебе уже и ментора дадут и на борт возьмут если хорошо себя покажешь.
>>1853863 >MVVP MVVM >ЧИСТОЙ АРХИТЕКТУРЕ На пикче дефолтная схема MVVM, для чистой архитектуры ищи валидную. Click Listener или любая другая манипуляция с UI принадлежит к самому верхнему слою, методы VM ты вызываешь внутри его тела. VM должна быть изолирована от всего, что не связано с получением данных, в том числе от любых компонентов, относящихся к фреймворк-слою(контекст, вьюхи и т.д.). Ты слишком размазал вопрос. Кидай свой код, если хочешь, чтобы тебя правильно поняли и правильно ответили.
>>1853949 >VM должна быть изолирована от всего, что не связано с получением данных, в том числе от любых компонентов, относящихся к фреймворк-слою(контекст, вьюхи и т.д.).
О как, а как в таком случае предлагаешь реализовывать навигацию? Оставлять полностью на вью?
>>1853924 Зависит от того, что ты хочешь и какой у тебя бэкграунд. есть ли он вообще Если реально смотреть на вещи, никто не хочет никого учить, за исключением некоторых случаев, когда ты имеешь навыки, которые увеличивают твою ценность в сравнении с иными претендентами. Один из вариантов - стажировка в компании, которая может позволить себе подобные программы и заинтересована в них, но и там свои требования, свой фильтр.
>>1853951 Мне даже стало интересно, каким образом VM может быть связана с навигацией в твоём понимании? >реализовывать навигацию NavController и активити, которая содержит юзкейсы для перехода, вызываемые из фрагментов. Проще и чище некуда.
>>1853959 >NavController Я ниасилил, пробовал юзать наверное где-то год назад и по итогу наткнулся на кейс когда мне абсолютно понятно как выполнить задачу на старых интентах (пара флагов и готово), а на этих новомодных графах это сделать ну никак. Жаль подробностей не помню.
Сейчас у меня сейчас в проекте достаточно много в слое представления ебли с лайфсайклами и бекстеками, как тот же функционал сделать на этом дубовом контроллере я вообще ума не приложу.
>>1853959 >Мне даже стало интересно, каким образом VM может быть связана с навигацией в твоём понимании?
А вот хрен знает (архитектура мое самое слабое место). Помнится на собесе спросили как раз про навигацию на мввм, я выдал вариант когда интент висит в вм и мы его обсервим. Собес завалил кстати.
>>1822731 (OP) Всем привет Стоит задача разделить экран: По высоте на 30 процентов показывать изображение, на остальных 70 некий LinearLayout с кнопками Как это лучше реализовать? Ну, как принято? Вариант 1) guidline 30% и к нему прикручивать Вариант 2) все это засунуть еще в один lilay, ему дать weightsum 1, а дочерним элементам по 0.3 и 0.7 соотвтственно. Вариант 3) ???
P.S. И да, изображение же в эти 30 процентов вписывается командой android:scaleType="centerInside" ?
>>1854389 Вообще, у меня мечта создать крипту. Знаю математику (калькулус), в целом разбираюсь в криптографии (подписи, системы с открытым ключом, хеширование и т.д.), знаю на концептуальном уровне как устроены криптовалюты.
Что если на Котлине попробовать что-нибудь интересное реализовать, какие преграды и преимущества тут дает JVM?
>>1854389 >Что можно писать на котлине помимо андроида?
Я слыхал про робкие попытки юзать его в энтерпрайз бекенде, но думаю там доля проектов где рискнут добавить котлин исчезающе мала, да и где заюзали не всегда в восторге, там консервированное болото в плане технологий и даже обновить версию jvm на сервере - целое дело. А больше на практике я как-то про котлин не слыхал.
Я обычный вкатун, и у меня есть два стула, идти на фронтенд-верстку или стажером на андроид. На андроиде я понимаю очень мало (писал хелло ворлд приложение год назад), а в вёрстке понимаю ещё меньше, но думаю что вкачусь за ~месяц. Если бы у вас был такой выбор, что бы вы выбрали? Какой стул хуже/лучше, где больше шансов роста как программиста, а где застой и уныние?
>>1855083 Выбирай то, что интересно, тогда и шансы вырасти увеличатся. Иначе высока вероятность того, что ты разочаруешься, перегоришь и никакие деньги тебя не будут мотивировать.
>>1854960 По ведру хуйня книга хотя в этих ваших редитах на нее дрочат как байтоебы на к&р. В каждой главе хуяк-хуяк, ну короче вот вам код, вы все поняли, идем дальше.
>>1822731 (OP) Господа, выручайте Есть массив натуральных чисел (1,2,3,...n) Для наглядности назвоем его massiv Если в коде указать massiv.reverse() То программа работает, как задумывалось Но проблема в том, что необходимо его перемешать massiv.asList.Shuffled() работает некорректно. Есть подозрегие, что он не перемешивает Во всяком случае в функцию, которая ниже, после перемешивания shuffl залетают обычные значения (так не задумывалось), а после реверса значения наоборот (как и задумывалось). Как быть? ЧЯДНТ?
>>1822731 (OP) Так, аноны, вводная: Имеется идея текстового квеста на мобилки, под андроид хотелось бы сделать. Хочу сделать больше для души, для себя, ну и друзяшкам показать, хотя может и на гугл плей залью, если получится удачно вдруг. Сценарий и все что нужно уже есть, в текстовые квесты другие тоже наиграл достаточно в свое время, так что цельная картина того чего хочу есть в голове. Но, из знаний у меня только старый универовский курс джавы и плюсов, с горем пополам помню как калькулятор для консоли на них написать, и то, буду подгугливать чую, короч только самые основы и общее представление. Вопрос: что мне нужно выучить чтобы это все хотя бы попытаться реализовать?
>>1856236 Ну вообще все просто, думаю сделаешь. Вспомни жабу (сейчас конечно в ходу котлин, но если хочешь побыстрее и знаешь жабу - юзай уже ее), посмотри как верстаются экраны, как делается навигация. Глянь еще работу с ресурсами - все текста/картинки/музло где-то хранить нужно + прогресс сохранять. Ну и что за звери Активити/Фрагменты тоже придется разобраться.
Тут имхо самое сложное продумать как хранить это все древо экранов квеста. Никакой сложной логики нет, ui это кнопки, текста да картинки без динамики, возможно музыка. Не вижу особых сложностей.
>>1856236 >>1856344 https://developer.android.com/courses/fundamentals-training/toc-v2 Читай/проходи, пока не поймешь, что можешь реализовать нечто похожее на твою идею, пусть и в примитивном виде, а дальше гугли более сложную/улучшенную реализацию всех тех моментов, которые тебя не устраивают. На Джаве всё спокойно пишется, на этот счет можешь не переживать.
Анонасы, поясните за Dart/Flutter. По тестам я посмотрел - он помедленне жабы будет, и даже пожручее в плане памяти. Аппликухи не подлагивают на нём? Алсо, поясните за sdk - насколько реально писать кроссплатформенно? Например, апи камеры одно для йоус и ведроида или придётся костылить прослойку с разными бэкендами?
Пытаюсь заюзать ява класс в проекте котлина, но при компиляции вылетает эксепшн ClassNotFound, все на пикриле Чому так происходит? Вообще ничего не гуглится. ОС Убунта
>>1856701 Получилось не менее скомканно, потому метод нужно кидать полностью. Мог и весь класс скинуть, что уж. Напишу о том, что бросается в глаза. Пример: есть два метода - sort() и sortedArray(). Первый возвращает Unit, поэтому массив будет отсортирован в любом место кода, который находится ниже вызова метода. Второй возвращает отсортированный массив, а это означает, что его нужно либо вернуть, либо присвоить переменной, либо как-либо использовать(например, внутри цикла - т.е. в определённом скоупе). Иными словами, он возвращает результат, который нуждается в сохранении. Метод shuffled() возвращает лист, поэтому к нему применяется аналогичное правило. Всегда смотри на возвращаемое значение. В цикле достаточно написать for (x in 1..mQuestionsList.size + 1) step 1 - дефолт, а size не может быть не целочисленным, поэтому кастить его не нужно. Проверять на нуллабельность нужно до использования в цикле, например: mQuestionsList?.let { код }
>>1856749 В моей проге mQuestionsList!!.size не может быть равно нулю Смысл в том, что у меня есть некие данные, большой массив А вожет и не массив, я уже не знаю, он состоит из объектов у каждого объекта есть некие параметры Я хочу выводить эти объекты в случайном порядке Для этого я делаю новый массив, состоящий из натуральных чисел от 1 до максимального количества переменных ( в нашем примере это 1 2 3 4) В коде это названо arrayShuffle Если я делаю reverse(), и затем обращаюсь по порядку, то массив выдает значения 4 3 2 1, как и должно быть Но мне нужен не реверс, а рандом (например, 4 2 3 1)
Ещё раз внимательно прочитал твой пост, сделал следующие вещи: Перешел с array на list сохранил в новую переменную, используя shuffle (для листа шафл есть) поменял метод обращения mCurrentRandomPosition = listShuffleAfter.get(mCurrentPosition - 1), а было listShuffleAfter[mCurrentPosition - 1] В любом случае заработало Конечно, это не инженерный подход, и сейчас я буду думать, почему Пишу все это, чтобы сказать тееб спасибо. :)
>>1856803 Лучше не шаффлить весь лист, а брать рандомный элемент. Чтобы не было повторов, кэшируешь те, которые были выведены ранее. Чтобы было нагляднее: https://pastebin.com/zK5DZ25L(в Идее запусти) Там 2 варианта использования - по индексу и по свойству объекта, в зависимости от их однородности. Т.е. если они не имеют общих свойств, либо есть иные ограничения, используешь доступ по индексу.
>>1856972 Ну, сперва работал охранником в салоне. Работа не пыльная, устраивала. Но как-то вдруг совпало, что приехал постоянный клиент, а все 3 красивые девочки не смогли выйти - одна заболела, у другой экзамены. Клиент на взводе, ситуация сперва накаляется, а потом, смотрю, притих и о чём-то с мамкой шепчется. Тут мамка ко мне подходит и говорит, что так и так, это твой шанс, клиент на тебя запал - вкатывайся. Ну, выбора особо не было, вот так и вкатился, зарабатываю теперь х2 от прошлой зарплаты.
>>1857685 Жаба и котлин прекрасно могут работать вместе, в одной пекедже. Нахрена ты отдельную папку под котлиновские классы создал? Все проекты на жаба + котлине или чистом котлине юзают дефолтную папку java.
>>1857685 >>1857685 Просто создай проект через менюху и не пытаясь сделать раздельные 2 src папки под жаба и котлин классы, создай в дефолтной папке жабовский и котлиновский класс и увидишь что они прекрасно работают вместе.
Но у меня много случаев, когда данные из Data Source мне нужно "дополнить" данными, которые можно получить только из Context. Например, из Data Source мне прибывает строка, но мне нужно подянуть шаблон из R.string.XXX и сформировать другую строку.
Может ли Data Source иметь зависимость на Context? Или как можно еще ПРАВОСЛАВНО, не нарушая MVVM решить этот вопрос?
>>1857806 Имхо когда DataSource занимается обработкой данных и чет мутит с R.strings - бред. Если это DataSource - то он должен отдать данные, а обрабатывать их уже следует ниже, в каком-то слое бизнес-логики, в нашем случае вместо него VM. Для VM это уже вполне норма, у AndroidViewModel даже собственный контекст есть для этого.
Двач, такой вопрос, есть у меня работа, которая крутится в AsyncTask и постоянно надо отправлять данные на сервер, использую для работы OkHttp, я так понимаю мне в AsyncTask еще один AsyncTask лепить?
У меня такой реквест: посоветуйте материал где максимально доступно пояснят за новомодную асинхронщину - корутины, suspend методы и т.д. Лучше на русском (сложные вещи все таки лучше воспринимаю на родном), но инглиш тоже пойдет.
Прикол в том что последний раз чем-то похожим я занимался еще на чистой жабе, с коллбэками, тредами, AsyncTaskами и ExecutorServicами. Там как-то все более-менее было понятно, вот тебе тред с методом run(), вот тебе монитор с wait/notify sets и пара более тонких моментов по типу volatile.
А сейчас в соло пишу одну приложуху, на котлине, там я почти закончил UI и буду плавно переходить к логике, где все вышеперечисленное понадобится. Хочу сделать максимально красиво, но пока с 1-й попытки осмыслить новые для меня вещи до конца не вышло, в голове слегка каша.
О бля, господа, поясните, это пидарасы в андроид, или пидарасв в приложениях в последние пару лет начали делать так, что даже если в телефоне ищё целый гиг свободной оперативки, приложения всё равно блять как бы закрываются и загружаются вновь, стоит выйти из него на 5 секунд?
Проблемма(а эти пидарасы наверное называют это фичей) точно програмная, а не от железа, недостатка памяти и т.д.
>>1857988 у меня по работает в фоне, скачивает файлы, периодически ей надо на сервер отправлять данные о том, что скачано, что нет, GUI тут практически не нужен, работать она должна всегда. Вот для каких целей. Сейчас я как раз ее и пишу и использую библиотеку OkHTTP т.к. она везде вроде. RxJava это из моей оперы или нет?
>>1858005 Почти наверняка это делает ось, а не приложения. Можешь подшаманить настройки энергосбережения и прочего для работы в бекграунде нужных приложений, чтоб ос в этом плане была менее агрессивна.
>>1858012 А можно вообще это вырубить нахуй? Помню у меня старенький тел с 2 гб оперативки держал постоянно открытыми кучу приложений, и лаги начинались только когда загрузка оперативы достигала 98% лол. И то, небольшие лаги, а не закрывание приложений, п новые приложения просто не открывались. Я только сейчас понимаю насколько охуенная это была стабильность работы, сейчас на андроиде невозможно такое даже представить, а раньше это воспринималось как что-то обычное, типа ну да, так оно и должно работать, а как иначе? Пиздец как испоганили андроид свж мрази.
А сейчас с 55% занято и они закрываются нахуй, (при учёте что ебаная ось сразу отжирает почти 50%, лол), ну т.е. 2 приложение начинают закрываться, если из одного перейти в другое на пару сек.
>>1858018 А как вообще запрос поисковый об этом должен звучать? Как отключить лимит фоновых процессов /оболочканэйм/? Или лимит фоновых процессов это другое но тоже может помочь?
>>1857806 Делай маппинг данных в отдельном классе, который имеет доступ к Контексту, а оттуда передавай в VM. Это наиболее правильный подход, который позволяет тебе отказаться от использования контекста внутри VM. >Может ли Data Source иметь зависимость на Context? Не может. Во-первых, он должен зависеть только от API, предоставляющего данные, т.е. иных факторов, которые могут влиять на его работоспособность, быть не должно. Во-вторых, таких источников может быть много, из чего следует, что каждый из них должен быть изолирован и, соответственно, не должен влиять на работоспособность иных источников данных/модулей. >>1857968 Тебе нужно реализовать Observer. Можешь сделать это и на асинктасках, но с RxJava или LiveData сделать это проще.
Аноны, только вкатываюсь в Андроид, можно сделать так что одно приложение например загрузает картики в папку (скачивая с сервера), а другое приложение эти картинки отображает? Не хочу делать одно большое приложение, хочется сделать как-бы два независимых.
>>1858234 А так вообще делают? Я подобную схему реализовал на линуксе, получилось удобно, два модуля независимых, удобней отлаживать и система стабильней вышла из-за быстрой локализации ошибок. Хорошо, а как мне тогда по механизму межпроцессовой связи обмениваться? На си++ у нас все модули обменивались данными через сокеты. Меня больше интересует вопрос, правильная ли это архитектура(допустимая) или необходимо делать монолит.
>>1858271 Ну как тебе сказать... Правильнее, как писал анон выше вынести это в отдельный класс, т.к например в юниттестах ты легко его замокаешь и сможешь спокойно тестить эту VM, а в ситуации когда она напрямую завязана на контекст все будет несколько сложнее.
Но при этом с тестами редко кто заморачивается, да и учитывая что сделали андроид вм с вшитым апп контекстом - видимо в гугле не считают зазорным зависеть от него.
>>1859333 1. Раз ты так уверенно об этом говоришь, у тебя наверное есть какая-то статистика, насколько это "быстрее"? 2. Как поддержка и разработка двух независимых приложений может занимать меньше времени, чем поддержка и разработка двух независимых gradle модулей, из которых будет состоять тобою так называемый "монолит"?
>>1859692 интересует, что бы мне такого заюзать из технологий, чтобы без сильного напряга сделать простую апи для приложения Где хостишься? почему не юзаешь firebase или aws amplify?
>>1859742 Отталкивайся от того, что знаешь, либо ищи и пробуй разные решения. Меня полностью устраивает Спринг, сложностей с ним не возникает. Раньше писал на Джаве, сейчас всё пишется на Котлине. >Где хостишься? Не было такой ситуации, чтобы было недостаточно локалхоста. Поведение сервера можно имитировать, но такая необходимость бывает редко. >firebase Зависит от задачи. Юзаю, если нужно. Иногда дольше подключать его к проекту, чем написать то, что нужно, самостоятельно. Забыл, ещё на Джанго пару раз писал API. Пайчарм запускается быстрее Идеи.Шучу, просто люблю писать на Питоне. Если знаешь его - юзай, советую.
>>1858232 >>1858299 >>1859333 Дружище, ты собрался делить не приложение, а его модули слои, потому что работа с данными не зависит от их отображения в том смысле, что изменение данных в директории - сайд-эффект главной задачей является отображение данных, а не изменение. Если ты будешь придерживаться принципа разделения ответственности единственной, никаких проблем с отладкой у тебя не возникнет, более того, правильно построенная структура сделает её эффективнее. Мобильные приложения монолитны по своей сути из-за платформенных особенностей и от этого никуда не деться. Другое дело, если ты хочешь создать несколько приложений, которые будут взаимодействовать друг с другом, будучи независимыми друг от друга, имея лишь общий источник данных, общие сервисы та же аутентификация, либо что-то ещё. Но это не столько об архитектуре приложений, сколько о сервис-ориентированной продуктовой политике. >удобней отлаживать >быстрой локализации ошибок Есть два простых правила: 1) Архитектура должна быть такой, чтобы вносимые изменения могли вызвать потенциальную ошибку только в месте их внесения. 2) Увеличение сложности не должно быть причиной увеличения количества ошибок.
В общем проблема 1. Я php макака - но это не самое страшное 2. Нужно приложение просто запускает через внутренний браузер страничку на сайте (онлайн кабинет) так чтобы при входе автоматом подставлялись логин и пароль как в хроме (при успешном входе предлагает запомнить).
Скачал эту вашу Андроид студию (эмулятор сразу же не запустился на процессоре AMD, но ладно на галере интел - запустился)
+ В манифесте разрешил доступ в интернет + Заменил хеловорд TextView на WebView + Разрешил выполнение ДжаваСкрипт и еще кучу всего Все круто, работает.
Но заказчик говори все норм, но без автозаполнения, как в хроме, полей для авторизации (телефон + пароль) ему это не подходит
я же написал wv.getSettings().setSaveFormData(true); wv.getSettings().setSavePassword(true); и оно не работет
Выручайте, разве это сложно сделть! Кто поможет от души ресепект и уважение! В принципе могу и на поход в МакДак или Бургергинг переслать несколько билетов Банка России переслеть
Мужики, есть один джавист(я), 1.5 года, со стандартным энтерпрайз стеком, заебавшим проектом и желанием попробовать мобилки. Навскидку, сколько времени мне потребуется на минимальный вкат в платформу, чтобы получить оффер от косаря долларов? Пригодятся ли мне скилы написания тех же микросервисов? И вообще стоит ли или у вас свое болото и головная боль?
>>1860547 Почитай шапку и сам тред, чекни вакансии и пройди по стеку, чтобы прикинуть соотношение лёгких и сложных для тебя вещей. Так и нарисуется примерный флоу и требуемое время. Я сам имел знания энтерпрайз Джавы(в числе других). На интересе довольно быстро освоил всё, что было нужно, но точное время не скажу, сам процесс довольно размыт. К неким отличительным чертам можно отнести архитектуру(проектирование, принципы и паттерны), знание sdk, знание железа понимание взаимодействия sdk и железа, знание и понимание распространенных инструментов(с точки зрения их сравнения и применения, т.к. стек, к счастью, довольно неоднородный), ui, гайдлайны и т.д. >микросервисов Про это был ответ выше. >стоит ли Решать тебе, не благодари. :) >свое болото и головная боль Смотря чем заниматься и в каком темпе. Если сидишь в продуктовой конторе джуном, твой рабочий день будет мало чем отличаться от того же энтерпрайза. Грубо говоря, к твоим задачам добавится валяние в ui. В любом случае, если хочется чего-то интересного, то надо влетать в амбициозные проекты, имея опыт и знания. надо признать, что такая возможность, как минимум, есть Иными словами, есть куда грести, что не может не радовать.
слушьте, а хром браузер каждую открытую страницу держит как отдельно открытое приложение? ну понятно что пользователю показывается что только один хром открыт, но там в системе скрыто от глаз пользователя это как в реале реализовано?
>>1860523 Посоны всем спасибо кто принял участие в моей судьбе. С утра сел разобрался. Там рили кода три строчки Заказчик кипятком писает от того что я на андроиде написал ярлык Хочет в Гугл Плей выложить Как я понял мне нужно заплатить Среге Брину 25$ чтобы он мне разрешил это делать. Скажите пожалуйста как обстоит процесс выкладывания приложения в Гугл плей на пальцах?
>>1861276 Да-да, походу тот самый от которого я отписался, когда увидел, как это дебил делает Web-View приложения с описанием: "КЛУТОЕ АНДЛОЙД ПЛИЛОЖЕНИЕ ЗА 5 МИНУТ"
Хотя бы основы алгоритмов, понимание что такое сложность по времени/памяти, сложности самых попсовых алгоритмов и операций с разными структурами данных (ну и коллекций, которые их имплентируют)
Хорошо знать языки (котлин однозначно, жабу желательно).
Понимать хоть в общем чертах как работает веб, HTTP протокол, хотя бы понимать что еще за протоколы кроме хттп есть и зачем они нужны (вебсокеты как минимум).
Архитектура, куда ж без нее. В общих чертах clean, солид, паттерны (особо внимание ходовым MVP/MVVM).
Тулзовины типо гита, той же андроид студии, джиры, постмена. Для крупных галер понимание того что такое скрам/аджайл/канбан.
Ну и андроид сдк, тут конечно много всего. Для джуна самые ходовые вопросы по компонентам их их лайфсайклу. Особое внимание фрагментам/активити, там лайфсайкл не слишком тривиален, много тонкостей и различных кейсов.
>>1861952 По андроид сдк отдельный пост писать нужно, впадлу.
Еще из того что забыл - самые попсовые либы, (нетворкинг, загрузка изображений. Отдельно стоит пощупать rx и что-то связанное с dependency injection. Для некоторых контор еще могут быть актуальны тесты, т.е jUnit+Mockito как минимум для юнит тестов, и очень редко (но возможны) тесты на espresso / roboelectric.
>>1862233 Ты долбаеб. У тебя на скрине написано, почему это происходит. Эти функции можно вызывать только на инстансе CoroutineScope, чем и является GlobalScope.
>>1860959 Если джаву соберёшься, могу курс посоветовать. Сам потихоньку допрохожу его, рассматриваю опцию в андроид перекатываться, но пока ещё в сомнениях страдаю.
У меня не было проблем с ошибками и их логированием до того как я перелопатил все на MVVM и LiveModel повсеместно, ошибки я видел в LogCat в консольке студии.
Щас я вижу ровно хуй и просто падающее приложение. Убирал все фильтры по приложениям, ставил 'verbose' логгинг, не прилетает НИЧЕГО вообще.
Вангую что факап у меня в логике observer'ов, но как стектрейсы узреть?
>>1822731 (OP) Всем привет! Хочу сделать для приложения некие настройки. Нов настройках будет параметр "имя", и количество этих имен будет определяться динамически Знаю, как перетаскивать настройки посредством sharedPreferences, когда мы знаем количество этих самых переменных, которые перетаскиваем А как сделать, если ты не знаешь? Ну, если так, как на картинке: несколько полей, и есть кнопка, при нажатии на которую открывается дополнительное поле. Все, что я придумал: сделать несколкьо полей заранее с видимостью visible=gone, при нажатии на кнопку открывать еще одно поле, и добавить руками проверку, чтобы пустое значение не обрабатывалось в самой программе Правда, не до конца ясно, как удалять... Хотя по аналогии можно сделать
Но это звучит как-то костыльно, да и вообще не очень-то филигранно. Подскажите, есть ли какое-то решение более типовое, что ли? Но это как-то не очень научно звучит