Мгновенная установка приложений (комплект приложений) и мгновенная активность - PullRequest
0 голосов
/ 29 мая 2019

Я изо всех сил пытаюсь определить хорошую архитектуру мгновенного приложения для моего приложения.В настоящее время приложение имеет структуру мгновенного приложения старого стиля.Прямо сейчас я преобразовываю это в динамические модули.Пока у меня это работает для устанавливаемой версии.Но я изо всех сил пытаюсь заставить мгновенные функции работать, потому что я не знаю, как правильно определить точку входа.Приложение только для одного действия и использует глубокие ссылки для навигации.В старой архитектуре мгновенных приложений я использовал для каждого функционального модуля отдельный файл manifest.xml со своей собственной активностью.У устанавливаемого модуля было что-то похожее.Теперь с динамическими модулями вы должны указывать из базового manifest.xml на одно отдельное действие, которое также должно находиться в том же базовом модуле.

Но это не то, что я хочу.Устанавливаемое действие сильно отличается от мгновенного приложения.

В настоящее время у меня есть следующие модули:

  • База
  • Комбинированная
  • Feature_A
  • Feature_B
  • Feature_C

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

Теперь у меня есть следующие вопросы:

  1. В файле manifest.xml в базовом модуле необходимо определить действие по умолчанию.Сейчас он указывает на активность моего комбинированного (устанавливаемого) модуля.Идеально для мгновенных приложений, я хочу иметь другую активность по умолчанию.Это возможно?

  2. Я могу создать действие внутри базового модуля.Но оттуда я не могу достичь какого-либо класса / деятельности в любом модуле.Таким образом, нельзя создать промежуточное действие в базовом модуле и оттуда, в зависимости от того, является ли оно мгновенным или установленным, загрузить нужное действие.Как с этим справиться?

  3. Нужно ли добавлять точки входа (фильтры намерений URL) в базовый манифест или в каждый динамический модуль?

1 Ответ

0 голосов
/ 31 мая 2019

Во-первых, позвольте мне представить вам блог : более простое использование мгновенных приложений , Создание набора приложений с мгновенной поддержкой и О пакетах приложений Android

dist:onDemand | dist:instant

  • false | true = модуль мгновенного приложения, также будет включен в установленное приложение
  • false | false = установленный только модуль
  • true | false = модуль только для установки по требованию

Во-вторых, в новой модели вы заметите, что com.android.application теперь является «базой». Ладно, просто, ваша "старая база", которая когда-то была com.android.feature, теперь будет все внутри com.android.application (сначала сбивает с толку, но теперь она по сути действует как библиотечный модуль ?? yep! )

Хорошо, я предполагаю, что ваш "Комбинированный" раньше был com.android.application модулем? Вы можете поместить это в модуль динамических функций: false | false (установлен), это ограничит его установленным приложением.

Ваши модули "Feature_X", ранее не являющиеся базовыми com.android.feature модулями, теперь все могут быть модулями динамических функций, включенными на мгновение: false | true (мгновенно).

Теперь активность по умолчанию для вас все та же, я думаю. MainActivity вашего установленного приложения в "Комбинированном", верно? А Instant Apps всегда полагался на местоположение URL-адреса по умолчанию для его Try Now, где бы вы его ни установили. Итак, я думаю, что это все равно для вас?

Проблема " не может достичь " теперь заключается в том, что ни один из этих модулей не видит друг друга, кроме базы / приложения, находящихся в корне. В отличие от ранее, Combined / app мог по крайней мере видеть все функции в виде библиотек. Теперь вам нужно обратиться к ним по имени класса или по их фильтру намерений / URL-адресам или т. Д.

Точки входа? Это должна быть установка, аналогичная предыдущей:

  • Как установлено приложение: база + в сочетании + a + b + c
  • Как приложение для мгновенного использования: base + (a, b, c)

Но я неправильно прочитал? Ваши текущие функциональные модули старой модели содержат только «фрагменты» для вашего MainActivity? Никакой собственной или индивидуальной активности, чтобы удерживать каждого? (Тогда как установленное приложение, эти действия будут игнорироваться, и будут собраны только фрагменты для действия одного установленного приложения?)

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

...