Am plugin android app

Топ-17 плагинов для Android Studio

Существуют сотни плагинов для Android Studio, и их число растёт с каждым днём. Это в основном происходит по двум причинам. Во-первых, Android Studio — это официальная интегрированная среда разработки для создания Android-приложений. Во-вторых — Intellij IDEA, платформа, на которой основана Android Studio, позволяет разрабатывать и легко устанавливать полезные плагины, совместимые с обеими IDE. Какие плагины устанавливаете вы?

Конечно, вы можете программировать в «голой» Android Studio, просто установив необходимые библиотеки и не добавив ни одного плагина. Но зачем? Плагины для Android Studio могут сделать вашу работу более эффективной и увлекательной. Сейчас мы расскажем вам про топ плагинов Android Studio, которые смогут утроить (как минимум) вашу производительность.

В список лучших плагинов для Android Studio мы включили некоторые базовые инструменты, проверенные временем, а также ряд малоизвестных жемчужин, рекомендованных опытными разработчиками Android-приложений. Итак, вот наши любимые плагины Android Studio:

1. String Manipulation

Как следует из названия, этот плагин поможет сэкономить часы утомительной ручной работы со строками. Он позволяет изменять стиль текста (camelCase, kebab-lowercase, KEBAB-UPPERCASE, snake_case, SCREAMING_SNAKE_CASE, dot.case, нижний регистр, Заглавные Буквы, PascalCase), кодировать / декодировать, увеличивать / уменьшать, сортировать, фильтровать и выравнивать.

2. Codota

Вы только посмотрите, на что способен следующий плагин. Плагин Codota использует машинное обучение для автодополнения вашего кода. Плагин учится на примерах кода из миллионов Java-программ вместе с вашим собственным уникальным контекстом. Используемый как начинающими, так и опытными Java-разработчиками, Codota ускоряет разработку и помогает устранить те раздражающие ошибки, которые появляются в вашем коде.

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

3. Индикатор использования CPU

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

4. Rainbow Brackets

Скобки всегда были источником головной боли для программистов. Сколько часов было потрачено на поиск этой недостающей скобки? Хватит это терпеть!

Вместо того, чтобы сидеть и пытаться понять, какую скобку вы уже закрыли, а какую ещё нет, разукрасьте скобки с помощью плагина Rainbow Brackets.

Он поддерживает Java, Scala, Clojure, Kotlin, Python, Haskell, Agda, Rust, JavaScript, TypeScript, Erlang, Go, Groovy, Ruby, Elixir, ObjectiveC, PHP, HTML, XML, SQL, Apex, C #, Dart и другие языки.

5. Project Lombok

Сложный Java-код для Android-приложений часто может содержать много шаблонного кода (конструкторы, геттеры, сеттеры). Это может быть утомительно и трудно с точки зрения читабельности и поддержки кода. Project Lombok — это Java-библиотека, которая подключается к вашей IDE и генерирует этот шаблонный код за вас, сохраняя ваш код лаконичным и читабельным. Разница кода до и после может быть довольно ошеломляющей.

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

6. Android Drawable Importer

Если вы собираетесь работать с drawable при разработке Android-приложения, то это именно тот плагин, о существовании которого вам следует знать.

Чтобы адаптировать ресурсы ко всем размерам и разрешениям экрана Android-устройств, в каждом Android-проекте есть папка drawable. Если вы были благословлены дизайнером из Рая, который предоставляет ресурсы, уже находящиеся в нужных папках с правильными именами, мы искренне завидуем вам. Но скорее всего, вам вряд ли так повезло, и вы сами переименовываете и перемещаете PNG-файлы в нужные папки.

Android Drawable Importer — это плагин, который сэкономит вам массу времени. Он позволяет импортировать отдельные ресурсы для регулирования под необходимые размеры и разрешения, целые zip-файлы для автоматического размещения в необходимые папки.

7. Vector Drawable Thumbnails

Для предварительного просмотра векторного XML-файла нужно запускать приложение. Vector Drawable Thumbnails поможет вам избавиться от этого и отобразит векторные рисунки по одному щелчку мыши.

8. Android Drawable Preview Plugin

Когда в вашем проекте много drawable-компонентов, ориентироваться в них бывает очень сложно. Было бы неплохо, если бы в IDE был быстрый предварительный просмотр изображений, да? С Android Drawable Preview Plugin это возможно.

