TGViewer
Channel Public Channel
Android разработка

Android разработка

@android_its

все о Android разработке

@itchannels_telegram - 🔥 лучшие it каналы

@ai_machinelearning_big_data -ML

@ArtificialIntelligencedl -AI

@datascienceiot - ml 📚

@pythonlbooks -📚books
Subscribers
4.88K
Photos
476
Videos
26
Links
554

Showing posts older than #36 · Back to latest

Older Posts 20 shown
Post #35 993
Post #34 634
Назовите три основных применения интентов

1. Запустить активити. Intent передается в метод startActivity() явно, либо разрешается с помощью механизма Intent Resolution.

2. Запустить сервис. Можно запустить сервис для выполнения единичной операции, передав Intent в startService().

3. Доставить броадкаст. Для отправки броадкаст-ивента в другие приложения интент передается в sendBroadcast(), sendOrderedBroadcast(), или sendStickyBroadcast().

#Intent
  • 👍 7
Post #33 659
Какова структура Android-проекта?

В проекте обычно присутствуют следующие файлы и директории:

• 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
Post #31 572
Как передать параметры в конструктор фрагмента?

Параметры передаются в конструктор Fragment-а через Bundle, с помощью метода Fragment.setArgument(Bundle). Переданный бандл может быть получен через Fragment.getArguments() в соответствующем методе жизненного цикла фрагмента.

Распространенная ошибка передавать данные через кастомный конструктор. Использовать не-дефолтные конструкторы фрагментов не рекомендуется, потому что фрагмент может быть уничтожен и пересоздан вследствие изменений конфигурации (например при повороте экрана).

Использование пары методов setArguments/getArguments гарантирует, что при пересоздании Bundle будет сериализован/десериализован, и данные восстановятся.

#Fragment

@android_its
  • 👍 6
  • ❤ 1
Post #30 2.49K
orhanobut/logger

Наглядный и удобный логгер для использования в 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
Post #29 685
Какие классы служат для доступа к сенсорам?

Таких классов четыре:

• SensorManager – точка входа для работы с сенсорами и listener-ами их событий. Системный сервис, получаемый по имени Context.SENSOR_SERVICE;

• Sensor – представляет отдельно взятый сенсор. Дает различную метаинформацию (энергопотребление, точность, производителя, и т.д.);

• SensorEventListener – интерфейс для реализации обработчиков событий, приходящих из сенсоров. В нём реализуется логика обработки входящих данных;

• SensorEvent – отдельное событие из сенсора: данные и точность их измерения.

Для подробного изучения возможностей сенсоров на официальном сайте есть полный гайд.

#Hardware

@android_its
  • 👍 3
  • 🔥 2
Post #28 643
Как отладить приложение на девайсе?

Для удаленной отладки используется технология 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
Post #27 612
Как уменьшить APK?

• Подключить к своему приложению Proguard;

• Избавиться от неиспользуемых ресурсов с помощью атрибута shrinkResources;

• Избавиться от ресурсов сторонних библиотек, которые не подходят под вашу локаль, с помощью атрибута resConfigs;

• Сконвертировать все картинки в формат webp или VectorDrawable.

Подробнее об этих советах можно почитать в статье.

#Build
  • 👍 7
  • 🔥 1
Post #26 625
Как Proguard удаляет неиспользуемый код?

Одна из функций Proguard – это удаление неиспользуемого кода программы.

При подключении сторонних библиотек, часто используется только часть предоставляемой функциональности. Классы, которые не используются в приложении, могут быть безопасно удалены, что уменьшает конечный размер приложения.

Proguard запускается после компиляции исходного кода и получения .class файлов, но до конвертации в dex.

Proguard строит граф использования классов, методов и полей, начиная от входных точек программы, как показано на картинке.

Входные точки программы задаются в файлах конфигурации правилом -keep. Android Gradle Plugin генерирует дефолтный файл c правилами для сохранения базовых компонент и специфичных для андроида классов, таких как View.

Если класс, метод или поле используется только через Reflection, Proguard пометит этот компонент как неиспользуемый и удалит. Это является частой причиной крэшей ClassNotFoundException при использовании Proguard.
Для сохранения таких компонентов нужно добавить правила -keep в файл конфигурации.

После сборки приложения с Proguard, генерируется файл usage.txt, в котором хранится список всех удаленных компонентов.

#Build

@android_its
  • 👍 6
Post #25 1.19K
Что такое Proguard?

Proguard – это инструмент обфускации и оптимизации Java-кода. Proguard может использоваться как на чистом Java-, так и на Android-приложении, но в мире Андроида Proguard популярнее по двум причинам.

Во-первых, Proguard удаляет неиспользуемые классы и методы из уже скомпилированного приложения. Это позволяло решать проблему 64К методов до появления MultiDex.

Во-вторых, Java- и Dalvik-байткод легко декомпилировать. Для серверного Java-приложения это не проблема, а вот к байткоду приложения под Android доступ имеет любой пользователь.
Proguard обфусцирует код, что усложняет задачу декомпиляции.

#Build

@android_its
  • 👍 7
Post #24 1.21K
В чем разница между jar и aar?

jar и aar являются расширениями файлов-архивов, которые содержат части программ и используются в качестве библиотек в Android-приложениях.

JAR – Java Archive. Содержит файлы классов, java-ресурсы, зависимые библиотеки, и другие необходимые для приложения файлы. JAR может использоваться как в Android-приложении, так и в приложении на чистой Java.

