Нынче juick.com Виталя не смог почитать откуда и для чего есть KotlinNullPointerException.
Спойлер: основной поставщик сего — когда твои/компилятора предположения о том как работает джава код, с которым ты взаимодействуешь из котлина, оказываются не верны. И на сим месте все сводиться к более строгой обработке платформенного типа.
Подходит время, когда fabric/crashlitics купленый гулом превратиться в тыкву и останется только firebase crashlitics на который надо мигрировать. И, святая дискета, насколько же у них всратая дашборда, сделанная без малейшего понимания для чего ее используют. Хотя казалось бы бери и скопируй с купленой тобой, раз уж ее нормально сделали .
Вот например последние релизы. В фабрике тебя встречала картинка как пользователи обновляются, сидящих на старых билдах становилось меньше, на новых больше, что и показывал график в динамике. Не так чтоб полезно, но сердце грело. Ну из полезного можно было прямо из этого экрана перейти на креши конкретной версии. В файбейзе просто версия последнего билда написана и сколько на нем юзеров сидит.
Или сам список крешей. У фабрика там был фильтр "top builds" он автоматом пихал туда до трех наиболее используемых пользователями версий. И тебе, кроме этого фильтра, довольно редко что-то было надо. Он обновлялся без твоего участия в зависимости от инфы с последних релизов и ты видел актуальную картину происходящего. Теперь же у тебя список версий включая все тестовые и предрелизые сборки — выбери нужные сам. Но ты можешь найти нужные версии где-нибудь, в файбейзе только последний билд указан и накостылить себе фильтр руками. Потом не забывать его обновлять.
Короче, гугл — верни стену...
Java 8 library desugaring in D8 and R8: ConcurrentHashMap (with bug fixes for Android 5.0)
developer.android.com
Прям линукс напоминает. Там тоже все фиксят примерно к тому моменту, когда все прекращают это использовать. На редите уже часто говорят что выкидывают сапорт ведра 5 из проектов)
Забавно, если бы переходил на него с джавы, то впечатления были бы совершенно другие) Но я переходил с котлина. И первое впечатление было, блин ну почему вы не могли взять и котлиновских фич потырить раз уж в своем гугле решили котлин-ферст и вот все это.
Я прям не ожидал такой бурной реакции организма, на отсутствие дата классов, не считал их главной фичей котлина, а как оказалось, прям зубы заскрипели от предчувствия, что опять надо херней страдать. Хотя дарт до екстеншинов почти дожил, может и до иммутабельных дата классов в доживет, для которых не надо километры кода писать.
По итогу: ко всему можно привыкнуть, но восторга не вызвало совершенно.
"Basically, Android's ConcurrentHashMap in API level 21 / 22 multithreaded put(), putIfAbsent(), putAll(), ... operations can fail to add a key/value pair if there are hash collisions on the added keys and the underlying datastructure needs to be resized at the time of the concurrent puts.
This is no wonder since Android API 21/22 uses the same CHM implementation that was used until OpenJDK 8 ea b120 (where the bug was fixed)."
issuetracker.google.com
В общем, оно не работает)) Только instant run иногда все же подтягивал изменения, то новая хрень стабильно не подтягивает их никогда. В общем, гугл как всегда, а полная перекомпеляция апк наше все. Из плюсов, отключать новую фичу не надо, она не добавляет к коду ничего и обычный билд не замедляет.
developer.android.com
И решили навелосипедить DAO.
developer.android.com
Я, конечно, утираю скупые мужские слезы радости текущие по впалым щекам, но раньше было 14 либ для сохранения данных, теперь тут есть 15 либ для сохранения данных...
android-developers.googleblog.com
Хорошего там много, но из серии не прошло и н лет как...
Запилили java 8 time api — ну лет 5 подождать и оно наше, если в сапорт либы не скинут.
Теперь в хмл можно прописывать шрифты =)
Поправили систему разрешений. Теперь приложение не получит права на запись запрашивая права на чтение. Сильно лучше сия кривулина не стала, но хоть что-то
Ну и порезали еще немного бекграунд процесы для сбережения батарейки. Вероятно заафектит в основном всякие опенсорсные заменители гугл плей апи.
И, как видно, не осиливая починить забытые вейклоки, не дающие уснуть девайсу даже у себя в плейсервисах, ребята решили просто отстреливать их для приложения в состоянии кешед.
Хоть гредл мне несколько как-то симпатичней анта, но оно дивно тормозная и прожорливая билд система. И вот появляется в андроид студии Intant Run, который типа должен решить проблему перекуров во время сборки проектов... проблему жора оперативы и нынче решают покупкой еще одного модуля. И понеслось...
Intant Run — типо должен был на горячую заменять только измененный кусок апликухи, что делалось почти мгновенно. Мне не ведомы глубинные проблемы выбранного решения, но оно глючновато по сей день. Я не знаю, кто сией фичей пользуется, ибо у всех оно отрублено, но для меня наличие возможности, что после внесенных тобой исправлений, в некоторых случаях код не обновится и ты как дурак будешь гадать это твой фикс лажовый или ты все еще старый код тестишь, является полным блокером. И самое плохое, что судя по времени сколько они все это фиксят — оно не будет 100% рабочим никогда. И тут всплывает мысль, что по хорошему все ресурсы спущенные впустую на Intant Run, хорошо было бы пустить на замены греда, на что-то быстрое.