Этот плагин для Android Studio заменяет иконки по умолчанию в дереве файлов проекта предварительными просмотрами элементов. Но не забывайте использовать адекватные имена для drawable, это всё равно важно.

9. Name That Color

Позвольте мне начать с разрушения мифа. Не все женщины могут отличить бирюзу от цвета морской волны или цвет баклажана от цвета сливы. И для этого не обязательно быть дальтоником.

Наличие и популярность этого плагина говорит о том, что большинство разработчиков также не имеют этого волшебного навыка распознавания цветов.

Плагин Name That Color назовёт цвет, который у вас есть в буфере обмена, прямо в файле ресурсов в Android Studio, и даст название наиболее близкого соответствующего цвета. Эпоха «lighter_light_pink» в ваших xml-файлах подходит к концу.

Читайте также:  Имитация звонков для андроид

10. bundletool

bundletool — это базовый инструмент, который Gradle, Android Studio и Google Play используют для создания Android App Bundle или преобразования app bundle в различные APK, развёртываемые на устройствах. Этот инструмент от Google необходим для более эффективной работы с APK-пакетами.

11. Butterknife Zelezny

Android ButterKnife — это библиотека для внедрения зависимостей. Как правило, это улучшает читабельность кода, позволяя сосредоточиться на логике, а не смешивать в кучу код для поиска View-компонентов или добавления слушателей.

Android ButterKnife Zelezny — плагин для Android Studio для создания инъекций ButterKnife из выбранных XML-макетов в Activity, фрагментах или адаптерах. Большинство руководств по ButterKnife, которые вы найдёте, будут рекомендовать вам установить Zelezny.

12. Android Input

Android Input — это довольно простой, но полезный плагин для Android Studio, который позволяет легко вводить текст прямо на ваше Android-устройство или эмулятор. Он запоминает последнее использованное устройство и последний введённый текст.

13. ADB Idea

Этот плагин как для Intellij IDEA, так и для Android Studio добавляет ряд полезных сочетаний клавиш для различных команд ADB-инструментов прямо в вашей IDE. Хотя это кажется излишним дополнением, разработчики говорят, что ADB Idea действительно может ускорить разработку и отладку Android-приложений.

14. adb-enhanced

Называя себя «швейцарским ножом для тестирования и разработки под Android», adb-extended — интерфейс командной строки для запуска различных сценариев. Это позволяет вам протестировать многие потенциально ошибочные поведения приложений, такие как поворот экрана, режим экономии заряда аккумулятора, режим сохранения данных, режим ожидания и предоставление или отзыв разрешений.

15. ADB WIFI

Этот плагин упрощает подключение устройства к ADB через WiFi для отладки. Как и многие другие небольшие, но удобные плагины, этот — это просто обёртка для серии команд, которые вы можете выполнить в командной строке. Но почему бы не сделать этот процесс комфортнее?

16. Here there be dragons

Here there be dragons — это плагин Intellij и Android Studio, который позволяет аннотировать ваши «нечистые» Java-методы аннотацией @SideEffect. При вызове такого метода плагин отображает маленький значок дракона.

Да и к тому же этот плагин слишком симпатичный, чтобы не включать его в наш список. Это же драконы!

17. Power Mode 2

Вы знаете, ваш код просто эпичен. Когда вы ночи напролёт кодите, а в вашей крови высокое содержание кофеина, то можно почувствовать, как ваши пальцы изрыгают огонь и сотрясают мир. Вы — Бог. И вы заслуживаете того, чтобы программировать, как Бог.

И напоследок

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

Источник

Разработка Unity плагинов для iOS и Android

Есть куча ситуаций когда одной Unity недостаточно и нужно использовать возможности платформы. Банально, но до сих пор, в Unity нет работы с галерей и камерой из коробки. Понятно, что Unity не ограничивается мобильными платформами, но 60-70% всех мобильных игр, как бы говорят:

