Статьи

Что такое Android Instant Apps?

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

Эти цели могут быть очень конкретными, например, генерировать определенную сумму дохода от рекламы в первом квартале, или они могут быть более общими, например получать высокий рейтинг в Google Play.

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

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

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

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

В этом первом посте я сосредоточусь на том, что такое Instant Apps, как они работают и почему вы должны заботиться о них. Чтобы получить представление о мгновенных приложениях из первых рук, мы будем использовать мастер создания проектов Android Studio для создания приложения, предварительно настроенного с поддержкой мгновенных приложений, чтобы вы могли видеть все различные компоненты Instant App, а не чем просто читать о них.

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

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

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

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

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

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

Теперь давайте снова представим наш видео-сценарий cat, но на этот раз разработчик приложения разместил весь код и ресурсы, необходимые для воспроизведения видеоконтента, в своем собственном модуле быстрого доступа к приложениям и сопоставил этот модуль с URL-адресом www.example.com/video . На этот раз, когда вы нажимаете www.example.com/video/cat-video , Google Play распознает, что этот URL-адрес связан с модулем мгновенного приложения, и извлекает весь код и ресурсы, необходимые для воспроизведения этого видео. Конечный результат? Вы можете наслаждаться 20-секундной игрой кошки в коробке без необходимости устанавливать что-либо, что намного удобнее для пользователя.

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

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

  • Это устраняет барьер между вашим приложением и новыми пользователями. Установка приложения через Google Play не является особенно сложным или трудоемким процессом, но все же это самый большой барьер между вашим приложением и потенциальными новыми пользователями. Независимо от того, сколько времени вы потратите на создание привлекательной страницы Google Play, на которой большинство пользователей будут искать эту кнопку « Установить» , некоторые люди всегда будут выбрасываться во время установки.
  • Это помогает вам достичь новых пользователей. Несмотря на то, что вы всегда могли продвигать свое приложение в различных местах в Интернете, например на своем собственном веб-сайте, в блоге или в социальных сетях, связь с новыми пользователями ранее зависела от того, посещают ли они страницу Google Play вашего приложения (с редкое исключение пользователей, которые предпочитают загружать свои приложения). Мгновенные приложения убирают эту зависимость со страницы вашего приложения в Google Play, делая ваше приложение напрямую доступным из любого места, поддерживающего URL-адреса, предоставляя вам практически неограниченные возможности для связи с новыми пользователями.
  • Это гарантирует, что общий контент является наилучшей рекламой для вашего приложения. Пользователь, делящийся контентом вашего приложения, является одним из наиболее эффективных способов привлечения новой аудитории, поэтому вам захочется произвести хорошее первое впечатление! Раньше было непросто обеспечить согласованное взаимодействие для пользователей, у которых на вашем устройстве не установлено ваше приложение, но мгновенные приложения позволяют вам гарантировать бесперебойную работу для всех .
  • Помогает пользователям получить доступ к вашему приложению даже в условиях ограничений Интернета. Несмотря на то, что покрытие интернета все время улучшается, вы все равно иногда можете изо всех сил пытаться найти быструю и надежную сеть, или, возможно, вы приближаетесь к своему ежемесячному разрешению на передачу данных и беспокоитесь о дополнительных сборах. Когда вы боретесь с медленным или несогласованным подключением к Интернету, загрузка всего приложения может быть трудоемким и разочаровывающим процессом, а когда вы рискуете превысить допустимый объем данных, для загрузки может потребоваться загрузка нового приложения. дополнительные расходы. Все мгновенные модули приложения должны иметь размер 4 МБ или меньше, поэтому даже если загрузка всего приложения не может быть и речи, доступ к модулю мгновенного приложения все еще может быть приемлемым вариантом.
  • Увеличьте привлекательность местоположения и чувствительных ко времени приложений. Хотя приложения, разработанные для определенного места или события, не являются новой концепцией, спросите себя: насколько я могу установить приложение, которое, как я знаю, я смогу использовать только в течение ограниченного периода времени или в определенное место? Мгновенные приложения могут повысить привлекательность приложений, чувствительных ко времени и местоположению, позволяя пользователю получить доступ ко всем наиболее важным функциям вашего приложения по нажатию URL-адреса.

