リリース用アプリを準備する

リリース用アプリを準備するには、アプリのリリース バージョンを構成、ビルド、テストする必要があります。構成タスクには、基本コードのクリーンアップとコードの変更が含まれ、これらのタスクはアプリの最適化に役立ちます。ビルドプロセスはデバッグのビルドプロセスとほぼ同じで、JDK ツールと Android SDK ツールを使用して実施できます。

テストタスクは最終チェックとして機能し、実際の条件下でアプリが想定どおりに動作することを確認するのに役立ちます。Firebase では、Firebase Test Lab を通じて、実機と仮想の両方のテストデバイスが多数提供されています。これらを使用して、アプリの品質を向上させることができます。

リリース用アプリの準備が完了すると、署名付き APK ファイルができあがります。このファイルは、ユーザーに直接配信することも、Google Play などのアプリ マーケットプレイスを通じて配信することもできます。

このドキュメントでは、リリース用アプリを準備するために実施する必要がある主要なタスクの概要について説明します。このページで説明するタスクは、リリース方法やユーザーへの配信方法に関係なく、すべての Android アプリに適用されます。Google Play を通じてアプリをリリースする場合は、安心してリリースするをご覧ください。

注: このページで概説しているタスクを実施する前に、機能、パフォーマンス、安定性についてご自身が設定したすべてのリリース条件をアプリが満たしていることを確認するようおすすめします。

準備プロセスが開発プロセスにどのように当てはまるのかを示す

図 1. リリース用の準備は必須の開発タスクであり、公開プロセスの第一歩です

リリース用の準備のタスク

アプリをユーザー向けにリリースするには、ユーザーが Android デバイスにインストールして実行できるリリース可能なパッケージを作成する必要があります。リリース可能なパッケージは、デバッグ APK ファイルと同じコンポーネント(コンパイル済みのソースコード、リソース、マニフェスト ファイルなど)を含み、同じビルドツールを使用してビルドされます。ただし、リリース可能な APK ファイルは、デバッグ APK ファイルとは異なり、デベロッパー固有の証明書で署名され、zipalign ツールで最適化されます。

リリース用アプリを準備するために実施する 5 つのタスクを示す図

図 2. リリース用アプリを準備する主要なタスクは 5 つあります

Android Studio でアプリをビルドする場合、通常、署名タスクと最適化タスクはシームレスに行われます。たとえば、Android Studio で Gradle ビルドファイルを使用して、アプリを一度にコンパイル、署名、最適化できます。コマンドラインでビルドする場合も、Gradle ビルドファイルを構成して同じことができます。Gradle ビルドファイルの使用方法について詳しくは、ビルドを設定するをご覧ください。

リリース用アプリを準備するには、通常は 5 つの主要なタスクを実施します(図 2 を参照)。 アプリをリリースする方法に応じて、主要なタスクにはそれぞれ 1 つ以上の細かいタスクが含まれます。たとえば、Google Play でアプリをリリースする場合は、リリース用アプリを構成する際に、特別なフィルタリング ルールをマニフェストに追加できます。また、Google Play の公開ガイドラインを満たすには、リリース用の資料を収集する際に、スクリーンショットの準備やプロモーション テキストの作成が必要になります。

通常、図 2 に示されているタスクは、アプリのデバッグとテストを十分に行った後で実施します。Android SDK には、Android アプリのテストとデバッグに役立つツールがいくつか含まれています。詳しくは、アプリをデバッグするアプリをテストするをご覧ください。

資料とリソースを収集する

リリース用アプリを準備するにあたっては、いくつかの補助アイテムを収集する必要があります。少なくとも、アプリに署名するための暗号鍵と、アプリアイコンが必要です。場合によっては、エンドユーザー使用許諾契約も用意します。

暗号鍵

