Instant apps что это за программа и нужна ли
Instant Apps: что это за программа, которая обновляется, и как ее отключить?
Странное дело: стоит подключиться смартфону к интернету, причем речь идет как и мобильном, так и вайфай, как появляется уведомления об обновлении какого-то приложения Instant Apps. Происходит это не при каждом подключении, но приложение периодически обновляется. А самое странное то, что ты даже не понимаешь, что это вообще такое и почему оно обновляется. Давайте вместе разбираться.
Никакого секрета тут нет, хотя на заре появления уведомления об обновлении многие пользователи принимали Instant Apps за вирус. На деле же это приложение относится к сервисам Гугла и в разделе с приложениями не отражается (как минимум на момент написания статьи). Instant Apps отвечает за приложения с быстрым запуском. Не поняли? Это специальная технология, которая позволяет запускать приложения, не устанавливая их, из Play Market. Это нужно для того, чтобы пользователь решал, нужно ли устанавливать приложение, не устанавливая его на свой смартфон — опробовав его. Согласитесь, идея довольно интересная. Обновляется же Instant Apps автоматически и отключить его привычными способами нельзя. Наверняка это можно сделать специальными программами вроде Titanium Backup, но это теоретически может превратить смартфон в «кирпич», да и для установки Titanium Backup нужны рут-права. В общем, пусть себе обновляется.
Настройки Instant Apps вы можете обнаружить в разделе Google. Для этого откройте «Настройки» на рабочем столе.
Зайдите в раздел Google.
Нажмите на строчку Google Play Instant (может называться «Приложения с мгновенным запуском»).
Выберите свой аккаунт.
Теперь найдите приложение с мгновенным запуском в Play Market. Пусть будет приложение Viki. На странице приложения вы видите кнопку «Попробовать» — она говорит о том, что указанное приложение поддерживает мгновенный запуск. Нажмите на нее.
Если приложение понравилось, можете установить его.
А вот что интересно: несмотря на то, что технология существует не один год на момент написания статьи, приложений с мгновенным запуском в Play Market — мизер.
Друзья! Если наш сайт помог вам или просто понравился, вы можете помочь нам развиваться и двигаться дальше. Для этого можно:
Instant Apps в Android: предназначение и особенности использования
Если вы пользуетесь смартфонами на базе операционной системы Android, скорее всего, сталкивались с таким понятием, как Instant Apps, вот только сразу и не скажешь, что это такое, не так ли? Технологии развиваются, возможности наших телефонов постоянно расширяются, и среди такого многообразия опций попросту не успеваешь опробовать все фишки своего смартфона.
Из статьи вы узнаете
Что это такое?
Instant Apps — это технология, используемая в Google Play для запуска демо-версий приложений или игр. Например, вам хочется загрузить на свой смартфон программу для прослушивания музыки или новую игру, которая вышла недавно, и вы заходите в Маркет и начинаете устанавливать приложение. Вот только часто так бывает, что памяти на телефоне не хватает, а опробовать то хочется. Вдруг эта программа в разы лучше той, что установлена у меня?
В таких ситуациях вас и будет спасать технология Instant Apps. Благодаря ей можно загрузить демо-версию любого продукта, который представлен в Google Play и посмотреть, как он выглядит, какие опции в нем предусмотрены, вкладки, внешний вид, меню. Файл с демкой очень маленький по объему, поэтому такая технология существенно экономит ресурсы вашего смартфона. Да и не только ресурсы, но и время. Если у пользователя сравнительно низкий уровень сигнала, то и загрузка программы будет осуществляться очень долго. А здесь скачал демо-версию, быстро ознакомился с ней, и если понравилась, то скачал уже полную.
Только вот подобная технология используется не везде, к сожалению. Впервые Instant Apps был представлен еще в 2016 году на конференции Google, а в 2017 начали появляться первые приложения с поддержкой данной опции. Вообще она поддерживается с Android Jelly Bean (4.3), однако многие разработчики начали создавать свои продукты с поддержкой этой технологии только в 6.0 и выше.
Преимущества и недостатки технологии
Вам, как пользователю Android, необходимо знать обо всех минусах и плюсах технологии Instant Apps, чтобы понимать, насколько она полезна. Ведь не все опции, которые присутствуют в операционной системе Андроид, одинаково полезны.
Преимущества
Недостатки
Последний пункт в недостатках — это, скорее, придирка, но данная причина тоже имеет место быть.
Как использовать Instant Apps?
Как и говорилось ранее, она доступна на устройствах с Андроидом версии Jelly Bean (4.2) и выше, однако многие разработчики добавили эту возможность в приложениях, адаптированных под версии 6.0 и выше.
По умолчанию эта опция включена в смартфоне, но, если она вдруг не работает, выполните следующие действия:
Все, на этом опция активирована и можно переходить к загрузке демо-версии. Выполняем следующие действия:
Как удалить или отключить?
Одна из проблем Instant Apps — автоматическое обновление и самостоятельная активация. Некоторых владельцев смартфонов подобные действия сильно напрягают, так как без их разрешения Instant Apps расходует трафик, заряд батареи, причем в стандартных приложениях его найти нельзя. Что же делать в таком случае?
Но учтите, что в этом случае вы не сможете использовать демо-версии программ и игр в сервисе Google Play. Если же вы решили совсем удалить данную опцию, вам необходимы будут root-права. И уже только после этого вы сможете стирать любые службы и приложения, по умолчанию установленные от Google.
Приложения с поддержкой мгновенного запуска
Хотите опробовать приложения с опцией Instant Apps, но не знаете, где их скачать? В сервисе Google Play есть отдельный раздел, который называется «Мгновенный запуск». В нем выложены все программы, которые имеют данную опцию. Перейти в эту категорию можно по этой ссылке:
В целом можно сделать вывод, что Instant Apps — это довольно интересная и удобная опция, которая, скорее, сэкономит ваш трафик, чем израсходует. Да, иногда она будет обновляться, но в целом расходуется очень маленький объем трафика, который компенсируется просмотром демо-версий при очередном выборе новых программ или игр в Google Play.
Еще один весомый аргумент в пользу этой опции — это будущее. Все больше разработчиков адаптируют свои продукты под данную технологию, а вскоре и вовсе нас ожидает загрузка контента в доли секунды, которая будет разбиваться на отдельные контейнеры. Но это уже совсем другая история…
Что такое App Clips в iOS и зачем они нужны
На WWDC 2020 компания Apple представила App Clips. Рассказываем, что это такое и как дела с Android Instant Apps.
Несколько дней назад компания Apple представила очередную версию iOS на своей всемирной конференции для разработчиков WWDC, которая в этом году из-за коронавируса проходит в полностью виртуальном режиме. Одним из нововведений iOS 14 стали App Clips — мини-приложения, которые можно запускать сразу, без установки на устройство.
По требованиям Apple такие мини-приложения не должны превышать 10 Мбайт, чтобы они могли быстро загружаться и запускаться. Если же приложение покажется вам полезным, то в любой момент можно догрузить полноценную версию и далее пользоваться уже ей.
Кроме того, в Apple предлагают сочетать App Clips с функциями «Вход с Apple» (Sign in with Apple) и, разумеется, Apple Pay. Так исчезают еще два мучительных этапа, которые мешают быстро начать пользоваться приложением: регистрация в системе и ввод платежных данных.
Зачем могут понадобиться App Clips
Представители Apple приводят несколько наглядных примеров практического применения такой схемы. Скажем, вы идете по улице, видите прокатный электросамокат и решаете его арендовать. Стандартный порядок вещей предполагает, что вам надо сначала найти и установить приложение, потом зарегистрироваться в нем и привязать карту оплаты. Возможно, придется еще и подождать, пока прокатная система проведет все необходимые проверки.
Думаю, все мы когда-либо проходили мимо таких самокатов. Но мысль о том, как было бы приятно прокатиться, у многих быстро угасала от перспективы необходимых для аренды телодвижений.
В дивном новом мире App Clips все должно значительно упроститься. Вы сканируете графический код или прикладываете смартфон к NFC-метке. Мгновенно запускается мини-приложение, вы входите в него через Sign in with Apple, оплачиваете аренду через Apple Pay — и уезжаете на самокате в закат.
Разумеется, графический код или NFC-метка не обязательны и предназначены для взаимодействия с физическими объектами вроде внезапно попавшегося на глаза самоката или какой-нибудь уличной рекламы. В виртуальном мире тот же самый сценарий может стартовать после клика по ссылке.
Скажем, вы видите в поиске рекламу еды с доставкой, кликаете по ней, после чего мгновенно запускается соответствующее мини-приложение. Вы выбираете блюдо, оплачиваете через Apple Pay — и курьер уже спешит к вам.
Третий показательный пример использования мини-приложений — оплата парковки. Все больше городов в мире вводит оплату парковки с помощью приложений. При этом традиционный паркомат, не говоря уже о кассе с живым человеком, встречается все реже — они стоят дорого, поэтому города стараются на них экономить, что совершенно разумно.
Но что, если вы приезжаете в этот город лишь время от времени или вовсе попали в него проездом? Скорее всего, вам не захочется искать и устанавливать местное парковочное приложение, регистрироваться в нем, искать способ пополнить счет или привязывать карту оплаты. И тут снова придут на помощь мини-приложения — мгновенно запускаете, оплачиваете парковку через Apple Pay и идете по своим делам.
Что там у Гугла? Android Instant Apps
На самом деле идея, мягко говоря, не нова. Компания Google представила такую же концепцию мини-приложений для Android еще три года назад, на Google I/O 2017. В мире роботов это называется Android Instant Apps — «мгновенные приложения».
Представляя эту технологию, в Google были несколько более откровенны насчет того, зачем она на самом деле нужна. Разумеется, мгновенные приложения могут сильно облегчить жизнь пользователей в некоторых сценариях. Но кто от них выигрывает гораздо больше, так это разработчики.
В обоих крупнейших магазинах приложений — что в App Store, что в Google Play — уже накопилось по несколько миллионов уникальных программ. Пользователям становится все сложнее искать конкретное приложение. А разработчикам — продвигать свои творения среди огромного количества аналогов.
Тут и приходят на помощь мгновенные приложения, которые позволяют не просто отправить пользователя куда-то в дебри магазина, а сразу дать ему попробовать программу в деле. Разумеется, с надеждой на то, что если она ему понравится, то он установит полноценную версию.
Один из типичных сценариев использования Android Instant Apps — это максимально облегченные демоверсии игр. В виде «мгновенного приложения» пользователю предлагают, скажем, один уровень игры. Главное, что ничего не надо устанавливать — поиграть можно прямо здесь и сейчас. Ну а если захочется играть дальше — загрузить полную версию.
По сути это очень похоже на микродегустации, которые проводят в продуктовых магазинах, или на пробники — в парфюмерных. Вместо абстрактной рекламы или даже промо-образца, который будет удобно распаковать только дома, товар сразу можно попробовать. А если понравится, то взять с ближайшей полки и положить в корзину.
Безопасны ли «мгновенные приложения»?
Сама концепция мгновенного запуска чего-то без установки звучит подозрительно. Правила цифровой гигиены подразумевают, что перед тем, как установить приложение, стоит провести хотя бы минимальное исследование: проверить репутацию разработчика, почитать отзывы пользователей, просканировать загруженный файл антивирусом, в конце концов.
Концепция мгновенного запуска всему этому противоречит. А что, если программа окажется опасной? Разумеется, мини-приложения загружаются из того же самого магазина, что и их полноценные версии. Но это не дает полной гарантии, что все пройдет гладко. В Google Play вредоносные программы обнаруживали множество раз.
И это не удивительно. Как уже было сказано выше, в магазинах Google и Apple хранятся миллионы уникальных программ, которые регулярно заменяют обновленными версиями. Распространенная практика среди злоумышленников — сначала загрузить «чистое» приложение, а вредоносные функции добавить в обновлении. На то, чтобы тщательно и регулярно проверять огромное количество программ, не хватит ресурсов даже у таких могущественных компаний, как Apple и Google.
Есть и еще одна проблема. Для работы Instant Apps используются специальные механизмы запуска, обходящие стандартную процедуру установки. Злоумышленники могут использовать несовершенство этих механизмов. В декабре 2019 года на хакерской конференции Chaos Communication Congress китайский исследователь RonnyXing представил доклад, в котором разобрал несколько практических вариантов атаки на мгновенные приложения.
Он показал, как их уязвимость может приводить к утечкам информации, краже личных данных, захвату учетных записей и другим неприятным последствиям. По наблюдениям RonnyXing, такому типу атак подвержены до 60% устройств под Android.
Как держать Android Instant Apps под контролем
Как и полноценные программы на вашем телефоне, «мгновенные приложения» стоит держать под контролем. Как минимум, будет полезно периодически просматривать список тех из них, которыми вы недавно пользовались. Чтобы сделать это на Android-устройствах, зайдите в Настройки, выберите Google и нажмите Приложения с мгновенным запуском. Там же можно удалить эти приложения или вовсе выключить функцию мгновенного запуска.
Также у нас есть хорошие новости. Мы придумали и недавно запатентовали технологию, которая позволяет защищать смартфон от вредоносных приложений с мгновенным запуском. Так что можете не переживать — просто установите Kaspersky Internet Security для Android, и вам будут не страшны ни обычные зловредные приложения, ни «мгновенные».
Google Play Instant. Рефакторинг длиною в жизнь
Когда ввязываешься в Early Access Program, никогда заранее не знаешь, что получится в итоге. Конечно, надеешься, что технология взлетит, а твое приложение опередит рынок и получит порцию пиара на Google I/O. И это неплохая мотивация, чтобы на начальном этапе вместо документации читать исходники, которые к тому же надо качать из секретного архива.
На AppsConf Евгений Сатуров показал, во что может вылиться участие в Early Access на примере разработки приложения с мгновенным запуском, по дороге поясняя все особенности Google Play Instant. В расшифровке его доклада разберёмся, откуда пошли Android App Bundles, при чём тут вообще Dynamic Delivery, познакомимся с новыми Gradle-плагинами, и узнаем, как быть с неожиданностями, которые приготовили для нас разработчики SDK.
О спикере: Евгений Сатуров (saturovv) работает в компании Surf, которая занимается заказной Android и iOS-разработкой, а с недавнего времени еще и разработкой на Flutter. Евгений Flutter-энтузиаст и основатель FlutterDevPodcast.
Краткий экскурс в историю
Два года назад к нам в Surf пришел замечательный парень и говорит: «У нас есть технология, о которой пока мало, кто знает. А у вас есть заказчики и интересные кейсы. Давайте, мы дадим вам нашу технологию, вы ее куда-нибудь интегрируете, и получится классный симбиоз. Мы пропиарим это на Google I/O и всем будет хорошо».
На самом же деле, работа с Early Access Program — это кот в мешке. Приходится работать с сырым кодом, который, понятное дело, не всегда работает так, как задумано и описано. В нашем случае:
Все это стало возможным благодаря нашему постоянному партнеру — компании Лабиринт — крупнейшему интернет-магазину книг и канцтоваров в России. Они включились в проект, даже не будучи уверенными, будет ли какой-то бенефит в итоге. И тому, что в 2017 году Surf, как студия, была частью программы Программе Google Certified Agency. К сожалению, программу закрыли в этом году.
Android Instant Apps
В 2017 для того чтобы приложение запускалось без установки, оно должно было быть распилено на модули правильным образом.
У нас появились новые Gradle-плагины, которые генерировали соответствующие артефакты:
Но это было долго и дорого по ряду причин:
Но справедливости ради, внедрение Instant App в Лабиринте дало 5% прироста к покупкам через мобильный клиент.
2019. Google Play Instant
Прошло два года, на дворе 2019 — Instant Apps все еще существует, но не как самостоятельная технология. Она до сих пор очень редко встречается в продакшене, я не искал специально, но знаю только несколько примеров: это Sports.ru, Vimeo. Вряд ли Google рассчитывал на такой результат, когда анонсировал эту технологию.
Теперь Instant App называется иначе — Google Play Instant. Смена названия помогла отсеять неактуальную документацию. Если видите Android Instant App, сразу понятно, что это уже неактуально.
Кроме названия сменилось и все остальное, в том числе модульная структура. Требования стали более лояльными. Технология совершенно по-другому интегрируется в проект и не требует столь болезненного рефакторинга, что, безусловно, хорошо.
Но что менее очевидно и на мой взгляд гораздо более важно — эта технология, так и оставшись очень нишевой и редкой, стала прародителем целого семейства технологий, в составе которого теперь поставляется.
Изначально Google позиционировал Instant App как технологию, которая привлекает людей в бизнес, не в приложения. Был design-guideline, который запрещал делать лэндинг-приложения с одной кнопкой «Скачать полное приложение». Но побочно была решена другая фундаментальная проблема, и подозреваю, это произошло случайно.
В феврале этого года свет увидело замечательное устройство Samsung Galaxy S10+ с 1 Тб памяти на борту. Только вдумайтесь — один терабайт! Зачем столько нужно?!
Согласно официальной статистике Google, за последние 7 лет средний размер APK увеличился в 5,5 раз.
Размер сборки действительно имеет значение, исследование этой статистики показывает:
Последние все сложнее игнорировать, потому что в 2018 году именно Индия показала невероятный прирост по установкам.
Обратите внимание, там совсем мало iOS, а суммарное количество установок Android-приложений превышает таковое в США, Бразилии и Индонезии вместе взятых.
Теперь понятно, какую проблему можно решить при помощи Google Play Instant. Можно переходить к непонятным терминам.
Android App Bundle
Android App Bundle — новый формат публикации приложения в Google Play. Внутри все не сильно отличается от APK: все те же самые dex-файлы, manifest, resources, assets и т.д. и т.п. Но есть еще Metadata, которая не попадает на устройство пользователя.
Metadata представлена тремя файлами: resources.pb, assets.pb, native.pb. Фактически это таблицы соответствия ресурсов, которые есть в сборке, и конфигурационных настроек устройств.
Android Dynamic Delivery
Все знают о существовании App Signing by Google Play. Но не все готовы хранить релизный ключ своего приложения в Google Play, потому что пути назад не будет. Слезть с App Signing by Google Play невозможно.
Один раз отдав релизный ключ в Google Play, вы потом никогда не сможете подписывать свое приложение как раньше, на своей стороне. Но в обмен на это вы можете пользоваться всеми преимуществами, которые дает Android App Bundle как формат. А процесс подписи сборки будет выглядеть отныне немножко иначе.
Вы все еще будете подписывать сборку перед деплоем в Google Play, но вы будете подписывать ее upload-ключом, который не является уникальным. Его можно отозвать из консоли, перевыпустить, если он скомпрометирован или утерян. Свой релизный ключ вы отдаете в консоль и прощаетесь с ним — Google теперь будет подписывать сборку за вас и клянется, что сохранит ваш ключ в безопасности.
Однако, если вы не отдадите релизный ключ в Google Play, то не сможете применить в своём проекте ничего из того, о чем дальше пойдет речь. Google закручивает гайки, и даже Instant App, не отдавая ключ, теперь задеплоить не получится.
На самом деле это совсем не смешно, потому что люди, которые купились на промоушен Instant App и влезли во всю эту историю, отрефакторили свои приложения, но по каким-то причинам не могут отдать свой ключ в Google Play (либо отдел безопасности категорически против, либо по другим объективным причинам) оказались в ситуации, когда они дальше не могут поддерживать это решение. Сотни часов работы фактически оказались выброшенными на помойку.
2014. В Android Lollipop появляется поддержка Split APK
Раз мы сегодня ностальгируем, вернемся еще раньше в прошлое — в 2014 год.
До сих пор помню, как на мой NEXUS 5, лучший телефон на свете, прилетела сборка Android Lollipop c невероятным material-дизайном, который выглядел просто бомбически. Но были изменения, которые остались для многих незамеченными — это поддержка Split APK.
Split APK — механизм, который позволяет разбивать приложение на маленькие APK и, устанавливая на одно устройство, заставлять их вести себя как единое приложение.
Запомните это, и пойдем дальше.
Android Dynamic Delivery — это новый формат дистрибуции приложений в Google Play.
Был у нас раньше APK, теперь появляется еще Android App Bundle, пока что как альтернатива. AAB выступает инкубатором-генератором этих самых Split APK. AAB выкатывает банч APK, которые дальше можно использовать как обычное приложение, установив их параллельно.
Разберемся, что это за APK.
Как минимум, это базовый APK, который играет ту же самую роль, что и в Instant App: это базовый код, базовые ресурсы и бизнес-логика, которая шарится между всеми фичами.
Кроме того появляются:
Теперь такой механизм позволяет получать пользователю только тот набор ресурсов, который нужен конкретно для его устройства. Человек приходит в Google Play, выбирает приложение, Google Play понимает характеристики устройства пользователя, и отдает тот набор Split APKs, который нужен — по одной APK из каждой категории.
Типы Dynamic Delivery APK:
Прощай, Split
Вы можете возразить, что и раньше можно было делать что-то подобное, вручную генерируя кучу APK только с нужным набором ресурсов, потом это все вручную деплоить в Google Play.
Сама по себе эта затея достаточно сомнительная, а теперь все это просто игнорируется. Если вы собираете Android App Bundle, появляется блок Bundle, который позволяет отключать вручную разбиение проекта по одной из категорий.
Можно указать, что приложение поддерживает, например, только русский или только английский язык, и пропустить этот этап при сборке.
Самые внимательные, наверное, сейчас думают о том, что же делать с preLollipops. Только в Android 5 появилась поддержка Split APK. Из этой ситуации надо как-то выходить, потому что Min SDK еще далеко не у всех 21-й.
Для preLollipops из ситуации выходят достаточно топорным, но единственно возможным образом. Google Play собирает Multi-APK для preLollipops, которые включают в себя всевозможные комбинации конфигурационных APK. APK в итоге один, но его вариантов очень много.
Android App Bundle меняет нашу жизнь
И очень существенно. Во-первых, собирать проект, может быть, стало значительно проще, особенно если раньше вы вручную собирали Split APK. Но по моим наблюдениям таких людей не очень много.
Во-вторых, вы больше не рискуете утратить или скомпрометировать релизный ключ. Не будет большой трагедии, если вы потеряете свой Upload Key, его можно отозвать и перевыпустить.
Не будем показывать пальцем — в топе российского Google Play есть приложения, у которых релизные ключи уже давно на 4PDA, все кастомные сборки подписаны релизным ключом, и в ближайшие лет пять с этим ничего не сделать. Остается ждать перехода на Signing V3, который появился только с 28 API.
Безусловное преимущество Android App Bundle: пользователи перестают расходовать трафик и место на диске на ненужные им ресурсы. Это очень повышает retention приложения.
Но если у вас вся графика в векторе, две локализации и нет нативных библиотек, то выгода будет микроскопическая.
Dynamic Feature Module
Dynamic Feature Module — это функциональный модуль, который не поставляется при установке приложения, а докачивающийся из Google Play и устанавливающийся только по требованию.
Такие модули встают на один уровень с базовым APK.
Важно, что каждый из этих feature module сам по себе тоже содержит набор конфигурационных Split APK. Соответственно, общее количество APK может увеличиться сверх всякой меры. Но это совершенно не ваша забота, этим занимается Google Play.
Области применения Dynamic Feature Modules:
Фичи, используемые очень малым процентом аудитории, но, тем не менее, важные для вашего продукта. Например, это контентное развлекательное приложение, и 95% его пользователей потребляют контент. Но есть очень маленький процент редакторов, которые контент генерируют. Для них есть крутой видеоредактор, который весит реально много, работает невероятно круто. Тогда не имеет смысла утяжелять сборку для всех и каждого, можно вынести эту фичу в Dynamic Feature Module, и предоставить её только тем, кому она нужна, докачивая ее уже потом.
Тяжёлые фичи, не относящиеся к основному сценарию использования приложения. Например, AR-навигация в картографическом сервисе. Любая AR-фича самое то, чтобы вынести ее в Dynamic Feature Module.
Фичи, которые должны быть доступны пользователям без установки самого приложения (например, выбор товара в каталоге и оформление заказа). Верно, это что-то очень подозрительно все напоминает.
Android Instant Apps — это теперь Instant-Enabled Dynamic Feature Module.
Таким образом получается, что есть два типа Dynamic Feature Modules:
Такое часто можно встретить в разделе с играми. Это удобно и даже более применимо, чем к приложениям, потому что можно скачать маленький кусочек игры как демку и посмотреть, что это вообще такое, стоит ли тратить свой трафик и время.
Модульная структура
Я уже говорил, что модульная структура упростилась. Посмотрим, как именно.
Изначально у нас была достаточно монструозная структура. Среди прочего в ней были пустые модули, например, Instant App Module всегда был пустой, в нем не было ни кода, ни ресурсов, а только файл build.gradle и все.
Разработчики подумали, зачем тогда плодить лишние модули только для того, чтобы собирать артефакты определенного типа. И выпилили его, а функциональность перенесли в App Module.
Но потом они пошли еще дальше и подумали — зачем нужен Base Feature Module? От него одни проблемы, потому что мы инициализируем там все, а у него Application ID другой. Отсюда идут костыли, например, передача Application ID из App Module в Base Feature Module, и подстановка его как настоящего Application ID приложения, чтобы все трекалось в Crashlytics и т.д.
В итоге получилось так.
Оставили App Module, к нему сверху приделали Feature Modules — и всё!
Не передать мои эмоции, когда я об этом узнал. Ребята с большой сцены заявили, что у них есть классная технология: «Давайте все перепиливать приложения под эту структуру!» Но это не работа на 5 минут, а работа с большими последствиями.
В 2017 году иметь монолитное приложение было еще не стыдно. Лабиринт был именно таким, он тогда даже еще не вышел в публичный релиз, а был в бете. На момент, когда мы ввязались в Early Access Program, там уже было порядка 90 экранов. Мы потратили два дополнительных месяца на то, чтобы это все отрефакторить, протестировать и убедиться, что все действительно работает.
И после этого они говорят: «Мы перемудрили, можно гораздо проще сделать».
Но вернемся к прозе.
Конфигурация Gradle-файлов
Для того, чтобы поддержать новую конфигурацию, нам нужно сперва в файле build.gradle app-модуля в блоке Android перечислить все Dynamic Feature Modules:
После этого в build.gradle файле каждого Dynamic Feature Module прописать зависимость на app-модуль:
В принципе, ничего сложного. Но есть еще конфигурация манифестов.
Конфигурация манифестов
Если этого флага не будет, нельзя будет задеплоиться в соответствующий трек в Google Play.
Кроме того, есть еще конфигурация манифеста каждого Dynamic Feature Module в отдельности, в котором больше настроек:
Первые два флага немножко взаимоисключающие, потому что onDemand — это обычная базовая фича, а instant — это та самая Installable фича.
Title — техническое название модуля, по которому мы потом, захардкодив его в нашем приложении, будем выкачивать этот модуль из Google Play.
Параметр include — параметр для preLollipops. Если установить его значение false, то пользователи preLollipops никогда эту фичу не увидят и не смогут ей воспользоваться.
Конфигурация Gradle-projects
Жизнь instantapp-плагина и feature-плагина была достаточно короткой, но яркой. Они просуществовали менее двух лет. С марта этого года они больше не поддерживаются.
Теперь остался только один Dynamic Feature Module, который мы и используем:
Конфигурация проекта только в app-модуле
Важный момент: все настройки, касающиеся подписи (signing-конфигурация), сборки (ProGuard-конфигурация), versionCode и versionName нужно делать только в build.gradle app-модуля.
Иначе, они будут проигнорированы. Избегайте указания какого-либо из этих конфигурационных блоков в build.gradle-файлах dynamic feature-модулей.
Google Play Instant
Сейчас мы имеем следующее.
Требования к модульной структуре максимально упростились. Это действительно хорошая новость для тех, кто в это пока не ввязывался. Теперь можно попробовать, даже если у вас приложение со своей принципиальной структурой. Это совершенно не повлияет, вы можете просто приделать модуль сверху, и все будет хорошо работать.
Ограничения на размер сборки стали лояльнее. Если раньше было 4 Мб, то теперь:
Это реальный кусок кода из Chrome под Android, который перехватывал ссылку на ваш Instant App, шел в Google Play и подставлял оттуда Instant Apps. Если Instant App обнаруживался, он вам каким-то образом открывал activity, из которой потом запускался Instant App.
Отсюда были огромные проблемы с раскаткой этой фичи. С Samsung это вообще отдельная история, я подозреваю, что их встроенный браузер имеет несколько большие привилегии, нежели Chrome. Instant App там не работал до последнего.
Play Core Library позволяет забыть о проблемах доставки. Вы просто подключаете ее как пакет:
И загружаете нужные вам feature-модули из Google Play.
У библиотеки достаточно функциональный синтаксис, который позволяет скачивать модули поодиночке:
Или сразу пачкой по несколько:
Показывать это в UI и реагировать на то, что модуль был установлен.
Play Core Library — хорошее начинание:
Нет хорошей практики для навигации между feature-модулями. В официальных примерах, которые показывают, как происходит взаимодействие между feature-модулями, из ситуации предлагают выходить достаточно просто: включите зависимость с одного модуля на другой. В каждом направлении своя зависимость, зачем обратно возвращаться?
Но тогда теряется вся выгода от разбиения на модули. Мы перешли к модулям задолго до того, как возникла необходимость решать такие проблемы. И сделали это отчасти потому, что это упрощает работу с кодовой базой для неопытных разработчиков, которые по неопытности могут с base-activity обратиться к signing-activity — потом ищи это на код-ревью.
Если вы будете связывать все модули зависимостями вдоль и поперек, то хорошо от этого будет только Google, которому не надо будет ничего придумывать насчет навигации.
Мне было стыдно кому-либо про это рассказывать до тех пор, пока я не зашел в репозиторий приложения Plaid и не увидел, что они решили проблему с навигацией точно так же и советуют всем делать так на Stack Overflow.
Plaid — это один из самых крутых шоу-кейсов, с ними Google пробует все свои самые последние тенденции, крутые анимации, дизайн-приемы, последние UI-компоненты и, в частности, модульность.
Много, действительно много багов, недоинжиниринга, шероховатостей. Искать баги особо долго не придется.
Разработчики советуют: добавить в иерархию feature-модуль, в котором нет ничего, кроме зависимости на стороннюю библиотеку, и сделать на него зависимости от двух исходных feature-модулей.
Наконец, после того, как вы и это преодолеете, вы обнаружите, что…
Dynamic Features всё ещё в Beta! Вы не можете задеплоиться в продакшен — вы всё это время были бесплатным тестировщиком для Google!
Но не по мнению Google. Если вы хотите им стать, то можете заполнить Interest Form и, быть может, вам повезет и вам дадут доступ задеплоиться в продакшен.
Есть мнение, что Instant Apps проиграл эту битву. Вряд ли об этом объявят в ближайшие годы, но повышенная информационная активность вокруг AMP негласно это подтверждает.
Мысль, которую я хотел напомнить вам и себе самому — пишите для людей. Трижды подумайте, прежде чем принять какое-то решение, особенно, если занимаетесь разработкой средств, которыми будут пользоваться другие разработчики. Каждое ваше решение и действие скажется на ком-то и, возможно, попортит ему немножко крови. Не хотелось бы стать причиной расстройства для кого-то.
Полезные ссылки
Мы сделали программу Saint AppsConf, которая уже 21-22 октября в Санкт-Петербурге, еще более насыщенной и разнообразной, чем она была весной. Check it out!
Или подпишитесь на рассылку, telegram, fb — там рассказываем об отдельных докладах и подготовке к конференции.