Fragment
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its
Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.
Для создания и управления фрагментами используется FragmentManager.
Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.
Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.
#Fragment
@android_its
❤4👍1
Фоновое изображение в Layout
Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background="@drawable/earth". Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.
Читать дальше
@android_its
Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background="@drawable/earth". Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.
Читать дальше
@android_its
👍3🥰1
Как собирается Android-приложение?
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
Подпись приложения выполняется утилитой apksigner.
До Build Tools v24.0.3 подпись APK выполнялась утилитой
#Build
@android_its
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk fileДо Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner, которая была создана для подписи .jar-файлов, и zipalign применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file#Build
@android_its
Android Developers
AAPT2 | Android Studio | Android Developers
👍8
Опишите структуру APK-файла
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
•
• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
•
•
•
•
•
#Build
APK (Android Package) – это формат файла, который используется для распространения и установки мобильных приложений в операционной системе Android.
APK представляет собой архив, который содержит следующие файлы:
• Папка
META-INF:•
MANIFEST.MF – манифест-файл, который содержит SHA-хэши всех файлов в APK-пакете;• Сертификат приложения;
• Файлы с дополнительной метаинформацией.
•
lib – папка, содержащая скомпилированный код платформенно-зависимых библиотек. lib содержит подкаталоги для соответствующих платформ: armeabi, armeabi-v7a, arm64-v8a, x86, x86_64, mips.•
res – папка, в которой лежат андроид-ресурсы в Binary XML формате.•
assets – папка, содержащая ассеты приложения.•
AndroidManifest.xml – манифест Андроид-приложения. Этот файл хранится в скомпилированном Binary XML формате.•
classes.dex – один или несколько файлов, которые представляют собой код приложения, скомпилированный в Dalvik-байткод.•
resources.arsc – файл, в котором хранится таблица маппинга id ресурсов в соответствующие файлы.#Build
👍8
Как собирается Android-приложение?
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
Подпись приложения выполняется утилитой apksigner.
До Build Tools v24.0.3 подпись APK выполнялась утилитой
#Build
@android_its
Сборка Android-приложения состоит из следующих шагов:
1. Компилирование Java/Kotin-исходников.
Компилятор создает .class-файлы, содержащие java-байткод.
.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files2. Конвертация Java-байткода в Dalvik-байткод.
Для конвертации используется утилита
dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод..class, .jar, .aar -> dx -> classes.dex3. Сборка ресурсов и .dex-файлов в APK.
Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).
classes.dex, resource files -> aapt -> .apk file4. Оптимизация и подпись .apk-файла.
Для оптимизации APK используется утилита zipalign. APK является zip-архивом.
zipalign выравнивает файлы в архиве определенным образом, что уменьшает использование RAM, при работе приложения.Подпись приложения выполняется утилитой apksigner.
.apk file -> zipalign -> apksigner -> signed .apk fileДо Build Tools v24.0.3 подпись APK выполнялась утилитой
jarsigner, которая была создана для подписи .jar-файлов, и zipalign применялся к уже подписанному APK..apk file -> jarsigner -> zipalign -> signed .apk file#Build
@android_its
👍5
В чем разница между jar и aar?
JAR – Java Archive. Содержит файлы классов, java-ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. JAR может использоваться как в Android-приложении, так и в приложении на чистой Java.
AAR – Android Archive. Так же как и JAR является zip-архивом, но может использоваться только в Android-приложении. AAR содержит скомпилированный исходный код в файле
#Build
jar и aar являются расширениями файлов-архивов, которые содержат части программ и используются в качестве библиотек в Android-приложениях.JAR – Java Archive. Содержит файлы классов, java-ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. JAR может использоваться как в Android-приложении, так и в приложении на чистой Java.
AAR – Android Archive. Так же как и JAR является zip-архивом, но может использоваться только в Android-приложении. AAR содержит скомпилированный исходный код в файле
classes.jar, Android-ресурсы, AndroidManifest, и другие файлы, входящие в состав APK.#Build
👍6
Что такое Proguard?
Proguard – это инструмент обфускации и оптимизации Java-кода. Proguard может использоваться как на чистом Java-, так и на Android-приложении, но в мире Андроида Proguard популярнее по двум причинам.
Во-первых, Proguard удаляет неиспользуемые классы и методы из уже скомпилированного приложения. Это позволяло решать проблему 64К методов до появления MultiDex.
Во-вторых, Java- и Dalvik-байткод легко декомпилировать. Для серверного Java-приложения это не проблема, а вот к байткоду приложения под Android доступ имеет любой пользователь.
Proguard обфусцирует код, что усложняет задачу декомпиляции.
#Build
@android_its
Proguard – это инструмент обфускации и оптимизации Java-кода. Proguard может использоваться как на чистом Java-, так и на Android-приложении, но в мире Андроида Proguard популярнее по двум причинам.
Во-первых, Proguard удаляет неиспользуемые классы и методы из уже скомпилированного приложения. Это позволяло решать проблему 64К методов до появления MultiDex.
Во-вторых, Java- и Dalvik-байткод легко декомпилировать. Для серверного Java-приложения это не проблема, а вот к байткоду приложения под Android доступ имеет любой пользователь.
Proguard обфусцирует код, что усложняет задачу декомпиляции.
#Build
@android_its
👍7
Как Proguard удаляет неиспользуемый код?
Одна из функций Proguard – это удаление неиспользуемого кода программы.
При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.
Proguard запускается после компиляции исходного кода и получения
Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.
Входные точки программы задаются в файлах конфигурации правилом
Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей
Для сохранения таких компонентов нужно добавить правила
После сборки приложения с Proguard, генерируется файл
#Build
@android_its
Одна из функций Proguard – это удаление неиспользуемого кода программы.
При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.
Proguard запускается после компиляции исходного кода и получения
.class файлов, но до конвертации в dex.Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.
Входные точки программы задаются в файлах конфигурации правилом
-keep. Android Gradle Plugin генерирует дефолтный файл c правилами для сохранения базовых компонент и специфичных для андроида классов, таких как View.Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей
ClassNotFoundException при использовании Proguard.Для сохранения таких компонентов нужно добавить правила
-keep в файл конфигурации.После сборки приложения с Proguard, генерируется файл
usage.txt, в котором хранится список всех удаленных компонентов.#Build
@android_its
👍6
Как уменьшить APK?
• Подключить к своему приложению Proguard;
• Избавиться от неиспользуемых ресурсов с помощью атрибута
• Избавиться от ресурсов сторонних библиотек, которые не подходят под вашу локаль, с помощью атрибута
• Сконвертировать все картинки в формат webp или VectorDrawable.
Подробнее об этих советах можно почитать в статье.
#Build
• Подключить к своему приложению Proguard;
• Избавиться от неиспользуемых ресурсов с помощью атрибута
shrinkResources;• Избавиться от ресурсов сторонних библиотек, которые не подходят под вашу локаль, с помощью атрибута
resConfigs;• Сконвертировать все картинки в формат webp или VectorDrawable.
Подробнее об этих советах можно почитать в статье.
#Build
👍7🔥1
Как отладить приложение на девайсе?
Для удаленной отладки используется технология Android Debug Bridge. Она включает три компонента:
• adbd – демон на стороне девайса, который принимает и выполняет команды.
• ADB Сервер – демон на стороне компьютера, с которого ведется отладка. Принимает запросы от отладочных клиентов на TCP порт 5037. Служит единой точкой доступа к удаленной отладке. Запускается при первом старте adb клиента.
• Клиенты – различные приложения, которые пользуются инструментами отладки. Самое простое – консольный клиент
Сервер передает команды от клиентов в adbd на эмуляторах через TCP порты, либо в adbd на реальных девайсах через USB или WiFi.
Помимо самого дебаггера для отладки применяются дополнительные инструменты, такие как Android profiler и Device File Explorer. Для исследования проблем полезны баг репорты.
Если необходимо отладить web-приложение, используется специальная фича Chrome DevTools.
#Tools
@android_its
Для удаленной отладки используется технология Android Debug Bridge. Она включает три компонента:
• adbd – демон на стороне девайса, который принимает и выполняет команды.
• ADB Сервер – демон на стороне компьютера, с которого ведется отладка. Принимает запросы от отладочных клиентов на TCP порт 5037. Служит единой точкой доступа к удаленной отладке. Запускается при первом старте adb клиента.
• Клиенты – различные приложения, которые пользуются инструментами отладки. Самое простое – консольный клиент
adb из SDK. Более сложные клиенты могут использовать adb внутри, либо самостоятельно подключаться к порту ADB сервера.Сервер передает команды от клиентов в adbd на эмуляторах через TCP порты, либо в adbd на реальных девайсах через USB или WiFi.
Помимо самого дебаггера для отладки применяются дополнительные инструменты, такие как Android profiler и Device File Explorer. Для исследования проблем полезны баг репорты.
Если необходимо отладить web-приложение, используется специальная фича Chrome DevTools.
#Tools
@android_its
Android Developers
Profile your app performance | Android Studio | Android Developers
Learn about profiling your app in Android Studio.
👍5🔥1
Какие классы служат для доступа к сенсорам?
Таких классов четыре:
• SensorManager – точка входа для работы с сенсорами и listener-ами их событий. Системный сервис, получаемый по имени
• Sensor – представляет отдельно взятый сенсор. Дает различную метаинформацию (энергопотребление, точность, производителя, и т.д.);
• SensorEventListener – интерфейс для реализации обработчиков событий, приходящих из сенсоров. В нём реализуется логика обработки входящих данных;
• SensorEvent – отдельное событие из сенсора: данные и точность их измерения.
Для подробного изучения возможностей сенсоров на официальном сайте есть полный гайд.
#Hardware
@android_its
Таких классов четыре:
• SensorManager – точка входа для работы с сенсорами и listener-ами их событий. Системный сервис, получаемый по имени
Context.SENSOR_SERVICE;• Sensor – представляет отдельно взятый сенсор. Дает различную метаинформацию (энергопотребление, точность, производителя, и т.д.);
• SensorEventListener – интерфейс для реализации обработчиков событий, приходящих из сенсоров. В нём реализуется логика обработки входящих данных;
• SensorEvent – отдельное событие из сенсора: данные и точность их измерения.
Для подробного изучения возможностей сенсоров на официальном сайте есть полный гайд.
#Hardware
@android_its
👍3🔥2
orhanobut/logger
Наглядный и удобный логгер для использования в Android-проектах. Фуннкции:
https://github.com/orhanobut/logger
@android_its
Наглядный и удобный логгер для использования в Android-проектах. Фуннкции:
Logger.d("debug");
Logger.e("error");
Logger.w("warning");
Logger.v("verbose");
Logger.i("information");https://github.com/orhanobut/logger
@android_its
❤6👍2💩1
Как передать параметры в конструктор фрагмента?
Параметры передаются в конструктор Fragment-а через Bundle, с помощью метода
Распространенная ошибка передавать данные через кастомный конструктор. Использовать не-дефолтные конструкторы фрагментов не рекомендуется, потому что фрагмент может быть уничтожен и пересоздан вследствие изменений конфигурации (например при повороте экрана).
Использование пары методов
#Fragment
@android_its
Параметры передаются в конструктор Fragment-а через Bundle, с помощью метода
Fragment.setArgument(Bundle). Переданный бандл может быть получен через Fragment.getArguments() в соответствующем методе жизненного цикла фрагмента.Распространенная ошибка передавать данные через кастомный конструктор. Использовать не-дефолтные конструкторы фрагментов не рекомендуется, потому что фрагмент может быть уничтожен и пересоздан вследствие изменений конфигурации (например при повороте экрана).
Использование пары методов
setArguments/getArguments гарантирует, что при пересоздании Bundle будет сериализован/десериализован, и данные восстановятся.#Fragment
@android_its
👍6❤1
🔥 Как устроена операционная система Android
💣 Заглянем внутрь этой ОС на открытом уроке 21 июня в 20:00. Мы разберем ее устройство с точки зрения архитектуры, что лежит в ее основе, как она загружается, как приложения общаются между собой и другие интересные детали.
📌 На вебинаре выступит Даниил Попов, разработчик эстонской компании Bolt Technology OÜ. Занятие пройдет в рамках онлайн-курса «Android Developer. Professional» от OTUS и позволит протестировать процесс обучения.
🦾 Программа рассчитана на разработчиков с опытом создания Android-приложений.
️️✅ Пройдите вступительный тест, чтобы зарегистрироваться
💣 Заглянем внутрь этой ОС на открытом уроке 21 июня в 20:00. Мы разберем ее устройство с точки зрения архитектуры, что лежит в ее основе, как она загружается, как приложения общаются между собой и другие интересные детали.
📌 На вебинаре выступит Даниил Попов, разработчик эстонской компании Bolt Technology OÜ. Занятие пройдет в рамках онлайн-курса «Android Developer. Professional» от OTUS и позволит протестировать процесс обучения.
🦾 Программа рассчитана на разработчиков с опытом создания Android-приложений.
️️✅ Пройдите вступительный тест, чтобы зарегистрироваться
👍4
Какова структура Android-проекта?
В проекте обычно присутствуют следующие файлы и директории:
•
•
•
• Файл
•
•
•
•
•
•
•
•
•
•
#System
@android_its
В проекте обычно присутствуют следующие файлы и директории:
•
AndroidManifest.xml – определение компонентов и требуемых возможностей девайса для приложения.•
build.gradle – файлы конфигурации сборки для всего приложения и отдельных модулей.•
src – исходный код классов и ресурсы проекта.• Файл
.R – сгенерированный на этапе компиляции перечень всех ресурсов проекта.•
assets – файлы, которые должны попасть в .apk как есть, без изменений.•
res/drawable – директория для картинок (drawable-объектов).•
res/layout – директория для файлов которые определяют UI приложения.•
res/values – директория для различных XML-файлов с простыми ресурсами, такими как строки, цвета и числа. •
res/mipmap – иконки для launcher-а разных разрешений.•
res/menu – XML с определениями разных меню.•
res/font – шрифты.•
res/xml – XML файлы, доступные через Resources.getXML().•
res/raw – различные файлы, доступные в виде потоков данных через Resources.openRawResource().•
res/anim, res/animator – анимации.#System
@android_its
👍11🔥2
Назовите три основных применения интентов
1. Запустить активити.
2. Запустить сервис. Можно запустить сервис для выполнения единичной операции, передав
3. Доставить броадкаст. Для отправки броадкаст-ивента в другие приложения интент передается в
#Intent
1. Запустить активити.
Intent передается в метод startActivity() явно, либо разрешается с помощью механизма Intent Resolution.2. Запустить сервис. Можно запустить сервис для выполнения единичной операции, передав
Intent в startService().3. Доставить броадкаст. Для отправки броадкаст-ивента в другие приложения интент передается в
sendBroadcast(), sendOrderedBroadcast(), или sendStickyBroadcast().#Intent
👍7
Репозиторий, который содержит много ссылок по разным темам для Android разработчиков.
https://github.com/ImangazalievM/android-developer-reference
@android_its
https://github.com/ImangazalievM/android-developer-reference
@android_its
GitHub
GitHub - ImangazalievM/android-developer-reference: 🔥 A curated list of awesome Android articles sorted by topic.
🔥 A curated list of awesome Android articles sorted by topic. - ImangazalievM/android-developer-reference
👍6
Назовите два способа очистить back stack при создании Activity
Флаг интента
Другой вариант –
#Intent
#Activity
@android_its
Флаг интента
FLAG_ACTIVITY_CLEAR_TASK используется для того, чтобы очистить все активити таска. Activity, запущенная таким интентом становится новым корнем пустого бэкстека. Этот флаг обязан быть использованным вместе с FLAG_ACTIVITY_NEW_TASK.Другой вариант –
FLAG_ACTIVITY_CLEAR_TOP. Разница в том, что если этот флаг задан, а в таск листе существует старый экземпляр данной активити, все другие активити будут удалены, а корнем станет тот старый экземпляр. Использовать при этом FLAG_ACTIVITY_NEW_TASK не обязательно, но рекомендуется.#Intent
#Activity
@android_its
👍6
СОБЕСЕДОВАНИЕ ПО ANDROID. 250+ ВОПРОСОВ ДЛЯ JUNIOR, MIDDLE, SENIOR
https://itvdn.com/ru/blog/article/250-about-android
@android_its
https://itvdn.com/ru/blog/article/250-about-android
@android_its
ITVDN
Собеседование по Android. 250+ вопросов для Junior, Middle, Senior
Если вы готовитесь к собеседованию по Android — или проходить, или проводить — возможно, этот перечень вопросов пригодится вам. Редакция DOU поинтересовалась у разработчиков, проводящих технические интервью в компании в Украине, о чем они спрашивают кандидатов.
👍4🔥1
🔥 Создайте свою первую аркадную игру на Flutter 3! 🔥
📱 В новую версию Flutter 3.0 добавили официальную поддержку игровых движков Flare и SpriteWidget и набор инструментов CasualGamingKit.
🚀 На открытом уроке 12 июля в 20:00 мск мы изучим возможности Flutter для создания кроссплатформенных игр для мобильных устройств, веб и настольных компьютеров и создадим простую аркадную игру от начала и до подготовки к публикации в магазинах приложений.
💻 Не упустите возможность оценить материалы онлайн-курса «Flutter Mobile Developer» OTUS и познакомиться с преподавателем Дмитрием Золотовым, Flutter-разработчиком в Яндексе.
👉 Пройдите вступительный тест для регистрации на вебинар
📱 В новую версию Flutter 3.0 добавили официальную поддержку игровых движков Flare и SpriteWidget и набор инструментов CasualGamingKit.
🚀 На открытом уроке 12 июля в 20:00 мск мы изучим возможности Flutter для создания кроссплатформенных игр для мобильных устройств, веб и настольных компьютеров и создадим простую аркадную игру от начала и до подготовки к публикации в магазинах приложений.
💻 Не упустите возможность оценить материалы онлайн-курса «Flutter Mobile Developer» OTUS и познакомиться с преподавателем Дмитрием Золотовым, Flutter-разработчиком в Яндексе.
👉 Пройдите вступительный тест для регистрации на вебинар