Android では、すべての APK は、デバイスにインストールするか更新する前にデジタル署名されている必要があります。Google Play ストアの場合、2021 年 8 月以降に作成されたすべてのアプリについては、Play アプリ署名を使用する必要があります。ただし、AAB を Google Play Console にアップロードする場合は、引き続きデベロッパー証明書で署名する必要があります。古いアプリは引き続き自己署名が可能ですが、Play アプリ署名を使用する場合も自己署名を使用する場合も、アップロードする前にアプリに署名する必要があります。

証明書の要件については、アプリへの署名をご覧ください。

重要: アプリへの署名は、2033 年 10 月 22 日以降に終了する有効期間が設定された暗号鍵で行う必要があります。

また、アプリがアクセスするサービスまたはアプリが使用するサードパーティ ライブラリによって、デベロッパーの秘密鍵に基づくキーの使用が要求される場合は、そのリリースキーも取得する必要があります。

アプリアイコン

アプリのアイコンは、ユーザーがデバイスのホーム画面とランチャー ウィンドウでアプリを識別するのに役立ちます。また、[アプリの管理] や [マイ ダウンロード] などにも表示されます。さらに、Google Play などの公開サービスでも、アプリアイコンがユーザーに表示されます。アプリアイコンを用意していることと、推奨されるアイコンのガイドラインを遵守していることを確認してください。

注: Google Play でアプリをリリースする場合は、アイコンの高解像度バージョンを作成する必要があります。詳しくは、プレビュー用アセットを追加してアプリをアピールするをご覧ください。

エンドユーザー使用許諾契約

アプリのエンドユーザー使用許諾契約(EULA)を準備することを検討してください。EULA は、人、組織、知的財産権の保護に役立つため、アプリとともに提供することをおすすめします。

その他の資料

アプリを公開するには、通常、プロモーションとマーケティング用の資料も準備する必要があります。たとえば、Google Play でアプリをリリースする場合は、プロモーション テキストを準備し、アプリのスクリーンショットを作成する必要があります。詳しくは、プレビュー用アセットを追加してアプリをアピールするをご覧ください。

リリース用アプリを構成する

補助資料をすべて収集したら、リリース用アプリの構成を開始できます。アプリをリリースする前に、ソースコード、リソース ファイル、アプリ マニフェストに対していくつかの構成変更を行うことをおすすめします。このセクションでは、そうした変更の概要について説明します。

ここで説明する構成変更のほとんどは必須ではありませんが、適切なコーディング慣行とみなされており、実装することが推奨されます。場合によっては、開発プロセスの中でこの種の構成変更をすでに実施しているかもしれません。

適切なアプリケーション ID を選択する

アプリのライフサイクル全体に適したアプリケーション ID を選択してください。アプリをユーザーに配信した後でアプリケーション ID を変更することはできません。アプリケーション ID を設定するには、モジュール レベルの build.gradle または build.gradle.kts ファイルの applicationId プロパティを使用します。詳しくは、アプリケーション ID の設定をご覧ください。

デバッグをオフにする

APK がデバッグ可能かどうかを構成するには、Groovy の場合は debuggable フラグ、Kotlin スクリプトの場合は isDebuggable フラグを使用します。

Kotlin

  android {
    ...
    buildTypes {
      release {
        isDebuggable = false
        ...
      }
      debug {
        isDebuggable = true
        ...
      }
    }
    ...
  }
  

Groovy

  android {
    ...
    buildTypes {
      release {
        debuggable false
        ...
      }
      debug {
        debuggable true
        ...
      }
    }
    ...
  }

アプリの圧縮を有効にして構成する

リリースビルドの圧縮を有効にすると、以下の最適化の多くを自動化できます。たとえば、ログ ステートメントを削除する ProGuard ルールを追加できます。そうすると、圧縮ツールは使用されていないコードとリソースを特定して削除します。圧縮ツールは、クラス名と変数名を短い名前に置き換えて、DEX サイズをさらに削減することもできます。

ロギングをオフにする

