【インストールせずにすぐ実行できる!】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 module
とinstant 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からの手順に従えば簡単に設定できます。
以上のようにMainActivity
とPhotoDetailActivity
それぞれ 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 の依頼関係整理などのツールの活用がおすすめです。