Если говорить о самой Unity, то особых подвижек в этом направлении у них нет. Они заняты более важными вещами… В менеджере пакетов есть какой-то куцый пакет для уведомлений, да и всё вроде. Это если говорить про мобайл. Недавно они зарелизили пакет для локализации (уже что-то!). Всё остальное делают сторонние разработчики и выкладывают либо на Github или продают в Asset Store. В принципе, в сторе можно найти и купить (или скачать) практически любой плагин для любой платформы. Но часто бывает, что требуется лишь одна-две функции, а приходится тянуть весь пакет. А сколько всего можно использовать:

  • геолокация
  • ин-апп оценки и покупки
  • уведомления
  • авторизация
  • синхронизация данных
  • работа с безопасным хранилищем
  • карты

И многое другое уже есть у Android и iOS и этим можно пользоваться в ваших приложениях и играх. Только в Unity этого нет. Но благо, что они сделали возможность создавать плагины.

За несколько лет, я сделал большое количество различных плагинов для iOS и Android (iCloud, Google Sign-in, Sign-in with Apple, Firebase Push Service, In-app purchases, Browser, Sharing, Mail, Images, Review, NativeInput, . ), почти все они давно в продакшне и отлично работают. Система отлажена, обновляется и функционирует 🙂 Да, она не идеальна, но зато проста в создании и использовании.

В блоге я уже давно пишу короткие посты про плагины:

Они немного устарели конечно, но основа осталась примерно такая же: есть общий интерфейс приема/передачи сообщений на стороне Unity и есть такая же система на стороне платформы. Эта статья – апдейт и рефакторинг накопившихся знаний.

Важное отличие моего подхода к созданию и использованию плагинов для Unity: модульность. Собственно, оно так и должно быть. Т. е. каждый плагин автономен и не зависит от других (почти), нет необходимости тянуть скопом всё что есть, ради одной функции тост-сообщений :).

Unity часть (контроллер и плагин)

У Unity в документации есть немного про создание плагинов, если совсем только начали, то стоит ознакомиться. А так на Хабре (и на Медиуме) были уже годные статьи на эту тему, можно поискать, почитать, сравнить, выбрать для себя лучшее решение.

И так, делаем ещё одну свою систему плагинов.

Первое что понадобится: объект на сцене который будет принимать команды от плагинов. Но не просто объект, у него должно быть определенное имя, потому что любой плагин при передаче данных в Unity будет искать на сцене именно его. В общем-то таких объектов может быть много, например, для каждого плагина свой. Но это только усложнит архитектуру. Поэтому, делаем одну точку входа и далее контролируем все получаемые данные оттуда.

Читайте также:  Amr android чем открыть

Кроме того, этот объект скорее всего должен быть неразрушаемым, мало ли какие плагины, на каких сценах и при каких условиях будем использовать. Теперь осталось повесить на этот объект скрипт и можно принимать сообщения от плагинов. Полдела сделано (нет). Ещё нужно определиться с именем метода который будет обрабатывать поступающие сообщения. Их тоже может быть несколько, как и объектов, но я делаю все плагины унифицированными и поэтому использую один объект, один метод и определенный протокол. Быстрее показать сразу код и объяснить.

Вот как выглядит примерный контроллер плагинов:

Все данные между Unity и плагинами передаются в JSON формате. Это удобно, это понятно, это легко реализовать. Можно использовать и свой какой-нибудь формат/протокол.

При старте, объект контроллера делаем неразрушаемым и инициализируем все нужные плагины. Список можно захардкодить, можно заполнять из инспектора, не суть, в данном примере, инициализируются три плагина, добавляются на объект, а их интерфейсы в словарь. Да, все плагины должны реализовать интерфейс IPlugin (об этом ниже).

Также, есть один метод для приема всех сообщений от всех плагинов. Там как видно, парсится JSON и в нужный плагин передаются данные. Всё просто.

Для работы с JSON я давно использую NiceJson, меня он полностью устраивает, хотя есть и куча других сериализаторов, в том числе и встроенный Unity. Так что тут тоже, свобода выбора.

Теперь, что касается самого скрипта плагина.

Все плагины живут на объекте с контроллером и каждый должен реализовать интерфейс IPlugin. Он был описан в контроллере выше. Всё что нужно, это уметь принимать данные, принимать сообщения об ошибках и отдавать своё имя. Этого пока хватало для всего. Ниже, пример плагина для отправки писем:

Это самый простой плагин. Тут вроде ничего сверхъестественного: один метод вызова нативных функций и обработчики данных и ошибок, для данного плагина больше ничего и не требуется. Так как из плагина никаких данных не приходит (кроме возможных ошибок), то метод OnData пустой.