リリース用アプリをビルドする前に、ロギングを無効にします。ロギングを無効にするには、ソースファイル内の Log メソッド呼び出しを削除します。また、プロジェクト内に作成されたログファイルや静的テストファイルも削除します。

コードに追加した Debug トレース呼び出し(startMethodTracing() および stopMethodTracing() メソッド呼び出しなど)もすべて削除します。

重要: 有料コンテンツを表示するために WebView を使用している場合や、JavaScript インターフェースを使用している場合は、アプリのデバッグを必ず無効にしてください。デバッグが有効になっていると、ユーザーが Chrome DevTools を使用してスクリプトの注入とコンテンツの抽出を行えるからです。デバッグを無効にするには、WebView.setWebContentsDebuggingEnabled() メソッドを使用します。

プロジェクト ディレクトリをクリーンアップする

プロジェクトをクリーンアップし、プロジェクトの概要で記述されているディレクトリ構造になっていることを確認します。プロジェクト内に不明なファイルや孤立したファイルが残っていると、アプリのコンパイルの妨げになることや、アプリの予期しない動作を引き起こすことがあります。少なくとも、以下のクリーンアップ タスクを実施してください。

  • cpp/lib/src/ の各ディレクトリの内容を確認します。cpp/ ディレクトリには、Android NDK に関連するソースファイル(C または C++ ソースファイル、ヘッダー ファイル、makefile など)のみが含まれている必要があります。lib/ ディレクトリには、サードパーティ ライブラリ ファイルまたは非公開ライブラリ ファイル(事前ビルド済みの共有ライブラリと静的ライブラリを含む)のみが含まれている必要があります。src/ ディレクトリには、アプリのソースファイル(Java、Kotlin、AIDL ファイル)のみが含まれている必要があります。src/ ディレクトリには、JAR ファイルが含まれていてはなりません。
  • アプリが使用しない非公開データまたは専有データのファイルがプロジェクト内にないかをチェックし、見つかったら削除します。たとえば、プロジェクトの res/ ディレクトリを確認し、現在使用していない古いドローアブル ファイル、レイアウト ファイル、値ファイルが見つかったら削除します。
  • lib/ ディレクトリにテスト ライブラリがないかをチェックし、アプリで使用されていなければ削除します。
  • assets/ ディレクトリと res/raw/ ディレクトリの内容を確認し、リリースの前に更新または削除する必要がある未加工アセット ファイルと静的ファイルがないかをチェックします。

マニフェストおよび Gradle ビルド設定を確認、アップデートする

マニフェスト ファイルとビルドファイルの以下の項目が正しく設定されていることを確認します。

  • <uses-permission> 要素

    アプリに関連する必要な権限のみを指定します。

  • android:icon および android:label 属性

    これらの属性(<application> 要素内にあります)の値を指定する必要があります。

  • versionCode および versionName プロパティ

    これらのプロパティ(アプリ モジュール レベルの build.gradle または build.gradle.kts ファイル内にあります)の値を指定することをおすすめします。詳しくは、アプリのバージョニングをご覧ください。

Google Play でアプリをリリースする場合は、追加で設定できるビルドファイル要素がいくつかあります。たとえば、アプリ モジュール レベルの build.gradle または build.gradle.kts ファイル内にある minSdk 属性と targetSdk 属性を設定できます。これらの属性とその他の Google Play の設定については、Google Play でのフィルタをご覧ください。

互換性の問題に対処する

Android には、アプリをさまざまなデバイスで利用できるようにするためのツールと手法がいくつか用意されています。できるだけ多くのユーザーがアプリを利用できるようにするため、以下のタスクの実施を検討してください。

