Разработка под Android всегда требовала ресурсов. Фактически, даже топовый MacBook Pro с трудом справится со средним и большим проектом. Для компиляции и запуска приложения требуется от 10 до 15 ГБ оперативной памяти, и это без запуска эмулятора! Излишне говорить, что если у вашего ноутбука всего 16 Гб оперативной памяти, терпение во время разработки вам определенно понадобится.
TFW a 16 GB McBook Pro is not enough for #AndroidDev pic.twitter.com/oFVw07EGCP
— Joaquim Vergès ⚡ (@joenrv) December 4, 2019
Мой личный ноутбук, четырехлетний Razer Blade с 16 Гб оперативной памяти, начинал ВЕШАТЬСЯ, как только я открывал в Android Studio один из моих личных проектов с несколькими модулями. Кулеры дули громче, чем когда я играл в 3D-игры, и это сводило меня с ума.
Итак, я начал искать альтернативы. Как я могу работать над своими Android-проектами, не превращая ноутбук в печь для обжига? Естественный ответ — запускать нагруженные вещи в облаке.
После того, как я перепробовал различные подходы, такие как Mirakle, и добился небольшого успеха, мой хороший друг Тай Смит рассказал мне о проекте инкубатора JetBrains под названием Projector. По сути, он позволяет вам получить доступ к любой IDE JetBrains через браузер с помощью хитрого трюка. Я попробовал это, и был потрясен. При таком подходе вы можете легко программировать с любого устройства, на котором можно запустить браузер. Фактически, вот Android Studio «работает» на моем телефоне, почему бы и нет.
Конечно, вы никогда не станете программировать на телефоне, но это доказывает, что устройство не имеет значения. Если у него есть браузер, вы можете использовать его для программирования. Это все меняет!
Без ограничений в оборудовании я могу выбрать портативную, легкую и гораздо более дешевую машину для разработки! На мой взгляд, хороший выбор — Chromebook, MacBook Air или Surface Go. Я даже рассматривал iPad как альтернативу, он работает, но определенно не так удобен, как настоящий ноутбук. На данный момент мне лично больше всего нравится Pixelbook Go, отличная клавиатура и сверхлегкий вес, мне очень нравится писать с него код.
Где на самом деле работает Android Studio?
Вам по-прежнему нужна мощная машина в облаке или в локальной сети, чтобы выполнять тяжелую работу по запуску IDE и сборок Gradle. К счастью, облачные виртуальные машины теперь стали обычным делом, и вы можете запустить их за считанные минуты с помощью таких сервисов, как Amazon AWS, Google Cloud или Microsoft Azure. Я выбрал AWS, сделал экземпляр EC2 с 8 ядрами, 32 ГБ ОЗУ и 100 ГБ хранилища. Работа с экземпляром обходится мне примерно в 0,40 доллара в час, что недешево, если вы используете его круглосуточно, без выходных, но поскольку я использую его только несколько часов в неделю для своих личных проектов, цена оказывается вполне доступной. Даже если бы я использовал его 8 часов в день 5 дней в неделю, это обошлось бы мне примерно в 64 доллара в месяц. Неплохо, учитывая, что мне больше не нужен дорогой ноутбук.
Когда я хочу работать над своими проектами, я просто запускаю свой экземпляр EC2, запускаю на нем Projector, затем открываю вкладку Chrome и готов писать код. Больше никаких сумасшедших кулеров, никакого перегрева!
Как работает JetBrains Projector?
Идея Projector проста, но довольно гениальна. Он перехватывает команды отрисовки из IDE (или любого приложения Swing) с помощью кастомного движка рендеринга (реализация AWT), который вместо визуализации вещей на экране записывает все команды, сериализует их и отправляет их веб-клиенту. Веб-клиент интерпретирует эти команды рисования и отображает их на веб-странице. Веб-клиент записывает ввод с клавиатуры и мыши и отправляет его обратно в IDE через AWT.
Прелесть этого подхода в том, что даже при медленном соединении он отображает четкие, идеальные до пикселей шрифты и пользовательский интерфейс, поскольку он понимает базовое программное обеспечение и может отображать шрифты в векторном формате. Ввод также очень отзывчив, потому что протокол специализирован и, значит, оптимизирован. Это убийственное преимущество перед более общими решениями для удаленного рабочего стола, такими как VNC, которые напрямую передают все пиксели. Решения для удаленных рабочих столов обычно отображают размытые шрифты и плохо работают на медленных соединениях.
Единственным недостатком этого подхода является то, что некоторые сочетания клавиш IDE конфликтуют с собственными сочетаниями клавиш браузера. Например, cmd + w закрывает вкладку браузера вместо одной из вкладок в IDE. Однако есть обходной путь — можно добавить страницу как ярлык на рабочий стол, что будет открывать любой веб-сайт в режиме приложения. При этом у меня все остальное работает очень хорошо, включая все мои ярлыки. Когда Chrome помещается в полноэкранный режим, он выглядит как настоящее приложение.
Projector все еще находятся на ранней стадии развития, но мне не терпится увидеть, как они будут развиваться.
А как насчет развертывания приложений на устройстве и отладки?
Поскольку Android Studio работает на удаленном сервере, я подумал, что у него не получится просто по нажатию кнопки запуска в Android Studio установить приложение прямо на мой телефон. Я был неправ.
Оказывается, с помощью простого ssh-туннеля (одна простая инструкция в командной строке) вы можете «связать» adb на вашем локальном компьютере и на удаленном сервере, так что ваше устройство будет напрямую подключено к удаленному серверу и отображаться на удаленной Android Студия как обычно.
Я пошел немного дальше и настроил Wi-Fi-отладку между телефоном и ноутбуком, что означает, что мне не нужно иметь дело с какими-либо USB-кабелями.
Нажатие кнопки «запустить» в моем браузере запускает сборку на удаленном сервере, которая затем передается в виде APK через ssh на мой ноутбук, а затем через Wi-Fi на мое устройство. В какие времена мы живем, ребята!
Как мне попробовать JetBrains Projector?
Заинтересованы в настройке этого самостоятельно? Я написал пошаговое руководство по установке на GitHub.
С какого устройства вы будете писать код теперь, когда мы освободились от этих аппаратных цепей? Дайте мне знать в Твиттере!