Интересней плагин работы с галереей и камерой. Тут есть коллбек в котором уже возвращается адрес с картинкой и угол поворота. Ну и дополнительное взаимодействие с правами доступа и оповещением, если файл картинки долго скачивается из Google Photo, например.

Тут в методах Pick и Capture передаётся Action который выполнится после выбора изображения. В нём вернётся путь до картинки на устройстве и угол её поворота из Exif данных. В общем-то, это необязательно и «выравнивать» её можно на стороне плагина, но я делаю так и всю обработку оставляю на стороне Unity: поворот, кадрирование, масштабирование и т.д.

Вот так примерно выглядит работа с плагином:

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

Прежде чем перейдем к нативной части, напомню, что все плагины хранятся в папке Plugins/iOS или Plugins/Android, если мы рассматриваем эти платформы, в любой глубине по иерархии проекта. Но следует учесть что кастомный файл AndroidManifest.xml, должен быть в самом верху: Assets/Plugins/Android.

Android плагины

Для создания плагинов под Android, я использую Android Studio, пишу на Java. Почему не Kotlin? Потому что пока нет времени выучить его. Но в планах, всё же переписать плагины на Kotlin и на Swift под iOS. Опять же, я не Android или iOS разработчик, поэтому не претендую на академическую правильность написания на Java или Obj-C 🙂

Все плагины – это набор Android Library (AAR) внутри пустого проекта.

Входная точка для работы плагина – класс Plugin. В нем будут хранится все основные методы и к нему будет обращаться скрипт Unity. Если плагин простой и состоит из 1-3 методов, то одного этого класса может быть достаточно. Если требуется какая-то более сложная реализация, то есть варианты.

  1. Отдельный класс
  2. Фрагмент
  3. Сервис

Вообще, внутри плагина можно делать всё что душе угодно, как будто вы пишите нативное приложение, но с некоторыми условиями. Можно даже делать свои активити и вызывать из Unity.

Первые версии плагинов были сделаны во фрагментах. Это было удобно, внутри можно было обрабатывать onActivityResult, что решало много вопросов. Но сейчас старые фрагменты устарели, на смену пришли фрагменты из AndroidX Fragment library. Сейчас можно вообще делать вот такую вещь:

В этой статье подробно описано, как использовать новые API. Но к сожалению, это не получится сделать у нас, потому что чтобы запустить метод registerForActivityResult нужно юнитевский активити кастануть в AppCompatActivity, а у меня это никак не получилось 🙁 Если знаете как – поделитесь, буду очень благодарен.

Поэтому для сложных вещей я стал использовать старые-добрые сервисы. Сильно углубляться в эту тему не буду, можно прочитать мануал или посмотреть исходники на Github. Так что, поехали дальше.

Чтобы что-то отправить в Unity, нужно вызвать специальный метод у UnityPlayer:

Читайте также:  Приставка андроид для телевизора лджи

object – имя объекта на сцене Unity
receiver – метод который обработает данные
data – строка с данными

У каждого плагина можно писать в собственный AndroidManifest.xml, все манифесты потом мерджатся при билде. Также у каждого плагина могут быть свои ресурсы, картинки и всё остальное. Папку Plugins/Android/res в Unity проекте уже мало кто использует.

В Gradle файл добавляете все необходимые зависимости которые будете использовать в плагине, например, Firebase или ещё что-то. Также потребуется ссылка на библиотеку с классами Unity. Эта библиотека понадобится, если вы захотите обратиться и использовать UnityPlayer.currentActivity, например, ну и собственно чтобы отправлять данные обратно в Unity.

Файл можно скопировать из папки Unity если у вас MacOS. Для Windows путь будет не особо отличаться.

Этот файл копируем в папку libs своего плагина и в Gradle добавляем:

Чтобы использовать в плагине методы другого своего плагина, добавляем:

У Gradle много настроек и тонкостей, это тема отдельной статьи. Добавлю лишь, как я копирую все скомпилированные плагины в одну папку:

После запуска таска Assemble для всего проекта со всеми плагинами, они компилируются, переименовываются и копируются в одну папку.

Вот пример плагина галереи и камеры, точнее, только точка входа, вся магия в файле MediaService.java (изучить исходник можно на Github)

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