複数の画面構成のサポートを追加する
複数の画面のサポートに関するおすすめの方法を実施していることを確認します。複数の画面構成をサポートすると、Android でサポートされているすべての画面サイズで正常に動作し、適切に表示されるアプリを作成できます。
大画面向けにアプリを最適化する
タブレットや折りたたみ式デバイスなどの大型ディスプレイを備えたデバイスで適切に動作するように、アプリを最適化できます。たとえば、リスト詳細レイアウトを使用すると、大画面でのユーザビリティが向上します。
Jetpack ライブラリの使用を検討する
Jetpack は、デベロッパーがベスト プラクティスを導入し、ボイラープレート コードを削減し、あらゆる Android バージョンおよびデバイスで矛盾なく動作するコードを記述するために役立つライブラリ スイートです。

サーバーとサービスの URL を更新する

アプリがリモート サーバーまたはサービスにアクセスする場合は、テスト用の URL またはパスではなく、サーバーまたはサービスの本番用 URL またはパスを使用していることを確認します。

Google Play のライセンスを実装する

Google Play で有料アプリをリリースする場合は、Google Play ライセンスのサポートを追加することを検討してください。ライセンスを使用すると、現在のユーザーがアプリを購入済みかどうかに基づいて、アプリへのアクセスを制御できます。Google Play を通じてアプリをリリースする場合でも、Google Play ライセンスを使用するかどうかは任意です。

Google Play ライセンス サービスとアプリでの使用方法について詳しくは、アプリのライセンスをご覧ください。

リリース用アプリをビルドする

アプリの構成が完了したら、アプリをビルドして、署名および最適化済みのリリース可能な APK ファイルを作成できます。JDK には、APK ファイルに署名するためのツール(Keytool と Jarsigner)が含まれています。Android SDK には、APK ファイルをコンパイルおよび最適化するためのツールが含まれています。Android Studio を使用する場合、またはコマンドラインから Gradle ビルドシステムを使用する場合は、ビルドプロセス全体を自動化できます。Gradle ビルドの設定について詳しくは、ビルド バリアントを設定するをご覧ください。

継続的インテグレーション システムを使用している場合は、リリース プロセスを自動化するタスクを構成できます。これは、リリース APK または AAB のビルドに限定されません。ビルド アーティファクトが Google Play Console に自動的にアップロードされるように構成することもできます。

Android Studio でビルドする

Android Studio と統合されている Gradle ビルドシステムを使用すると、秘密鍵で署名された最適化済みのリリース可能な APK ファイルをビルドできます。Android Studio からビルドを設定して実行する方法については、アプリをビルドして実行するをご覧ください。

ビルドプロセスは、アプリへの署名に適した証明書と秘密鍵があることを前提としています。適切な証明書と秘密鍵がない場合は、Android Studio を使用して生成できます。署名プロセスについて詳しくは、アプリへの署名をご覧ください。

外部サーバーおよびリソースを準備する

アプリがリモート サーバーに依存している場合は、そのサーバーが安全であることと、本番環境で使用できるように構成されていることを確認します。これは、アプリにアプリ内課金を実装していて、リモート サーバー上で署名検証ステップを実行する場合、特に重要です。

また、アプリがリモート サーバーまたはリアルタイム サービス(コンテンツ フィードなど)からコンテンツを取得する場合は、最新の本番用コンテンツを提供していることを確認してください。

リリース用アプリをテストする

アプリのリリース バージョンをテストすると、実際のデバイスおよびネットワーク条件下でアプリが適切に動作することを確認できます。理想としては、少なくとも携帯サイズのデバイス 1 台とタブレット サイズのデバイス 1 台でアプリをテストし、ユーザー インターフェース要素が適切なサイズで表示されることと、アプリのパフォーマンスとバッテリー効率が許容範囲内であることを確認します。また、Firebase Test Lab は、さまざまなデバイスと Android OS バージョンでテストする場合に役立ちます。

テストを開始する際は、アプリの中核品質をご覧ください。テストが完了し、アプリのリリース バージョンが正常に動作することを確認できたら、アプリをユーザーにリリースできます。詳しくは、アプリをユーザーにリリースするをご覧ください。