Прежде чем мы начнем наше мгновенное путешествие по приложениям, стоит отметить, что в настоящее время есть несколько вещей, которые мгновенные приложения не могут сделать:

  • Получите доступ к идентификаторам устройств, таким как IMEI и MAC-адреса.
  • Используйте фоновые сервисы.
  • Выполнять фоновые уведомления.
  • Доступ к внешнему хранилищу устройства.
  • Получите доступ к списку приложений, установленных на устройстве пользователя, если только эти приложения не сделали себя доступными для мгновенных приложений.

Кроме того, ваша заявка должна:

  • Быть доступным для бесплатного скачивания в магазине Google Play.
  • Используйте новую модель разрешений, представленную в Android 6.0 (уровень API 23). Поскольку пользователь не устанавливает мгновенное приложение, нет возможности запрашивать разрешения заранее. Если для вашего модуля (ей) мгновенного доступа к приложениям требуется доступ к конфиденциальным возможностям устройства или информации о пользователе, вам потребуется запросить эти разрешения во время выполнения.
  • Поддержка приложений Ссылки. Это механизм, который вы будете использовать для сопоставления каждого из ваших модулей мгновенных приложений с определенным URL. Я подробно расскажу о ссылках на приложения в следующем посте.

Наконец, если ваше приложение является частью программы « Разработано для семей », вы не можете предлагать его в качестве мгновенного приложения.

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

  • Android Studio 3.0 Предварительный просмотр
  • Android SDK 6.0
  • Инструменты сборки Android SDK 26.x
  • Android SDK Tools 25.x
  • Инструменты платформы Android SDK 25.x

Вам также следует убедиться, что у вас установлены последние версии библиотеки поддержки Android и репозитория Android, поэтому откройте SDK Manager в Android Studio и установите все доступные обновления.

Установив все вышеперечисленное, вы сможете загрузить SDK Instant Apps Development:

  • Откройте SDK Manager и выберите вкладку SDK Tools .
  • Выберите Instant SDK для разработки приложений .
  • Нажмите Применить .

В настоящее время вы можете тестировать только мгновенные приложения на Nexus 5X, Nexus 6P, Pixel, Pixel XL или Galaxy S7 под управлением Android 6.0 или выше. Однако, если у вас нет ни одного из этих устройств, вы можете создать виртуальное устройство Android (AVD), которое эмулирует одно из этих устройств, при следующих условиях: AVD должен использовать образ x86 и включать API Google. ,

Поскольку у меня нет ни одного из этих устройств, я собираюсь создать AVD, который эмулирует пиксель:

  • Запустите AVD Manager.
  • Нажмите кнопку Создать виртуальное устройство …
  • Выберите Pixel , а затем нажмите Next .
  • Выберите вкладку x86 Images .
  • Выберите образ системы, работающий под управлением Android 6.0 и включающий API Google, например Marshmallow / 23 / x86 / Android 6.0 (API Google) .
  • Нажмите Далее .
  • Дайте вашему AVD имя и нажмите Finish .
  • Запустите свой AVD.

Наконец, вам необходимо войти в учетную запись Google на своем AVD:

  • Переключитесь на AVD и откройте панель запуска устройства.
  • Выберите приложение Google .
  • Введите адрес Gmail и пароль. Это может быть ваша реальная учетная запись или учетная запись, созданная вами исключительно для тестирования ваших проектов Android.

В Android Studio 3.0 Preview 1 и более поздних версиях создание проекта со встроенной поддержкой Instant App так же просто, как установить флажок, вместо того, чтобы просто описывать функции Instant App, мы собираемся создать проект Instant App, а затем потратить остальная часть этой статьи получит некоторый непосредственный опыт с его различными компонентами.

Просто имейте в виду, что в этом проекте нет ссылок на приложения, поэтому вы не сможете протестировать его компоненты Instant App на своем AVD (это то, что мы подробно рассмотрим во второй части).

Чтобы создать свой проект:

  • Запустите мастер создания проекта, выбрав « Файл»> «Новый»> «Новый проект» на панели инструментов Android Studio или нажав « Начать новый проект Android Studio» на экране приветствия Android Studio.
  • Дайте вашему проекту имя и нажмите « Далее» .
  • Установите Минимальный SDK для Android 6.0 (Зефир).
  • Установите флажок Включить поддержку приложения Android Instant и нажмите « Далее» .
  • Чтобы упростить задачу, примите имя модуля по умолчанию ( функция ) и нажмите « Далее» .
  • Выберите « Основные действия» и нажмите « Далее» .
  • На следующем экране примите все значения по умолчанию и нажмите кнопку « Готово» .

Сразу видно, что этот проект сильно отличается от вашего типичного проекта Android и состоит из следующих модулей:

  • Приложение. Устанавливаемый модуль приложения, также известный как модуль APK.
  • База. Базовый функциональный модуль.
  • Особенность. Хотя этот конкретный проект имеет только один, приложение может состоять из нескольких функциональных модулей.
  • Instantapp. Модуль мгновенного приложения.
Projects with instant app support are structured differently to regular installable-only projects

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

Концепция модуля приложения может быть чем-то новым, но когда ваш проект поддерживает мгновенные приложения, Manifest модуля приложения выглядит намного более пустым, чем вы, вероятно, привыкли:

1
2
<manifest xmlns:android=»http://schemas.android.com/apk/res/android»
 package=»com.jessicathornsby.myapplication.app» />

Есть причина, по которой этот файл такой пустой: когда вы создаете свой проект, содержимое всех других файлов манифеста, расположенных в вашей базовой функции и функциональных модулях, объединяется с этим файлом, поэтому он не будет оставаться пустым вечно!

Если вы откроете файл build.gradle этого модуля, то заметите два новых элемента:

1
2
3
4
dependencies {
   implementation project(‘:feature’)
   implementation project(‘:base’)
}

Здесь мы заявляем, что наш прикладной модуль зависит от feature модуля и base модуля.

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

Каждый мгновенный проект приложения должен включать в себя один базовый функциональный модуль, который содержит код и ресурсы, используемые во всех модулях вашего приложения. Например, если вы откроете папку нашего проекта base / res / mipmap , то увидите все значки запуска приложения, которые явно будут использоваться в нескольких модулях.

The base feature module includes the ic_launcher drawables

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

Продолжая эту тему, модуль базовых функций содержит записи Manifest, которые используются во всем вашем проекте. Например, файл base / src / main / AndroidManifest.xml вашего проекта содержит настройки для значка, темы и метки вашего приложения:

01
02
03
04
05
06
07
08
09
10
11
<manifest xmlns:android=»http://schemas.android.com/apk/res/android»
   package=»com.jessicathornsby.myapplication»>
 
   <application
       android:allowBackup=»true»
       android:icon=»@mipmap/ic_launcher»
       android:label=»@string/app_name»
       android:roundIcon=»@mipmap/ic_launcher_round»
       android:supportsRtl=»true»
       android:theme=»@style/AppTheme» />
</manifest>

Другим заметным элементом является файл build.gradle базового модуля, который содержит несколько новых атрибутов:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//All base feature and “regular” feature modules use the com.android.feature plugin, rather than the com.android.application plugin//
 
apply plugin: ‘com.android.feature’
 
android {
   compileSdkVersion 26
   buildToolsVersion «26.0.0»
 
//Specify that this is the project’s one and only base feature, using the ‘baseFeature true’ expression//
 
   baseFeature true
dependencies {
 
//Use ‘application project’ to add a dependency from the base feature module, to your project’s installable ‘app’ module//
 
   application project(‘:app’)
 
//Use ‘feature project’ to reference our project’s feature module, aptly named ‘feature’//
 
   feature project(‘:feature’)

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

Строка application project( : app) в файле build.gradle нашего базового модуля (см. Выше) обеспечивает распространение одного атрибута applicationID проекта во всех наших файлах build.gradle , поэтому этот атрибут отсутствует в остальных наших проект.

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

Если вы откроете функциональный модуль нашего проекта, то увидите, что он содержит класс MainActivity , а также файлы ресурсов activity_main и content_main — по существу, все компоненты, включенные в шаблон Basic Activity .

The projects feature module contains all the code and resources that are specific to this feature

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

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

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

  • Фильтр намерений с намерениями CATEGORY_LAUNCHER и ACTION_MAIN .
  • Элемент <data> содержащий всю информацию об URL-адресе, который вы хотите сопоставить с этой точкой входа.
  • android:autoVerify . Это говорит системе проверить, что у вашего приложения есть разрешение выступать в качестве обработчика по умолчанию для этого конкретного URL. Это важный механизм безопасности, который помогает защитить владельцев веб-сайтов от вредоносных приложений, которые могут попытаться взломать их URL-адреса.

Если вы откроете файл манифеста нашего функционального модуля, то увидите, что весь этот код уже добавлен в наше объявление MainActivity :

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
<activity
  android:name=».MainActivity»
  android:label=»@string/app_name»
  android:theme=»@style/AppTheme.NoActionBar»>
  <intent-filter android:order=»1″>
      <action android:name=»android.intent.action.VIEW» />
 
      <category android:name=»android.intent.category.BROWSABLE» />
      <category android:name=»android.intent.category.DEFAULT» />
 
      <data
          android:host=»jessicathornsby.com»
          android:path=»www.example.com/MainActivity»
          android:scheme=»https» />
  </intent-filter>
  <intent-filter>
      <action android:name=»android.intent.action.MAIN» />
 
      <category android:name=»android.intent.category.LAUNCHER» />
  </intent-filter>
   <intent-filter android:autoVerify=»true»>

Последний файл, который мы рассмотрим в этом модуле, это файл build.gradle , который содержит несколько строк заслуживающего внимания кода:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
//Again, we’re using com.android.feature plugin, rather than com.android.application//
 
apply plugin: ‘com.android.feature’
 
android {
 
//As previously mentioned, this section is missing an ‘applicationID’ attribute//
 
dependencies {
   implementation fileTree(dir: ‘libs’, include: [‘*.jar’])
   androidTestImplementation(‘com.android.support.test.espresso:espresso-core:2.2.2’, {
       exclude group: ‘com.android.support’, module: ‘support-annotations’
   })
 
//All feature modules have a dependency on the base feature module, which we’re declaring here//
 
   implementation project(‘:base’)
   testImplementation ‘junit:junit:4.12’

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

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

Модуль Instant App имеет простую цель: он действует как контейнер, который берет все ваши функциональные модули и превращает их в APK-приложения Instant App.

Если вы откроете модуль Instant App этого проекта, то увидите, что он почти пустой, кроме файла build.gradle , который просто объявляет ваш базовый функциональный модуль и ваш функциональный модуль как зависимости:

1
2
3
4
5
6
apply plugin: ‘com.android.instantapp’
 
dependencies {
   implementation project(‘:feature’)
   implementation project(‘:base’)
}

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

Запустите AVD, который мы создали ранее, или подключите совместимый физический смартфон или планшет Android к компьютеру для разработки, а затем выберите « Выполнить»> «Выполнить…»> приложение на панели инструментов Android Studio.

Несмотря на то, что весь наш код MainActivity находится в функциональном модуле, после загрузки нашего приложения вы увидите MainActivity плавающего действия (FAB) MainActivity и сообщение Hello World . Здесь мы видим, что наш модуль приложения берет код и ресурсы, расположенные в отдельных модулях мгновенных приложений и базовых функциональных модулях, и объединяет их в устанавливаемое приложение.

В этом руководстве мы подробно рассмотрели, как работают Instant Apps, и рассмотрели различные причины, по которым вы можете захотеть добавить поддержку Instant App в свои проекты Android.

В идеальном мире ваше решение начать использовать Instant Apps будет полностью совпадать с началом нового проекта Android, но, к сожалению, быть разработчиком редко бывает так удобно! Скорее всего, вам придется перенастроить существующий проект для поддержки Instant Apps, что не так просто, как установить флажок в мастере создания проектов Android Studio!

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

Будьте на связи! А пока, посмотрите другие наши посты о разработке приложений для Android.

  • Android SDK
    Как использовать платформу автозаполнения Android O
    Ашраф Хатхибелагал
  • Android SDK
    Google I / O 2017 Aftermath: создание компонентов, поддерживающих жизненный цикл
  • Android SDK
    Добавление анимации на основе физики в приложения для Android
    Ашраф Хатхибелагал