Подтвердить что ты не робот

Android Instant App: как создавать URL-адреса?

Недавно Google обновил свою информационную страницу о мгновенных приложениях: https://developer.android.com/topic/instant-apps/prepare.html

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

В: Как разбить приложение на модули, которые полностью функциональны и адресованы URL? Я вижу здесь несколько вопросов: - если мы используем библиотеки, такие как кинжал, butterknife,... все модули будут зависеть от других модулей - если наши модули содержат (представления) по мере необходимости, как должен быть реализован переход к другому представлению (из другого модуля) без импорта этого модуля?

Может кто-то пролил свет в темноту? Спасибо!

4b9b3361

Ответ 1

Правильное разделение модулей, требуемое Instant Apps, можно легко выполнить, выполнив следующие шаги:

  • Создайте общий модуль, который будет содержать код и ресурсы, которые должны совместно использоваться в функциональных модулях.
  • Создайте несколько функциональных модулей для каждой основной функции (в примере, представленном Google: просмотр, поиск, детализация и проверка). Эти модули могут зависеть от общего модуля, созданного на стр .1, но они ничего не должны знать друг о друге.
  • Чтобы начать работу с другого модуля, сделайте целевую активность URL-адресом и запустите ее с помощью неявного намерения. Google предлагает использовать для этого ссылки на приложения.
  • Чтобы создать обычное приложение для Android, создайте модуль приложения, который зависит от функциональных модулей.
  • Как только Google выпустит свой Android InstantApp SDK для общественности, вы можете создавать свои Instant Apps (по одной на каждую функцию).

Ответ 2

Обратитесь к официальным документам, которые теперь доступны для разработчиков.

Подводя итог, все Instant Apps, по крайней мере, имеют так называемый базовый функциональный модуль, который содержит общий код в Instant App. Кроме того, Instant Apps может дополнительно иметь 1 или более дополнительных библиотек функций, которые зависят от базового функционального модуля. Каждый функциональный модуль может иметь свои собственные точки входа, которые адресуются URL-адресами, хотя сами функциональные модули не должны зависеть друг от друга. Если нужно позвонить другому, это можно сделать с помощью намерения на основе URL.

Диаграмма с сайта docs немного помогает:

введите описание изображения здесь

Все функциональные модули используют новый плагин com.android.feature, который используется аналогично традиционному плагину com.android.library с точки зрения того, как вы можете использовать его в своем проекте Android, и поэтому docs можно использовать в качестве ссылки. С точки зрения того, как он отличается, он будет выводить обычный файл AAR при использовании с вашим установочным модулем приложения и выводит функцию APK при использовании с новым модулем Instant App.

Ответ 3

Рассмотрим эту диаграмму. введите описание изображения здесь

В: Как разбить приложение на модули, которые полностью функциональны и адресованы URL?

Базовый модуль: содержит все общие ресурсы, необходимые вашему приложению. Таким образом, в нашем случае все действия с feature1 и feature2 будут использоваться совместно с res из базового модуля. У него могут быть такие библиотеки, как кинжал, butterknife.

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

Feature1: Итак, мы разделили приложение на feature1 и feature2. В этой функции1 мы предоставляем пользователям возможность поиска и поиска элементов. Всякий раз, когда пользователь нажимает на элемент, нам нужно загрузить деталь деталя из функции2, поэтому при щелчке элемента из активности просмотра мы будем называть как

Intent intent = new Intent(Intent.ACTION_VIEW,
                Uri.parse("https://yourdomain.com/itemdetail"));
        intent.setPackage(getPackageName());
        intent.addCategory(Intent.CATEGORY_BROWSABLE);
        startActivity(intent);

Потому что: Activity1 из функции1 не может напрямую вызвать Activity2 в feature2. Для этого вы должны запросить URL-адрес activity2 из Activity1.

feature2: Теперь Feature2 загружен в мгновенное приложение, чтобы мы могли теперь видеть активность элемента.

ПРИМЕЧАНИЕ. Вы также должны учитывать свой размер функции, разделяя функциональность приложения, потому что каждая функция не должна превышать размер 4 МБ, иначе проверка выполняется при загрузке apk для воспроизведения в магазине.

Ответ 4

Я не уверен, что я не понимаю ваш вопрос, но я попытаюсь взломать его. Для моего объяснения ниже я несколько раз ссылаюсь на этот пример кода Google. Я ВЫСОКО предлагаю клонировать это репо и играть с ним, так как я думаю, что он ответит на ваш вопрос.

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

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

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

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

Скажем, Feature1 (BrowseActivity) хочет открыть Feature2 (ItemDetailActivity). Вместо Feature1, вызывающего startActivity(ItemDetailActivity.class) напрямую, ему придется использовать вызов метода ниже (это потому, что Feature1 не имеет доступа к Feature2 ItemDetailActivity.class, так как они НЕ зависят друг от друга). Вот пример кода, предоставленный Google

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://example.com/itemdetail"));
intent.setPackage(getPackageName());
intent.addCategory(Intent.CATEGORY_BROWSABLE);
startActivity(intent);

Теперь недостающая часть состоит в том, что в Feature2 AndroidManifest вам нужно объявить, что ItemDetailActivity прослушивает ссылку https://example.com/itemdetail. Вот пример кода из Google

<activity android:name=".ItemDetailActivity">
    <intent-filter>
      <action android:name="android.intent.action.MAIN" />
      <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    <intent-filter android:autoVerify="true">
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <data android:scheme="http" />
      <data android:scheme="https" />
      <data android:host="example.com" />
      <!-- IMPORTANT -->
      <data android:pathPrefix="/itemdetail"/>
    </intent-filter>
    <meta-data
      android:name="default-url"
      android:value="https://www.example.com/itemdetail" />
</activity>

Для получения дополнительной информации прочитайте Digital Asset Links, а также общий Глубокое связывание

Ответ 5

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

Я начинаю понимать новый способ структуры проекта из этого talk.  Мне это ясно.

Как если бы мы создавали функциональный модуль и хотим привязываться к базовому модулю функции, нам, вероятно, необходимо удалить неиспользуемые ресурсы androidTest test и res.

Также создайте простой проект с новой структурой здесь

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