Google Play 以外の Android アプリの配信方法(インストールとアップデート)を試してみる

# ０．はじめに

自作した Android アプリを実機でテストするにあたり、
Google Play 以外にどういう配信方法があるのか、色々と試してみました。

# １．APK デジタル署名したパッケージファイル（.apkファイル）を準備する

1. Android Studio からデジタル署名したパッケージファイル (.apk ファイル) を作成します。
    * 以下のページの手順を参考に。
        * [Androidで署名付きapkを作成する \- Qiita](https://qiita.com/mfks17/items/c38d3713cb5b2c5536ff)
        * <font color="red"><b>【注意】</b>メニューからは、「Build APK」ではなく、「Generate Signed APK...」を選択すること。<font>

# ２．配信方法
以下の配信方法を試してみたいと思います。

1. パソコンから ADB (Android Debug Bridge) を使って USB ケーブル経由で配信
1. メール (Gmail) で配信
1. クラウドストレージサービス (Google Drive) を通じて配信
1. チャットなどのクラウドサービス (Chatwork) で配信
1. ウェブサイト (Amazon S3) で配信

* ※ 参考：
    * [さまざまな配信方法 \| Android Developers](https://developer.android.com/distribute/marketing-tools/alternative-distribution.html?hl=ja#email)
    * [Android端末とパソコンをUSBケーブルでつないで、デバッグのために、アプリを端末にインスト](https://sugi.sakura.ne.jp/a/151124a.html)
    * [公式ストア経由以外での配布 \- Monaca Docs](https://docs.monaca.io/ja/monaca_ide/manual/deploy/non_market_deploy/)
    * [iOS/Android/Windows8に業務アプリを配布する方法について調べた \| Ken's Pub](https://inoccu.com/blog/2013/01/15/091106.html)
    * [Google Playで非対応のアプリをダウンロードして端末へインストールする方法 \| AndMem](http://andmem.blogspot.jp/2015/06/google-play-application-download-install.html)

# ２−１．パソコンから ADB (Android Debug Bridge) を使って USB ケーブル経由で配信

1. パソコンに ADB をインストール
    * 以下のページの手順を参考に。
        * [adbをMacのターミナルで使えるようにする \- Qiita](https://qiita.com/furusin_oriver/items/f956848788c7a63922bd)
        * [ADBコマンド導入の方法 \- Qiita](https://qiita.com/hikaru__m/items/15baae425b6fad25da05)

    ```
$ cd
$ ls -la
$ sudo cp -p .bash_profile .bash_profile.ORG
$ ls -la
$ sudo echo 'export PATH="$PATH:/Users/{ユーザー名}/Library/Android/sdk/platform-tools"' >> ~/.bash_profile
$ source .bash_profile
$ which adb
```
<br>
1. パソコンに USB ケーブルで実機を接続
<br>
1. ADB から パッケージファイル (.apk ファイル) をインストール
    * 以下のページの手順を参考に。
        * [MacターミナルからAPKファイルをAndroidの実機端末にインストール \- 0239](http://blog.a1yama.com/entry/2016/02/02/170449)

    ```
$ adb install app-release.apk 
Success
```
<br>
1. ADB から パッケージファイル (.apk ファイル) をアップデート
    * 以下のページの手順を参考に。
        * [【Android】adbを使ってapkをアップデートする : かんうん　やかく](http://blog.livedoor.jp/mitsu_aki/archives/21111105.html)

    ```
$ adb install -r app-release.apk 
Success
```
<br>

ざっくりと、まとめ

* <b>メリット</b>
    * <font color="magenta"><b>無料。</b></font>
        * ただ、パソコン必要だけどね…。
    * <font color="magenta"><b>インストール時、ネット接続不要。</b></font>
        * あくまで、インストール時の話…。
    * <font color="magenta"><b>端末側で「提供元不明のアプリ」の許可設定を行う必要がない。</b></font>
<br><br>
* <b>デメリット</b>
    * <font color="blue"><b>USB ケーブルとパソコンが必要。</b></font>
    * <font color="blue"><b>パソコンに ADB をインストールしないといけない。</b></font>
    * <font color="blue"><b>ターミナルからコマンドを打たないといけない。</b></font>
    * <font color="blue"><b>アプリの更新の通知や配信は別途必要。</b></font>
        * っていうか、この手順はあくまでインストールの手順だけ…。
        * 何か無駄なことしてるだけの気が…。

# ２−２．メール (Gmail) で配信

1. 事前に、端末側で「提供元不明のアプリ」の許可設定を行う。
    * セキュリティ上あまりよろしく無いかもしれませんが…、「提供元不明のアプリ」の許可設定を行います。
    * 以下のページの手順を参考に。
        * [\[Android\]Google Playにない「野良アプリ」をインストールするために「提供元不明のアプリ」を許可する \- Qiita](https://qiita.com/gumby/items/9e1431b73bdb6b0684d8)
<br><br>
1. パッケージファイル (.apk ファイル) をメールに添付して送ります。
<br><br>
1. 端末側で Gmail からメールを確認します。
    * ![0001.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/8d2973f5-7c81-99e7-7eb2-453b428f6e3d.jpeg)
<br><br>
    * ![0002.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/c6f062d9-c281-c811-49da-c5c393894187.jpeg)
<br><br>
    * ![0003.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/bc0f0bf0-1dd0-3224-d53b-fce8f73f2dc8.jpeg)
<br><br>
1. 添付されているパッケージファイル (.apk ファイル) をタッチします。
    * ![0004.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/48510a3c-55a4-68fb-8b96-620d84e534fd.jpeg)
<br><br>
1. インストールの確認画面が表示されるので、「インストール」リンクをタッチします。
    * ![0005.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/16eb1c5f-06ba-83db-d64d-34a32b4303d9.jpeg)
<br><br>
<font color="red"><b>事前に、端末側で「提供元不明のアプリ」の許可設定を行っていないと、以下の画面が表示されます。</b></font>
    * ![0005-x.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/08656863-e90d-f323-50ae-ba8ead1dc93d.jpeg)
<br><br>
1. インストールが開始され、インストールが完了すると以下の画面が表示されるので、「開く」リンクをタッチするとアプリが起動します。
    * ![0007.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/5d79df94-8ba2-c64c-39aa-185a3935cb48.jpeg)
<br><br>
    * ![0008.jpg](https://qiita-image-store.s3.amazonaws.com/0/161939/1027470f-9659-9a21-b062-bb7b58222458.jpeg)
<br><br>
1. アプリを更新したい場合は、同様の手順でアップデートできます。
<br><br>

ざっくりと、まとめ

* <b>メリット</b>
    * <font color="magenta"><b>無料。</b></font>
    * <font color="magenta"><b>アプリの更新の通知と配信を一回のメール送信で出来る。</b></font>
    * <font color="magenta"><b>特定のユーザーへの配信ができる。</b></font>
       * 逆に不特定多数への配信は出来ない。
<br><br>
* <b>デメリット</b>
    * <font color="blue"><b>端末側で「提供元不明のアプリ」の許可設定を行う必要がある。</b></font>
    * <font color="blue"><b>事前に配信先のメールアドレスを知っておく必要がある。</b></font>
    * <font color="blue"><b>メール添付ってセキュリティ的にどうなんだろう…。宛先ミスったりすると恐い…。</b></font>
    * <font color="blue"><b>それなりに大きいファイルをメール添付で送ると、場合によっては受信できないこともある気がする…。ネットワーク的にも何か…。</b></font>

# ２−３．クラウドストレージサービス (Google Drive) を通じて配信
基本的には、「２−２．メール (Gmail) で配信」と同じ様な感じですが、配信がメール (Gmail) ではなく、クラウドストレージサービス (Google Drive) を使います。

1. 事前に、端末側で「提供元不明のアプリ」の許可設定を行う。
<br><br>
1. クラウドストレージサービス (Google Drive) でパッケージファイル (.apk ファイル) をアップロードし、ファイルやフォルダを共有します。
    * 以下のページの手順を参考に。
        * [Google ドライブのファイルを共有する \- パソコン \- Google ドライブ ヘルプ](https://support.google.com/drive/answer/2494822?co=GENIE.Platform%3DDesktop&hl=ja)
        * [Google ドライブでフォルダを共有する \- パソコン \- Google ドライブ ヘルプ](https://support.google.com/drive/answer/7166529?co=GENIE.Platform%3DDesktop&hl=ja)
<br><br>
1. 端末側でクラウドストレージサービス (Google Drive) を確認します。
<br><br>
1. パッケージファイル (.apk ファイル) をタッチします。
<br><br>
1. インストールの確認画面が表示されるので、「インストール」リンクをタッチします。
<br><br>
1. インストールが開始され、インストールが完了すると以下の画面が表示されるので、「開く」リンクをタッチするとアプリが起動します。
<br><br>
1. アプリを更新したい場合は、同様の手順でアップデートできます。
<br><br>

ざっくりと、まとめ

* <b>メリット</b>
    * <font color="magenta"><b>無料。</b></font>
    * <font color="magenta"><b>特定のユーザーのみへの配信も不特定多数への配信も出来る。</b></font>
       * クラウドストレージサービス (Google Drive) の共有の設定による。
<br><br>
* <b>デメリット</b>
    * <font color="blue"><b>端末側で「提供元不明のアプリ」の許可設定を行う必要がある。</b></font>
    * <font color="blue"><b>アプリの更新の通知と配信を一回で出来ない。</b></font>
        * こういうやり方もあるみたいだが…。
            * [【ソースコード付き】GoogleDriveでファイルが追加・更新されたらメールで通知する \| \| ITに頼って生きていく](https://boomin.yokohama/archives/797)
    * <font color="blue"><b>事前に共有するユーザーのメールアドレスを知っておく必要がある。</b></font>

# ２−４．チャットなどのクラウドサービス (Chatwork) で配信
基本的には、「２−２．メール (Gmail) で配信」と同じ様な感じですが、配信がメール (Gmail) ではなく、チャットなどのクラウドサービス (Chatwork) を使います。

1. 事前に、端末側で「提供元不明のアプリ」の許可設定を行う。
<br><br>
1. チャットなどのクラウドサービス (Chatwork) でパッケージファイル (.apk ファイル) をアップロードします。
<br><br>
1. 端末側でチャットなどのクラウドサービス (Chatwork) を確認します。
<br><br>
1. パッケージファイル (.apk ファイル) をダウンロードします。
<br><br>
1. インストールの確認画面が表示されるので、「インストール」リンクをタッチします。
<br><br>
1. インストールが開始され、インストールが完了すると以下の画面が表示されるので、「開く」リンクをタッチするとアプリが起動します。
<br><br>
1. アプリを更新したい場合は、同様の手順でアップデートできます。
<br><br>

ざっくりと、まとめ

* <b>メリット</b>
    * <font color="magenta"><b>無料のものも。有料のものも</b></font>
        * 各種サービスの料金形態によるかな。
    * <font color="magenta"><b>特定のユーザーのみへの配信が出来る。</b></font>
       * 不特定多数への配信は、各種サービスの共有の設定の仕様によるかな？
    * <font color="magenta"><b>アプリの更新の通知と配信を一回で出来る。</b></font>
        * 各種サービスの仕様にもよるけど。
<br><br>
* <b>デメリット</b>
    * <font color="blue"><b>端末側で「提供元不明のアプリ」の許可設定を行う必要がある。</b></font>
    * <font color="blue"><b>配信先と配信元が同じサービスを利用していることが前提。</b></font>

# ２−５．ウェブサイト (Amazon S3) で配信
基本的には、「２−２．メール (Gmail) で配信」と同じ様な感じですが、配信がメール (Gmail) ではなく、ウェブサイト (Amazon S3) を使います。っていうか、ウェブサイトの構築をするのか？って感じもあるけど…。

1. 事前に、端末側で「提供元不明のアプリ」の許可設定を行う。
<br><br>
1. ウェブサイト (Amazon S3) を構築し、パッケージファイル (.apk ファイル) をアップロードします。
    * 以下のページの手順を参考に。
        * [AWSのS3で静的サイトを公開する方法 \- A Little Each Day](http://blog.otsukasatoshi.com/entry/2017/07/26/090000)
<br><br>
1. 端末側でウェブサイト (Amazon S3) を確認します。
<br><br>
1. パッケージファイル (.apk ファイル) をダウンロードします。
<br><br>
1. インストールの確認画面が表示されるので、「インストール」リンクをタッチします。
<br><br>
1. インストールが開始され、インストールが完了すると以下の画面が表示されるので、「開く」リンクをタッチするとアプリが起動します。
<br><br>
1. アプリを更新したい場合は、同様の手順でアップデートできます。
<br><br>

ざっくりと、まとめ

* <b>メリット</b>
    * <font color="magenta"><b>不特定多数への配信が出来る。</b></font>
       * 逆に、特定のユーザーのみへの配信は出来ない。
       * IP アドレスでの制限とか、IAM や Lambda とか使ってどうこうっていうのは出来る気がするけど…。
<br><br>
* <b>デメリット</b>
    * <font color="blue"><b>有料。</b></font>
        * 多少お金は掛かる。
    * <font color="blue"><b>サーバーの構築や運用の手間が掛かる。</b></font>
    * <font color="blue"><b>端末側で「提供元不明のアプリ」の許可設定を行う必要がある。</b></font>
    * <font color="blue"><b>アプリの更新の通知と配信をプッシュ出来ない。</b></font>
        * Lambda とか使って何か出来そうだけど…。
        * ユーザー側が勝手に見に行くか、
        * アプリ側に更新チェックの機能を付ける？


# ９９．ハマりポイント

* 特にハマったところはなかったんですが、さすがにまとめるのが大変でした…。

# ＸＸ．まとめ

全般的なまとめです。

<table>
<tr>
<th colspan=1 rowspan=1></th>
<th colspan="1">1.<br>PCから<br>USB接続で</th>
<th colspan="1">2.<br>ﾒｰﾙ<br>(Gmail)</th>
<th colspan="1">3.<br>ｽﾄﾚｰｼﾞｻｰﾋﾞｽ<br>(GoogleDrive)</th>
<th colspan="1">4.<br>ﾁｬｯﾄｻｰﾋﾞｽ<br>など</th>
<th colspan="1">5.<br>ｳｪﾌﾞｻｲﾄ<br>(Amazon S3)</th>
</tr>
<tr>
<td>費用</td>
<td>不要</td>
<td>不要</td>
<td>不要</td>
<td>場合によっては<br>ｻｰﾋﾞｽ利用料が掛かる</td>
<td>ｳｪﾌﾞｻｲﾄ(Amazon S3)<br>の運用費用が掛かる</td>
</tr>
<tr>
<td>その他<br>付属物品や<br>ｻｰﾋﾞｽ</td>
<td>PC,<br>USBｹｰﾌﾞﾙ</td>
<td>不要</td>
<td>ｽﾄﾚｰｼﾞｻｰﾋﾞｽ<br>(GoogleDrive)</td>
<td>ﾁｬｯﾄｻｰﾋﾞｽ<br>など</td>
<td>ｳｪﾌﾞｻｲﾄ<br>(Amazon S3)</td>
</tr>
<tr>
<td>ﾈｯﾄ</td>
<td>ｲﾝｽﾄｰﾙ時は不要<br>※通知&配信に関しては別途</td>
<td>必要</td>
<td>必要</td>
<td>必要</td>
<td>必要</td>
</tr>
<tr>
<td>「提供元不明のアプリ」<br>の許可設定</td>
<td>不要</td>
<td>必要</td>
<td>必要</td>
<td>必要</td>
<td>必要</td>
</tr>
<tr>
<td rowspan=2>手間や<br>難易度</td>
<td>[中]</td>
<td>[小]</td>
<td>[小]</td>
<td>[小]</td>
<td>[大]</td>
</tr>
<tr>
<td>ADBのｲﾝｽﾄｰﾙ<br>ｺﾏﾝﾄﾞ実行<br>など<br>※通知&配信に関しては別途</td>
<td>対象数にもよるが、<br>ただのﾒｰﾙ送信</td>
<td>ｱｯﾌﾟﾛｰﾄﾞするだけ<br>※通知に関しては別途</td>
<td>投稿するだけなので<br>一番簡単</td>
<td>ｳｪﾌﾞｻｲﾄの構築<br>運用など<br>※通知に関しては別途</td>
</tr>
<tr>
<td>ｲﾝｽﾄｰﾙ<br>の通知</td>
<td rowspan=4>別途必要</td>
<td rowspan=4>一通のﾒｰﾙ送信で<br>通知&配信</td>
<td>別途必要<br>※作り込めば…</td>
<td rowspan=4>一度の投稿で<br>通知&配信</td>
<td>別途必要<br>※作り込めば…</td>
</tr>
<tr>
<td>ｲﾝｽﾄｰﾙ<br>の配信</td>
<td>ｽﾄﾚｰｼﾞｻｰﾋﾞｽ<br>(GoogleDrive)</td>
<td>ｳｪﾌﾞｻｲﾄ<br>(Amazon S3)</td>
</tr>
<td>ｱｯﾌﾟﾃﾞｰﾄ<br>の通知</td>
<td>別途必要<br>※作り込めば…</td>
<td>別途必要<br>※作り込めば…</td>
</tr>
<tr>
<td>ｱｯﾌﾟﾃﾞｰﾄ<br>の配信</td>
<td>ｽﾄﾚｰｼﾞｻｰﾋﾞｽ<br>(GoogleDrive)</td>
<td>ｳｪﾌﾞｻｲﾄ<br>(Amazon S3)</td>
</tr>
<tr>
<td rowspan=2>対象</td>
<td rowspan=2>※通知&配信方法に寄る</td>
<td>特定ﾕｰｻﾞ:○<br>※事前にﾒｰﾙｱﾄﾞﾚｽの取得が必要</td>
<td>特定ﾕｰｻﾞ:○<br>※事前にﾒｰﾙｱﾄﾞﾚｽの取得が必要</td>
<td>特定ﾕｰｻﾞ:○<br>※同じｻｰﾋﾞｽを利用が前提</td>
<td>特定ﾕｰｻﾞ:×<br>※かなり頑張って作り込めば…</td>
</tr>
<tr>
<td>不特定多数ﾕｰｻﾞ:×</td>
<td>不特定多数ﾕｰｻﾞ:○<br>※ｻｰﾋﾞｽの共有設定の仕様に寄る</td>
<td>不特定多数ﾕｰｻﾞ:△<br>※ｻｰﾋﾞｽの共有設定の仕様に寄る</td>
<td>不特定多数ﾕｰｻﾞ:○</td>
</tr>
<tr>
<td>※<br>備考</td>
<td>何か無駄なことしてる気が…</td>
<td>ﾒｰﾙ添付って<br>最近ｾｷｭﾘﾃｨ的に…</td>
<td></td>
<td></td>
<td></td>
</tr>
</table>

Google Play を使わないとなると、
やはり基本的には本当に少人数への数回程度の、っていう感じかなと思います。

1 の PC 経由の ADB でのインストールは、どちらかというと本格運用後の検証等で利用する手順みたいですね。

ウェブサイト経由の配信は、本格運用でも使える様にも思いますが、やっぱり「提供元不明のアプリ」としての配信となってしまうのは、気持ち悪さがありますね。

ただ、不特定多数へ配信したくないのであれば、こういうやり方もいいのかもしれません。でも、その際はアプリ側に更新チェックの機能をつけた方がいい気がします。じゃないとユーザーが利用するアプリのバージョンをあまりにも管理できなくて辛くなるかなと。

とりあえず今回は、Google Play 以外の配信方法を試してみたので、

次は Google Play での配信を試してみたいと思います。

↓↓↓

* [Google Play での Android アプリの配信方法\(インストールとアップデート\)を試してみる \- Qiita](https://qiita.com/kusokamayarou/items/e3a1319e827bbaa78fc2)