AAR – Android Archive. Так же как и JAR является zip-архивом, но может использоваться только в Android-приложении. AAR содержит скомпилированный исходный код в файле classes.jar, Android-ресурсы, AndroidManifest, и другие файлы, входящие в состав APK.

#Build
  • 👍 6
Post #23 1.22K
Как собирается Android-приложение?

Сборка Android-приложения состоит из следующих шагов:

1. Компилирование Java/Kotin-исходников.

Компилятор создает .class-файлы, содержащие java-байткод.

.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files


2. Конвертация Java-байткода в Dalvik-байткод.

Для конвертации используется утилита dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод.

.class, .jar, .aar -> dx -> classes.dex

3. Сборка ресурсов и .dex-файлов в APK.

Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).

classes.dex, resource files -> aapt -> .apk file

4. Оптимизация и подпись .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
Post #22 1.56K
Опишите структуру APK-файла

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
Post #21 1.51K
Как собирается Android-приложение?

Сборка Android-приложения состоит из следующих шагов:

1. Компилирование Java/Kotin-исходников.

Компилятор создает .class-файлы, содержащие java-байткод.

.java source -> javac compiler -> .class files
.kt source -> kotlinc compiler -> .class files


2. Конвертация Java-байткода в Dalvik-байткод.

Для конвертации используется утилита dx. На вход подаются .class-файлы, скомпилированные на предыдущем шаге, и .jar/.aar-файлы скомпилированных библиотек. dx создает файлы формата .dex, которые содержат Dalvik-байткод.

.class, .jar, .aar -> dx -> classes.dex

3. Сборка ресурсов и .dex-файлов в APK.

Этот шаг выполняется утилитой aapt (Android Asset Packaging Tool).

classes.dex, resource files -> aapt -> .apk file

4. Оптимизация и подпись .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 AAPT2 is a build tool used by Android Studio and Android Gradle Plugin to compile and package app resources, optimizing them into a binary format for the Android platform.
  • 👍 8
Post #20 1.24K
Фоновое изображение в Layout

Android позволяет устанавливать фоновое (background) изображение в корневой элемент разметки интерфейса Layout. Реализовать это совсем просто; достаточно в описание разметки вставить соответствующий атрибут android:background="@drawable/earth". Предполагается, что изображение earth хранится в директории проекта res/drawable. На следующем скриншоте представлено изображение земли earth.png, которое будет использовано в описанном ниже примере в качестве фонового изображения разметки интерфейса Layout.

  Читать дальше

@android_its
  • 👍 3
  • 🥰 1
Post #19 1.26K
Fragment

Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.

Для создания и управления фрагментами используется FragmentManager.

Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.

Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.

#Fragment

@android_its
  • ❤ 4
  • 👍 1
Post #16 1.89K
​Termux - это эмулятор терминала Android и приложение среды Linux, написанный на Java.
Он работает напрямую без рутирования или настройки. Минимальная базовая система устанавливается автоматически - дополнительные пакеты доступны с помощью менеджера пакетов APT.

Termux-app - Пользовательский интерфейс и эмуляция терминала

Termux-api - Android API для использования командной строки и скриптов или программ

Termux-styling (Kotlin) - Дополнительное приложение для настройки шрифтов, терминала и цветовой схемы

Termux-tasker - Дополнительное приложение для интеграции с Tasker

Termux-packages (Shell) - Сборка системы и первичный набор пакетов для Termux

@android_its
  • 🔥 8
Post #15 5.21K
Нужно ли думать о сохранении состояния, если приложение поддерживает только портретную ориентацию?

– Да.

Поворот экрана – это частный случай Configuration Changes. Другой пример – изменение языка системы.

Кроме того, как было упомянуто постом выше, система может уничтожить активити, чтобы использовать занятые ей ресурсы. В этом случае состояние сохраняется и восстанавливается при пересоздании активити.

#State

Fragment

Fragment используется для отображения части UI на экране. Фрагмент создается внутри активити или внутри другого фрагмента.

Для создания и управления фрагментами используется FragmentManager.

Класс-наследник класса Fragment должен иметь дефолтный конструктор без параметров. Система использует этот конструктор при пересоздании фрагмента.

Начиная с API v28 системный класс Fragment – deprecated. Рекомендуется использовать Fragment из Support Library.

#Fragment

@android_its - все о Android разработке
  • 👍 5
  • 🔥 1
Post #14 1.88K
Activity: Как пережить поворот экрана?

При повороте экрана активити уничтожается и создается заново. Вызываются коллбэки onPause(), onStop(), onSaveInstanceState(), onDestroy() – onCreate(), onStart(), onRestoreInstanceState(), onResume().

Чтобы сохранить состояние активити, вы должны переопределить метод onSaveInstanceState() и положить данные в Bundle.

При реинициализации активити, Bundle с сохраненным состоянием передается в onCreate() и в onRestoreInstanceState().

Система вызывает onSaveInstanceState() и onRestoreInstanceState() только в том случае, когда необходимо сохранить состояние, например при повороте экрана или при убийстве активити для освобождения памяти. Данные коллбэки не вызываются, если пользователь выходит из активити нажав Back или если активити убивается вызовом finish().

onSaveInstanceState() вызывается после onStop() на версии API ≥ 28. На API < 28 этот коллбэк вызывается перед onStop() и нет гарантий до или после onPause().

onRestoreInstanceState() вызывается после onStart().

#Activity
#Lifecycle
#State

@android_its
  • 👍 8
Post #13 1.91K
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →