【インストールせずにすぐ実行できる!】Android Instant Apps を使ってみた

皆さん、こんにちは。王です。

Google I/O 2016 にて発表された Instant Apps。『インストールせずに実行できる』ということで注目を集めましたが、当時は一部のベータ・テスターへの公開に留まっていました。Google I/O 2017 にて全てのデベロッパーへの公開が発表されました。

当エントリでは Instant Apps の概要と実際に使ってみての所感をご紹介します。

Instant Apps とは

アプリの共有と検索の進化形である Android Instant Apps は、Android アプリをインストールすることなく、すぐに実行できるようにします。Instant Apps により、タップするだけで、高速で美しいユーザー インターフェース、高いパフォーマンス、および優れた機能を備えたアプリが使用できるようになります。
Android Instant Apps | Android Developers

モバイル環境から何かしらのサービスを利用するには、web ブラウザから対象のサイト ( web アプリケーション ) にアクセスするか Google Play Store から何メガバイトものアプリをダウンロードするしかありませんでした。web アプリですとネイティブアプリのようなスムースな体験ができない、ネイティブアプリですとダウンロードするのに時間がかかります。

これらの問題を解決するために Instant Apps が生まれました。たったの一タップで使うことが出来てしまいます。

Instant Apps にする三つの利点

1. 新規率の改善 ~ より多くのユーザに届く

あるユースケースを想像してみましょう。あるユーザがビデオアプリでとても面白いビデオを発見し、友人とそれを共有したいと思いました。しかし、友たちはそのアプリをインストールしてません。

今までだと、Google Play Store から [ アプリを探すダウンロード ] => [ インストール ] => [ 特定のビデオを探す ] というフローが必要となり、目的のビデオを観るまで数分はかかってしまいます。しかもそれが得体の知れないアプリであれば「インストールする価値があるのか」と疑問に思う方も少なくないでしょう。

Instant Apps ならこの課題を簡単に解決できます。ユーザが [ アプリページのURLリンクを共有 ] => [ 友たちがそれをクリック ] 。たったこれだけで目的のビデオを観ることができます。面倒な手間を掛けることはありません。

しかも、実際に体験してアプリを入手したい場合、そのまま Instant Apps 内でアプリのインストールができます。

まとめます。

  • 共有された方はインストールするかどうか悩むことなくすぐアプリを体験できる
  • ユーザ同士のコミュニケーションが増え、共有する方のテンションが高まる
  • Instant Apps はネイティブアプリと同じユーザ体験を提供できるので、利用者の増加が期待できる
  • Google Play Store に行かずとも Instant Apps からインストール可能

2. コンバージョン率の改善 ~ アプリを使いこなす

既にインストール済のユーザに対してまだ使われていない機能や新機能をどうやって訴求するかは大きな課題のひとつです。

Instant Apps であればリンクを踏むだけで簡単にアプリのページに辿り着けるので、普段気づかなかった機能やあまり見られなかったページをより手軽に訴求できるようになりました。新機能をどんどんユーザに与え、よりたくさんアプリを使ってもらうことでコンバージョン率の改善も期待できるでしょう。

3. 新しいユースケース

Instant Apps の軽量さとパフォーマンスの良さによって、従来考えてなかったユースケースもどんどん出てくると考えられます。それによってこれまでにないより良いサービスを提供することが可能となるでしょう。

既存のアプリを Instant Apps にするには

Instant Apps apk の中には複数の apk があり、apk 毎にアプリの機能が提供されます。それぞれの機能のエントリポイントは URL で管理され、ユーザがそれらをタップすることで必要な機能の apk が随時ダウンロードされるというわけです。

  • 機能間の遷移が URL ベースなので、URL を設定する
  • 各機能を apk としてビルドするためにプロジェクトをモジュール化する
  • 各機能の apk サイズは 4MB 以下に抑える

Instant Apps のモジュールについて

Instant Apps は既存のアプリと同じコードを使います。新規に別プロジェクトを作る必要はありませんが、feature moduleinstant app moduleを作る必要があります。

feature module は既存の library module と似てますが、ビルドすると Instant Apps のfeature apkが生成されます。Instant Apps は必ず一個のbase feature moduleを含みます。複数機能を提供する場合は base feature moduleから生やすことになります。つまり、base feature apkは必ず各機能と一緒にロードされます。つまり各機能の4MBのサイズ制限にも含まれるので、注意が必要です。

実際にビルドされた Instant App apk は一個もしくは複数の .apk を含む .zip となります。

実際に Instant App にしてみる

以下のようなデモアプリを Instant App にしてみました。画像一覧と詳細を表示する機能があります。

既存のプロジェクトにappというモジュールのみがあります。一覧画面のMainActivityと詳細画面のPhotoDetailActivityを含みます。

今回は既存のアプリから Instant App にしてみましたが、新規からでも簡単に作れます、当エントリでは割愛しますので、興味のある方はこちらをご参照ください。

環境準備

  • Android Studio 3.0 Canary 2
    • Instant Apps が Android Studio 3.0 以降がサポートされます。現在 Canary バージョンしかないので、ご注意ください。
  • Instant Apps Development SDK
    • SDK Tools からインストールする必要があります。

エントリポイント URL を設定する

URLをクリックすると画像一覧画面が立ち上がるようにエントリポイント URL を設定します。Android Studio の Tools => App Links Assistantからの手順に従えば簡単に設定できます。

以上のようにMainActivityPhotoDetailActivityそれぞれ URL を設定します。

モジュール化する

  • appモジュールをbase feature moduleとして変更します。通常のインストールできるモジュールinstalledというモジュールを作ります。

Android Studio が Instant Apps のfeature moduleのため、新しくplugin: 'com.android.feature'を追加しました。

apply plugin: 'com.android.feature'
android {
    ...
    baseFeature true  // base feature module としての声明が必要となります
}
dependencies {
    application project(':installed')
}
android {...}
dependencies {
    implementation project(':app')  // base feature module を含む
}

implementationが Android plugin 3.0.0-alpha1 (Gradle 3.4) よりの設定で、こちらをご参照ください。

  • Instant App apk を生成するinstant app moduleを作ります。

Android Studio のNew => Module => Instant Appからinstantというinstant app moduleが作れます。

installedモジュール化と同様にappモジュールを含みます。

android {...}
dependencies {
    implementation project(':app')  // base feature module を含む
}

ビルドと実行

以上の設定で、Instant App の設定が完了となります!Run Configurationから見てみましょう。
- 「installed」のが通常のインストールできる apk の設定です。

ビルド成果物が通常の apk です。app モジュールが aar としてビルドされます。

  • 「instant」の方にエントリポイント URL を指定できます。

ビルド成果物が apk を含む zip です。

https://photo.com/main を指定して実行すると、インストールしてない Instant App が実行されます。ヘッダーから URL からのロードであることが確認できていますね。

さらにモジュール化する

現在一個のbase feature moduleしかないので、詳細画面を別のfeature moduleに切り出してみましょう。

Android Studio のNew => Module => Feature Moduleから detailという feature module を作ります。

Android Studio により作られたdetailモジュールは、base feature moduleであるappモジュールを自動的に dependencies に含んでいます。

apply plugin: 'com.android.feature'
android {...}
dependencies {
    implementation project(':app') // base feature module を含む
}

base feature moduleであるappモジュールの dependencies にも、 detailモジュールが自動的に追加されました。

android {...}
dependencies {
    application project(':installed')
    feature project(':detail')
}

新しいfeature moduleを追加したため、installedモジュールとinstantモジュールの dependencies にも以下のように依存を追加しましょう。

dependencies {
    implementation project(':app')
    implementation project(':detail')
}

detailモジュールに先程のPhotoDetailActityを入れます。注意点として、PhotoDetailActityが現在MainActivityと別のモジュールになっているため、MainActivityが直接にPhotoDetailActity起動するのができなくなりました。そのため暗黙的な Intent で起動することになります。

再度生成された Instant App apk を見ますと、複数の機能 apk が含まれているのが分かります。

それに対しインストールできる apk があまり変わってません。

Instant Apps における注意点

  • アプリに辿るエントリポイントが増えるため、プレミアムサービスなどの新規導線の再設計が必要となる
  • ユーザが機能単位で使うため、アプリをモジュール化する必要があり、提供する機能毎のapkサイズが4MBの制限がある
  • 現在 Android 6.0 (API 23) 以上にしか使えない。今後 Android 5.0 (API 21) にも対応する
  • プッシュ通知が利用できない
  • Long-running バックグランドサービスが利用できない
  • システムブロードキャストがキャッチできない
  • その他の制限1)Android Instant Apps に関する制限

最後に

今回は比較的シンプルな例でご紹介しました。実際のプロダクトではもっと複雑でモジュール化や apk サイズの削減に工夫が必要となるでしょう。Google のベータテスターによると、 既存のアプリプロジェクトから Instant Apps 化に要する時間は最小3日間から最大6週間とのことです。Android Studio の「Analyze APK」や「Removed Unused Resources」、Gradle の依頼関係整理などのツールの活用がおすすめです。