Чтобы сервис работал, нужно прописать его в манифесте:

Ещё есть отдельный плагин-хелпер с помощью которого можно легко отправлять данные в Unity, чтобы каждый раз не хардкодить названия объектов и методов, всё это захардкодено там 🙂 В хелпере есть несколько методов которые собирают JSON с нужными ключами и отправляют в Unity.

Хотя, при желании можно сделать специальный метод инициализации, где при старте приложения будут передаваться название объекта и метод куда отсылать данные, для всех плагинов.

Ну и чтобы завершить тему Android плагинов, расскажу как обрабатывается onActivityResult и разрешение прав.

Так как старые фрагменты уже старые, а с новыми полноценно работать пока не получается, то onActivityResult обрабатываю в т.н. базовом плагине. Это как раз единственный плагин который будет связан с другими, которым нужны какие-либо разрешения. Но т.к. это пока требуется только для камеры и галереи, то и данные отсылаются только туда.

Плагин наследуется от UnityPlayerActivity и переопределяется в манифесте:

Таким способом можно отлавливать и другие события Activity, как например изменение ориентации устройства.

iOS плагины

Начнём с того, что iOS плагины разрабатывать легче! Тут тоже есть свои заморочки, но в целом – легче. Я пишу на Objective-C, да это олдскулл, но на чём знаю, на том и пишу.

Обычно плагин наследуется от NSObject или UIViewController, если требуется какое-то более сложное взаимодействие. Вот пример плагина нативного шаринга текста:

В начале тоже подключается хелпер (тут не используется, просто по привычке подключаю везде сразу) для отправки данных в Unity, потом идёт сам плагин с одним методом и в конце блок на С, который вызывается из Unity.

Из интересного тут UnityGetGLViewController() – это метод который возвращает текущий контроллер который рендерит Unity приложение. Как UnityPlayer.currentActivity в Android плагинах. Собственно с этим контроллером и работаем обычно. В скомпилированном Xcode проекте можно открыть папку Classes и поизучать внутренности 🙂 Например, файлы UnityAppController.mm или UnityInterface.h.

Лучше рассмотрим тот же плагин с камерой и галереей.

Тут плагин наследуется от UIViewController и указываются делегаты для ImagePicker’а и навигатора. Метод didFinishPickingMediaWithInfo возвращает все нужные нам данные. Там мы определяем, что если изображение с камеры, то необходимо получить его угол поворота, если из галереи то по-умолчанию нормализуем ориентацию. И отправляем в Unity путь до картинки и угол.

Там где вызывается камера сначала проверяются права доступа и если они есть, то всё норм, если нет – то ответ (NO_PERMISSION) придёт в Unity, который предложит открыть настройки приложения.

Выше я рассказывал про класс UnityAppController.mm, в нём описаны все методы из нативного AppDelegate: didFinishLaunchingWithOptions, didReceiveRemoteNotification, openURL и т.д. Так вот чтобы сделать свой плагин и переопределить эти методы, нужно наследоваться от него и в конце добавить такую конструкцию:

Все плагины имеют расширение *.mm или отдельно, заголовки и реализация: *.h и *.m. Кроме того, вам ничего не мешает сделать свою скомпилированную библиотеку-плагин. В Xcode при создании проекта выбираете Static Library, пишите плагин и делаете билд. Как и все iOS плагины, надо будет закинуть в папку Plugins/iOS.

Как-то так. Это наверно самое основное, что необходимо знать чтобы сделать плагин под iOS. Т.е. алгоритм примерно такой: хотите сделать определение геолокации -> читаете мануал, как это сделать на Obj-c или Swift -> создаёте шаблон плагина и заголовки -> добавляете внутрянку, запросы на доступ и коллбеки -> профит.

Чуть не забыл упомянуть про External Dependency Manager for Unity. Этот пакет автоматически загрузит все необходимые зависимые библиотеки для Android и подсы (cocoapod) для iOS. Для этого в папке Editor нужно создать XML файл и указать используемые библиотеки. Пример есть на Github или репозитории проекта.

На Github я обновил репозиторий с исходниками всей этой системы, тремя плагинами и примером.

Ну и не забываем, отключать сервисы когда они уже не нужны и очищать все созданные контроллеры и объекты в плагинах 🙂

Источник

Оцените статью