Forwarded from Стой под стрелой (Nikita Prokopov)
Работа со временем, часть 2/3
Вся информация об исторических переменах собирается в tz database. Это такой public domain файлик, где для каждого города написано, какой у него UTC offset, как и когда он переходит на летнее время и как это менялось с 1970-го года. Он используется для всех преобразований между wall clock и unix time.
Написано в нем примерно следущее:
TZ database изначально собирается волонтерами (да, блин!), затем компилируется и поставляется операционными системами и некоторыми платформами (в JDK, например, есть копия). Помню, как несколько лет страдал со своим Андроидом, на который не выходили обновления, а Новосибирск поменял часовой пояс и Asia/Novosibirsk показывало неправильное местное время.
Теперь про сложности. Главная сложность заключается в том, что время идет по Unix time и работать с ним легче тоже в Unix time, но люди хотят иметь дело с Wall clock time. И вот тут, ну, нужно быть внимательным, и все будет хорошо.
Пример — скольчо часов в сутках? 24, правильно? Кроме дней перевода часов, тогда там будет или 23, или 25, потому что для человека сутки — это интервал между 9 утра на часах сегодня и 9 утра на часах завтра, а сколько на самом деле времени прошло — не так уж важно. Важно, во сколько вставать на работу.
Или другая ситуация — я поставил будильник на завтра на 9 утра. И потом перелетел из Берлина в Москву. Во сколько должен зазвонить будильник? В 9 утра, но уже по Москве, да? То есть Unix timestamp будильника должен поменяться в момент смены часового пояса.
А вот для календаря это уже неверно — событие на 9 утра по Берлину должно превратиться в 10 утра по Москве, где бы я ни находился.
Из-за всего этого возникает концепция «местного», или «символического» времени. Скажем, вам надо посчитать, какое число будет через пять дней после 5 июня. Можно взять 5 июня, какой-то часовой пояс (например, текущий), перевести в Unix timestamp, прибавить 5 * 24 * 3600 * 1000, и перевести обратно в wall clock той же таймзоной и посмотреть на дату.
Но это бред — как мы видели, не в каждых сутках 24 часа, таймзону приходится брать с потолка, и вообще вопрос не об этом был. Как люди мы понимаем, что через пять дней после 5 июня будет 10 июня, где бы мы ни находились и сколько бы между ними реально часов не прошло. Поэтому такие вычисления лучше делать без Unix time вообще, а чисто на символическом календаре, в котором 5 и 10 июня не соответствуют какому-то конкретному моменту времени.
Но на этом сложности более-менее заканчиваются. Если хорошо понимать, о чем каждый раз идет речь — о конкретном _физическом_ моменте времени (unix time), о времени на часах в комнате (wall clock) или о символических вычислениях (даты, обычно, но и время тоже) — то почти всегда достаточно легко сделать то что нужно и получить правильный ответ. Главное не спутать одно с другим, потому что на словах все это — время, часы, а смысл сильно разный.
Вся информация об исторических переменах собирается в tz database. Это такой public domain файлик, где для каждого города написано, какой у него UTC offset, как и когда он переходит на летнее время и как это менялось с 1970-го года. Он используется для всех преобразований между wall clock и unix time.
Написано в нем примерно следущее:
# From Paul Eggert (2016-03-18):
# Asia/Novosibirsk covers:
# 54 RU-NVS Novosibirsk Oblast
# From Stepan Golosunov (2016-05-30):
# http://asozd2.duma.gov.ru/main.nsf/(Spravka)?OpenAgent&RN=1085784-6
# moves Novosibirsk oblast from UTC+6 to UTC+7.
# From Stepan Golosunov (2016-07-04):
# The law was signed yesterday and published today on
# http://publication.pravo.gov.ru/Document/View/0001201607040064
Zone Asia/Novosibirsk 5:31:40 - LMT 1919 Dec 14 6:00
6:00 - +06 1930 Jun 21
7:00 Russia +07/+08 1991 Mar 31 2:00s
6:00 Russia +06/+07 1992 Jan 19 2:00s
7:00 Russia +07/+08 1993 May 23 # say Shanks & P.
6:00 Russia +06/+07 2011 Mar 27 2:00s
7:00 - +07 2014 Oct 26 2:00s
6:00 - +06 2016 Jul 24 2:00s
7:00 - +07
TZ database изначально собирается волонтерами (да, блин!), затем компилируется и поставляется операционными системами и некоторыми платформами (в JDK, например, есть копия). Помню, как несколько лет страдал со своим Андроидом, на который не выходили обновления, а Новосибирск поменял часовой пояс и Asia/Novosibirsk показывало неправильное местное время.
Теперь про сложности. Главная сложность заключается в том, что время идет по Unix time и работать с ним легче тоже в Unix time, но люди хотят иметь дело с Wall clock time. И вот тут, ну, нужно быть внимательным, и все будет хорошо.
Пример — скольчо часов в сутках? 24, правильно? Кроме дней перевода часов, тогда там будет или 23, или 25, потому что для человека сутки — это интервал между 9 утра на часах сегодня и 9 утра на часах завтра, а сколько на самом деле времени прошло — не так уж важно. Важно, во сколько вставать на работу.
Или другая ситуация — я поставил будильник на завтра на 9 утра. И потом перелетел из Берлина в Москву. Во сколько должен зазвонить будильник? В 9 утра, но уже по Москве, да? То есть Unix timestamp будильника должен поменяться в момент смены часового пояса.
А вот для календаря это уже неверно — событие на 9 утра по Берлину должно превратиться в 10 утра по Москве, где бы я ни находился.
Из-за всего этого возникает концепция «местного», или «символического» времени. Скажем, вам надо посчитать, какое число будет через пять дней после 5 июня. Можно взять 5 июня, какой-то часовой пояс (например, текущий), перевести в Unix timestamp, прибавить 5 * 24 * 3600 * 1000, и перевести обратно в wall clock той же таймзоной и посмотреть на дату.
Но это бред — как мы видели, не в каждых сутках 24 часа, таймзону приходится брать с потолка, и вообще вопрос не об этом был. Как люди мы понимаем, что через пять дней после 5 июня будет 10 июня, где бы мы ни находились и сколько бы между ними реально часов не прошло. Поэтому такие вычисления лучше делать без Unix time вообще, а чисто на символическом календаре, в котором 5 и 10 июня не соответствуют какому-то конкретному моменту времени.
Но на этом сложности более-менее заканчиваются. Если хорошо понимать, о чем каждый раз идет речь — о конкретном _физическом_ моменте времени (unix time), о времени на часах в комнате (wall clock) или о символических вычислениях (даты, обычно, но и время тоже) — то почти всегда достаточно легко сделать то что нужно и получить правильный ответ. Главное не спутать одно с другим, потому что на словах все это — время, часы, а смысл сильно разный.
👍1
Forwarded from Стой под стрелой (Nikita Prokopov)
Работа со временем, часть 3/3
Тут уже будет про всякие курьезы. Во-первых, сильно не завидую составителям tz database, потому что им приходится иметь дело со сложностью человеческого мира и неточностью «обыденных» определений. Скажем, были города, в которых половина жила по одному времени, а половина — по другому. Какие-то города, например, Берлин, находились вообще в двух странах.
Другая штука — путешествие в прошлое. Как вы видели, Unix timestamp начинается с 1970-го, но можно ли продолжить его в прошлое? Немножко можно, насколько позволяет tz database, но там уже начинается неполнота данных о часовых поясах и прочий разброд. Если совсем сильно продолжать, то начинаются вопросы, скажем, переход между Юлианским календарем и Грегорианским был довольно долгим и хаотичным географически и зафиксирован не очень точно.
Сколько дней в феврале? 28-29, да? Часов в сутках? 23-25, как мы определили выше. А вот сколько секунд в часе? 3600, да? Не всегда 🙂 Про високосный год все знают, а как вам високосная секунда?
Но давайте по порядку. В 1972 запустили атомные часы, которые без остановки и прочего булшита отсчитывали по одной секунде каждую секунду 🙂 Их время называется International Atomic Time (TAI) и является, наверное, самой базовой величиной которая у нас есть (да, я говорил, что unix timestamp, но нет). С момента запуска они обогнали UTC на 37 секунд.
Далее есть UT1. Это время, основанное на вращении Земли, в предположении, что каждый новый год наступает ровно в 00:00:00 по UT1. Но! Штука в том, что вращение Земли, во-первых, замедляется, а во-вторых неравномерно и непредсказуемо (!! да, блин! Потому что по ней всякий хлам типа морей, магмы и материков болтается) и в итоге каждый год (по астрономическим наблюдениям вращения Земли) имеет слегка разную продолжительность в секундах.
UTC это компромисс для удобства обычных людей: это тот же TAI (т.е. атомные стабильные секунды), к которому иногда добавляют или отнимают по одной секунде в год, чтобы Новый год наступал как можно ближе к 00:00:00 по UT1 (астономическому).
Пока секунды только добавляли, обычно это делают как 23:59:60 31 декабря или 30 июня. Это происходит нерегулярно, основано на астрономических измерениях и никто заранее не может сказать, когда и сколько их в будущем будет добавлено. Последнюю добавляли в 2016-м.
Как это все переносится на Unix time? А никак 🙂 В Unix time такое понятие не заложено. Если число делится на 3600000, значит это граница часа. Удобно — но также и слегка неправда.
Что же делают компьютеры? Вариантов немного — можно либо повторить 23:59:59 два раза (перевести на секунду назад), либо заморозить часы, либо размазывать эту секунду тонким слоем на целые сутки (вроде Гугл этим хвастался, но не подскажу где).
Именно поэтому Unix time это очень удобная точка отсчета в практическом смысле, но немножко неправда до самого конца. Но на деле — скорее всего, о високосной секунде вам париться не придется. Правда в JVM был какой-то баг на эту тему (скорее всего, что-то про немонотонность часов), и я лично вроде как в 2012-м что-то там из-за этого у нас перезапускал.
Но это слишком редко, чтобы на самом деле имело смысл париться. А немонотонность часов — ну, из-за синхронизации времени они точно так же могут скакнуть назад, так что доверять нельзя никому.
Такие дела. Практически про работу со временем — как только понимашь, что происходит, сразу перестает быть сложно. Надеюсь, гайд вам чем-то поможет. Распространяйте, это может спасти чью-нибудь жизнь 🙂
Тут уже будет про всякие курьезы. Во-первых, сильно не завидую составителям tz database, потому что им приходится иметь дело со сложностью человеческого мира и неточностью «обыденных» определений. Скажем, были города, в которых половина жила по одному времени, а половина — по другому. Какие-то города, например, Берлин, находились вообще в двух странах.
Другая штука — путешествие в прошлое. Как вы видели, Unix timestamp начинается с 1970-го, но можно ли продолжить его в прошлое? Немножко можно, насколько позволяет tz database, но там уже начинается неполнота данных о часовых поясах и прочий разброд. Если совсем сильно продолжать, то начинаются вопросы, скажем, переход между Юлианским календарем и Грегорианским был довольно долгим и хаотичным географически и зафиксирован не очень точно.
Сколько дней в феврале? 28-29, да? Часов в сутках? 23-25, как мы определили выше. А вот сколько секунд в часе? 3600, да? Не всегда 🙂 Про високосный год все знают, а как вам високосная секунда?
Но давайте по порядку. В 1972 запустили атомные часы, которые без остановки и прочего булшита отсчитывали по одной секунде каждую секунду 🙂 Их время называется International Atomic Time (TAI) и является, наверное, самой базовой величиной которая у нас есть (да, я говорил, что unix timestamp, но нет). С момента запуска они обогнали UTC на 37 секунд.
Далее есть UT1. Это время, основанное на вращении Земли, в предположении, что каждый новый год наступает ровно в 00:00:00 по UT1. Но! Штука в том, что вращение Земли, во-первых, замедляется, а во-вторых неравномерно и непредсказуемо (!! да, блин! Потому что по ней всякий хлам типа морей, магмы и материков болтается) и в итоге каждый год (по астрономическим наблюдениям вращения Земли) имеет слегка разную продолжительность в секундах.
UTC это компромисс для удобства обычных людей: это тот же TAI (т.е. атомные стабильные секунды), к которому иногда добавляют или отнимают по одной секунде в год, чтобы Новый год наступал как можно ближе к 00:00:00 по UT1 (астономическому).
Пока секунды только добавляли, обычно это делают как 23:59:60 31 декабря или 30 июня. Это происходит нерегулярно, основано на астрономических измерениях и никто заранее не может сказать, когда и сколько их в будущем будет добавлено. Последнюю добавляли в 2016-м.
Как это все переносится на Unix time? А никак 🙂 В Unix time такое понятие не заложено. Если число делится на 3600000, значит это граница часа. Удобно — но также и слегка неправда.
Что же делают компьютеры? Вариантов немного — можно либо повторить 23:59:59 два раза (перевести на секунду назад), либо заморозить часы, либо размазывать эту секунду тонким слоем на целые сутки (вроде Гугл этим хвастался, но не подскажу где).
Именно поэтому Unix time это очень удобная точка отсчета в практическом смысле, но немножко неправда до самого конца. Но на деле — скорее всего, о високосной секунде вам париться не придется. Правда в JVM был какой-то баг на эту тему (скорее всего, что-то про немонотонность часов), и я лично вроде как в 2012-м что-то там из-за этого у нас перезапускал.
Но это слишком редко, чтобы на самом деле имело смысл париться. А немонотонность часов — ну, из-за синхронизации времени они точно так же могут скакнуть назад, так что доверять нельзя никому.
Такие дела. Практически про работу со временем — как только понимашь, что происходит, сразу перестает быть сложно. Надеюсь, гайд вам чем-то поможет. Распространяйте, это может спасти чью-нибудь жизнь 🙂
👍1
Forwarded from Android Broadcast
#compose
Fixing Font Padding in Compose Text (11 мин)
Статья про улушчения работы с отступами в шрифтах в Compose 1.2, что направлено на реализацию дизайна из Figma и Sketch легче. Новые изменения в 1.2 не применяются по умолчанию, а вот в 1.3 будут стандартом.
Fixing Font Padding in Compose Text (11 мин)
Статья про улушчения работы с отступами в шрифтах в Compose 1.2, что направлено на реализацию дизайна из Figma и Sketch легче. Новые изменения в 1.2 не применяются по умолчанию, а вот в 1.3 будут стандартом.
👍1
Forwarded from Android Live 🤖
Navigation в Jetpack Compose
#compose
Использование правильно настроенной навигации в приложении — очень важная вещь, которая в будущем, при росте проекта, спасает от многих проблем.
И если в привычной Android-разработке уже существует несколько различных подходов, то с появлением Jetpack Compose приходится искать другие варианты.
Тут автор очень круто сравнивает текущие подходы к навигации и пытается подобрать идеальный вариант. В сравнение попали следующие библиотеки:
👉 Navigation-compose;
👉 Compose-navigation-reimagined;
👉 Voyager;
👉 Navigator-compose;
👉 Simple-stack-compose-integration;
У каждой из них он рассмотрел плюсы и минусы, в некоторых указал, как эти минусы разрешить.
🏆 В итоге, по мнению автора, победила библиотека Voyager, которая вот-вот выйдет в релизную версию.
#compose
Использование правильно настроенной навигации в приложении — очень важная вещь, которая в будущем, при росте проекта, спасает от многих проблем.
И если в привычной Android-разработке уже существует несколько различных подходов, то с появлением Jetpack Compose приходится искать другие варианты.
Тут автор очень круто сравнивает текущие подходы к навигации и пытается подобрать идеальный вариант. В сравнение попали следующие библиотеки:
👉 Navigation-compose;
👉 Compose-navigation-reimagined;
👉 Voyager;
👉 Navigator-compose;
👉 Simple-stack-compose-integration;
У каждой из них он рассмотрел плюсы и минусы, в некоторых указал, как эти минусы разрешить.
🏆 В итоге, по мнению автора, победила библиотека Voyager, которая вот-вот выйдет в релизную версию.
👍1
Forwarded from Android Broadcast
#compose
Creating a graph in Jetpack Compose (4 мин)
Автор рассказывает как реализовать отрисовку графика по заданным точкам в Jetpack Compose.
Creating a graph in Jetpack Compose (4 мин)
Автор рассказывает как реализовать отрисовку графика по заданным точкам в Jetpack Compose.
👍1
Forwarded from Android Broadcast
#compose
Custom Layouts with jetpack Compose (Deep Dive)
Разбор как реализовать собcтвенный layout в Compose. Такие задачи появляются не так часто, но в Jetpack Compose сделать это проще чем в View
Custom Layouts with jetpack Compose (Deep Dive)
Разбор как реализовать собcтвенный layout в Compose. Такие задачи появляются не так часто, но в Jetpack Compose сделать это проще чем в View
👍1
Forwarded from Mobile AppSec World (Yury Shabalin)
Инструмент для загрузки приложений из систем дистрибуции и магазинов приложений
Всем привет!
Очень часто возникает необходимость загрузить что-то из Google Play или Apple Appstore.
А бывает и такое, что нужно автоматизировать загрузку промежуточных версий из какого-то Firebase, например или AppCenter.
Мы тоже сталкиваемся постоянно с этими задачами, поэтому решили их автоматизировать и оформить в виде репо на гитхаб, а также питоновского пакета и докер-образа :)
Вообще, это наш cli для автоматического сканирования приложений, но если вам нужно просто приложение, достаточно указать флаг —download_only
И если интересно почитать, как мы это разрабатывали - прошу на Хабр!
Пользуйтесь на здоровье :)
#habr #integratios #firebase #googleplay #appstore
Всем привет!
Очень часто возникает необходимость загрузить что-то из Google Play или Apple Appstore.
А бывает и такое, что нужно автоматизировать загрузку промежуточных версий из какого-то Firebase, например или AppCenter.
Мы тоже сталкиваемся постоянно с этими задачами, поэтому решили их автоматизировать и оформить в виде репо на гитхаб, а также питоновского пакета и докер-образа :)
Вообще, это наш cli для автоматического сканирования приложений, но если вам нужно просто приложение, достаточно указать флаг —download_only
И если интересно почитать, как мы это разрабатывали - прошу на Хабр!
Пользуйтесь на здоровье :)
#habr #integratios #firebase #googleplay #appstore
Хабр
Один в поле не воин. Полезные интеграции для инструментов анализа мобильных приложений
Привет, Хабр! Как вы уже наверняка помните, меня зовут Юрий Шабалин и я занимаюсь разработкой динамического анализатора мобильных приложений Стингрей. Сегодня мне хотелось бы затронуть тему интеграций...
👍1
Forwarded from Mobile AppSec World (Yury Shabalin)
Переход на 64-битную архитектуру в Android
Как мы знаем, ещё в далеком 2017 (блин, 5 лет прошло уже 😰), Apple полностью отказалась от поддержки 32-битных приложений и этой архитектуры как таковой. Google же, в свою очередь нет-нет, да и посматривал на своего оппонента и вот, долгожданные новости. В ближайшее время компания планирует отказаться от поддержки x86!
Уже сейчас, в новых линейках процессоров из 8 доступных ядер для выполнения 32-битных операций будут доступны только 3 ядра. А к следующему году планируется полностью исключить их выполнение.
Android давно к этому готовился и вот, Android 12 первая версия операционной системы, которая поддерживает выполнение только 64-битных приложений! Небольшая выдержка из статьи:
The latest revision to the CDD explicitly requires device makers to build 32-bit Android for low RAM devices. The goal is to reduce the types of Android builds to two — Android 32-bit only and Android 64-bit only — to reduce fragmentation until 32-bit support can be fully deprecated years from now.
Больше подробностей в статье. За что мне нравится этот ресурс - это огромное количество ссылок в процессе повествования, по которым интересно походить и прочитать интересующую информацию.
#android #fragmentation #x86 #x64
Как мы знаем, ещё в далеком 2017 (блин, 5 лет прошло уже 😰), Apple полностью отказалась от поддержки 32-битных приложений и этой архитектуры как таковой. Google же, в свою очередь нет-нет, да и посматривал на своего оппонента и вот, долгожданные новости. В ближайшее время компания планирует отказаться от поддержки x86!
Уже сейчас, в новых линейках процессоров из 8 доступных ядер для выполнения 32-битных операций будут доступны только 3 ядра. А к следующему году планируется полностью исключить их выполнение.
Android давно к этому готовился и вот, Android 12 первая версия операционной системы, которая поддерживает выполнение только 64-битных приложений! Небольшая выдержка из статьи:
The latest revision to the CDD explicitly requires device makers to build 32-bit Android for low RAM devices. The goal is to reduce the types of Android builds to two — Android 32-bit only and Android 64-bit only — to reduce fragmentation until 32-bit support can be fully deprecated years from now.
Больше подробностей в статье. За что мне нравится этот ресурс - это огромное количество ссылок в процессе повествования, по которым интересно походить и прочитать интересующую информацию.
#android #fragmentation #x86 #x64
www.esper.io
Android 12 ultimate compatibility guide — all the changes for enterprise and device makers
Ready to build Android 12? If you plan to include GMS in your software, you'll need to meet Android 12's compatibility requirements.
👍1
Forwarded from Mobile Compose
#Video #Youtube #JetpackCompose
Positional memoization, или Как работает одна из главных концепций Jetpack Compose
На YouTube канале Mobius начали публиковать первые записи докладов с прошедшей конференции, среди которых появился и мой, в котором я рассказываю о том, как устроена одна из ключевых концепций Jetpack Compose — позиционная мемоизация. Приятного просмотра!
Positional memoization, или Как работает одна из главных концепций Jetpack Compose
На YouTube канале Mobius начали публиковать первые записи докладов с прошедшей конференции, среди которых появился и мой, в котором я рассказываю о том, как устроена одна из ключевых концепций Jetpack Compose — позиционная мемоизация. Приятного просмотра!
YouTube
Дмитрий Григорьев — Positional memoization. Как работает одна из главных концепций Jetpack Compose
Подробнее о конференции Mobius: https://jrg.su/ojGU3B
— —
Дмитрий Григорьев – Android-разработчик, интересуется декларативной и кроссплатформенной разработкой. Пишет и рассказывает про Jetpack Compose в своем Telegram — https://news.1rj.ru/str/mobile_compose, и на YouTube…
— —
Дмитрий Григорьев – Android-разработчик, интересуется декларативной и кроссплатформенной разработкой. Пишет и рассказывает про Jetpack Compose в своем Telegram — https://news.1rj.ru/str/mobile_compose, и на YouTube…
👍1
Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
#compose #animation
Orbitary - Compose библиотека для создания анимация с переходом элементов (transition with shared element)
Orbitary - Compose библиотека для создания анимация с переходом элементов (transition with shared element)
👍1
Forwarded from Android Broadcast (Кирилл Розов)
#performance
Performance Considerations for Memory Leaks: An Android Cookbook (6 мин)
Неплохая статья с примерами основных причин утечек памяти и как с ними бороться. Тем кто не знаком с этим рекомендую пройтись, тем кто в курсе - вспомнить лишний раз про возможные причины:
👉 Статические ссылки
👉 Взаимодействие с UI не из UI слоя/Android классов
👉 Хранение Bitmap
👉 Строгие ссылки на объекты с жизненным циклом
👉 Вложенные нестатические классы
Performance Considerations for Memory Leaks: An Android Cookbook (6 мин)
Неплохая статья с примерами основных причин утечек памяти и как с ними бороться. Тем кто не знаком с этим рекомендую пройтись, тем кто в курсе - вспомнить лишний раз про возможные причины:
👉 Статические ссылки
👉 Взаимодействие с UI не из UI слоя/Android классов
👉 Хранение Bitmap
👉 Строгие ссылки на объекты с жизненным циклом
👉 Вложенные нестатические классы
👍2
Forwarded from Android Good Reads (Egor Tolstoy)
Команда Касперского делится своим опытом использования Baseline profiles для оптимизации перфоманса. Помимо итоговых результатов, статья дает хороший обзор принципов работы этих профилей.
Хабр
Улучшаем производительность android-приложения с помощью Baseline profiles
Производительность важна для формирования положительного пользовательского опыта использования приложения, поэтому разработчики стремятся ускорить работу своих программ. Для приложений в области...
👍1
Forwarded from Mobile AppSec World (Yury Shabalin)
Как написать собственный эмулятор
Огненная статья по написанию самого худшего эмулятора Android в мире (да, она именно так и называется).
Статья очень информативная и интересная, покрывает широкий спектр различных тем, ведь чтобы написать эмулятор, нужно абсолютно точно понимать, как работает операционная система, которую мы собираемся эмулировать. В данном случае в статье покрыты темы:
• Базовая архитектура операционной системы Android
• Что такое системные вызовы
• Как обрабатываются системные вызовы в AArch64
• Как работает сопоставление памяти
• Как операционная система загружает ELF в память и запускает его
• Как эмулировать поведение операционной системы для загрузки ELF в память и его запуска
Советую всем неравнодушным к Android!
#android #emulator #rust
Огненная статья по написанию самого худшего эмулятора Android в мире (да, она именно так и называется).
Статья очень информативная и интересная, покрывает широкий спектр различных тем, ведь чтобы написать эмулятор, нужно абсолютно точно понимать, как работает операционная система, которую мы собираемся эмулировать. В данном случае в статье покрыты темы:
• Базовая архитектура операционной системы Android
• Что такое системные вызовы
• Как обрабатываются системные вызовы в AArch64
• Как работает сопоставление памяти
• Как операционная система загружает ELF в память и запускает его
• Как эмулировать поведение операционной системы для загрузки ELF в память и его запуска
Советую всем неравнодушным к Android!
#android #emulator #rust
fuzzing.science
Rudroid - Writing the World's worst Android Emulator in Rust 🦀 | fuzzing.science
Introduction
👍1
Forwarded from Mobile Compose
#Article #Medium
Introducing Jetpack Compose’s New Layout: “LookaheadLayout”
Вместе с появлением новой альфа версии Jetpack Compose (1.3.0-alpha01) API фреймворка пополнился новым и уже горячо обсуждаемым layout-ом — LookaheadLayout. Если кратко, это первый layout в Compose, способный отслеживать кадры используемой анимации, при помощи чего, к примеру, легко можно реализовать анимацию типа “Shared Element Transition”. Подробнее о том, как работает этот компонент — в сегодняшней статье.
Introducing Jetpack Compose’s New Layout: “LookaheadLayout”
Вместе с появлением новой альфа версии Jetpack Compose (1.3.0-alpha01) API фреймворка пополнился новым и уже горячо обсуждаемым layout-ом — LookaheadLayout. Если кратко, это первый layout в Compose, способный отслеживать кадры используемой анимации, при помощи чего, к примеру, легко можно реализовать анимацию типа “Shared Element Transition”. Подробнее о том, как работает этот компонент — в сегодняшней статье.
👍2
Forwarded from StartAndroid
В Android Studio Electric Eel была добавлена интеграция с Firebase Crashlytics.
Теперь креши можно смотреть прямо в студии. Кроме того, студия будет подсвечивать строки кода, которые приводят к крешам.
#androidstudio #firebase #crashlytics
https://developer.android.com/studio/preview/features#aqi
Теперь креши можно смотреть прямо в студии. Кроме того, студия будет подсвечивать строки кода, которые приводят к крешам.
#androidstudio #firebase #crashlytics
https://developer.android.com/studio/preview/features#aqi
👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Разбор всех этапов совершения сетевого вызова, способов их инструментации, сбора метрик перфоманса и различных способов оптимизации времени совершения запроса. Кейс интересен тем, что для авторов производительность сетевых запросов особенно важна – они делают приложение, основные пользователи которого живут в сельской местности в Индии со слабым сетевым соединением.
Medium
How OkCredit Android App boosted Network Performance by 30%
By instrumenting network calls on production and following best practices, we can make huge improvements to an app’s network performance…
👍1
Forwarded from Mobile Developer (Алексей Гладков)
Кстати, если кто-то хочет начать делать проект на КММ, но не хочет заморачиваться с собственными решениями, то есть репозиторий, где собраны почти все либы, которые работают для КММ
https://github.com/terrakok/kmm-awesome
https://github.com/terrakok/kmm-awesome
GitHub
GitHub - terrakok/kmp-awesome: An awesome list that curates the best Kotlin Multiplatform libraries, tools and more.
An awesome list that curates the best Kotlin Multiplatform libraries, tools and more. - GitHub - terrakok/kmp-awesome: An awesome list that curates the best Kotlin Multiplatform libraries, tools a...
👍3
Forwarded from Android Broadcast (Кирилл Розов)
This media is not supported in your browser
VIEW IN TELEGRAM
#compose
Compose Image on Steroids - набор Compose API для расширения ваших возможностей по работе с изображениями в новомодном UI фреймворке от Google
Compose Image on Steroids - набор Compose API для расширения ваших возможностей по работе с изображениями в новомодном UI фреймворке от Google
👍1
Forwarded from Android Good Reads (Egor Tolstoy)
Еще один скриншот нового легкого UI IntelliJ, который появится и в Android Studio.
👍3👎2
Forwarded from Mobile AppSec World (Yury Shabalin)
Как установить более старую версию приложения поверх нового и не потерять данные в Android
По умолчанию, Android-система не позволяет устанавливать более старую версию поверх новой для одного приложения. В целом, это правильный подход, так и должно быть, потому что внутренние базы и структуры данных уже могут быть изменены под новую версию и старая может работать некорректно.
Но, иногда такая необходимость возникает. И тут на помощь нам придет статья, в которой описано несколько способов как это совершенно легально провернуть и оставить данные на месте.
Это может быть крайне полезно!
#android #downgrade
По умолчанию, Android-система не позволяет устанавливать более старую версию поверх новой для одного приложения. В целом, это правильный подход, так и должно быть, потому что внутренние базы и структуры данных уже могут быть изменены под новую версию и старая может работать некорректно.
Но, иногда такая необходимость возникает. И тут на помощь нам придет статья, в которой описано несколько способов как это совершенно легально провернуть и оставить данные на месте.
Это может быть крайне полезно!
#android #downgrade
🔥1