【Android】アプリのストア公開の手順ざっくり解説

# アプリのストア公開手順
1. アプリを用意する
2. アプリのリリース バージョンをビルドして署名する
2. アプリのリリース バージョンをテストする
2. アプリをユーザー向けにリリースする

ざっくりと、こんな感じです。

# 手順をもう少し詳しく解説します
## アプリを用意する
リリース用のアプリを用意します。
`gradleファイル` をリリース用にします。
`debuggable` オプションに対して `false` の値を指定することで、デバッグ可能性（debuggable属性）を無効にすることができます。


`Java`の場合、

- Groovyの場合（例：build.gradle ファイル内）:
```java
android {
    buildTypes {
        debug {
            debuggable false
            // 他の設定...
        }
        // 他のビルドタイプの設定...
    }
    // 他のAndroid設定...
}
```
Kotlinの場合
- Kotlinスクリプトの場合（例：build.gradle.kts ファイル内）:
```kotlin
android {
    buildTypes {
        getByName("debug") {
            isDebuggable = false
            // 他の設定...
        }
        // 他のビルドタイプの設定...
    }
    // 他のAndroid設定...
}
```

`debuggable false` を指定することによって、デバック情報の無効化ができます。

- デバッグ情報の無効化とは、
通常、デバッグビルドではアプリにデバッグ情報（変数名、行番号など）が含まれ、デバッガを使用して実行中のアプリの状態を確認できるようになります。
しかし、`debuggable false` を指定すると、このデバッグ情報が無効化されます。
したがって、デバッガを使用してもアプリの内部状態を見ることができなくなります。

#### ちなみに、 `gradleファイル` とは、
- gradleはビルドシステム
- Gradleの記述言語はGroovy
- 記述言語はGroovyだけどJavaコードでも書ける
- Product Flavor、Build Typeとかで環境に応じてビルド設定を分けられる

## アプリのリリース バージョンをビルドして署名する
まず、
### アプリのバージョンとは、 `アプリケーションの特定のバージョンやリリースの識別子` を指します。

```java
android {
      namespace 'com.example.testapp'
      compileSdk 33

      defaultConfig {
          applicationId "com.example.testapp"
          minSdk 24
          targetSdk 33
          versionCode 20
          versionName "1.2.1"
          ...
      }
      ...
    }
    ...
    
```

```kotlin
android {
      namespace = "com.example.testapp"
      compileSdk = 33

      defaultConfig {
          applicationId = "com.example.testapp"
          minSdk = 24
          targetSdk = 33
          versionCode = 20
          versionName = "1.2.1"
          ...
      }
      ...
    }
    ...
```

上記の例で説明すると、
- リリース時に識別されるアプリバージョンは`versionCode 20`
これはアプリのバージョンを数値で表現したもので、Androidシステムがアプリのバージョンを識別するための重要なパラメータです。

この数値を増やすことが一般的です。同じ **`versionCode`** を持つアプリは、システムからは同一のバージョンと見なされます。

- ちなみに、`versionName` は、
アプリのバージョンをテキストで表現したもので、通常、ユーザーが見ることができるバージョン番号です。この文字列はユーザーに表示され、主にマーケティングやユーザーエクスペリエンスの目的で使用されます。

これらの値を適切に設定することで、アプリのバージョン情報が管理され、ユーザーや開発者がアプリのバージョンを識別できるようになります。
`versionCode` はシステムが使う内部的な識別子であり、`versionName` はユーザー向けに表示されるバージョン名です。

アプリケーションは通常、開発の途中で複数のバージョンがリリースされます。
各リリースバージョンには、新しい機能、バグ修正、改善点など、特定の変更が含まれています。

### 続いて、「署名」とは、アプリの開発者や発行者がそのアプリが本物であることを証明するプロセスのこと

これは、アプリが改ざんされていないことや、信頼性があることを示すための手段です。

アプリのビルドが完了したら、開発者はそのアプリにデジタル署名を行います。
これは、開発者のプライベートキーを使用してアプリに関する情報を暗号化するプロセスです。
そして、この署名は公開鍵を使って検証でき、アプリが改ざんされていないことを確認することができます。

### デジタル署名の方法
1. キーペアの生成
1. デジタル署名の実行
1. 公開鍵の配布:

キーペアの生成
- Android Studioでは、キーペア（公開鍵と秘密鍵）の生成を行うことができます。

1. Android Studioを開く
1. "Build" メニューから "Generate Signed Bundle/APK..." を選択します。
1. "Create New..." ボタンをクリックして、新しいキーストアファイルを作成します。
1. 必要な情報（キーストアパスワード、キーエイリアス、パスワードなど）を入力し、キーペアを生成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917260/9f012d72-9ad4-70f0-c866-c771466d1a25.png)


デジタル署名の実行
- デジタル署名は、ビルド設定において行います。具体的には、アプリの build.gradle ファイル内で署名設定を行います。

```java
android {
    ...
    signingConfigs {
        release {
            storeFile file('path/to/your/keystore.jks')
            storePassword 'your_keystore_password'
            keyAlias 'your_key_alias'
            keyPassword 'your_key_password'
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

```

```kotlin
android {
    // 他のAndroid設定...

    signingConfigs {
        create("release") {
            storeFile = file("path/to/your/keystore.jks")
            storePassword = "your_keystore_password"
            keyAlias = "your_key_alias"
            keyPassword = "your_key_password"
        }
    }

    buildTypes {
        getByName("release") {
            signingConfig = signingConfigs["release"]
            // 他のビルドタイプの設定...
        }
    }
}

```

###  公開鍵の配布
公開鍵は、APKファイルに含まれます。
ユーザーがアプリをダウンロードすると、公開鍵はユーザーのデバイス上で署名の検証に使用されます。公開鍵の配布には特別な手順は必要ありません。開発者は自身の秘密鍵（キーストアファイル）を安全に保管し、公開鍵はアプリの署名に含まれるので、ユーザーはそれを利用します。

#### 秘密鍵、公開鍵の補足
アプリのデジタル署名
開発者はアプリをビルドする際、秘密鍵を使用してデジタル署名を行います。
これにより、アプリのAPKは開発者の秘密鍵で署名されます。

公開鍵の配布:
アプリは、署名と一緒に公開鍵も含まれるようにビルドされます。
つまり、公開鍵はアプリのパッケージに含まれてユーザーに提供されます。
この公開鍵は、ユーザーがアプリを確認するために使用します。

アプリの署名検証:
ユーザーがアプリをダウンロードすると、デバイスはアプリのデジタル署名を検証します。
この検証には、アプリの署名と一緒に含まれる公開鍵が使用されます。
デバイスは公開鍵を使って、アプリの署名を作成した秘密鍵の情報を持たない開発者が署名したかどうかを確認します。
公開鍵は外部に公開されている情報であり、誰でもアクセスできるため、この手法は信頼性を保つために重要です。


## アプリのリリース バージョンをテストする
アプリを配信する前に、アプリのリリース バージョンを徹底的にテストする必要があります。スマートフォンとタブレットのそれぞれについて、少なくとも 1 つの対象機種でテストを実施する必要があります。

## アプリをユーザー向けにリリースする
通常は、Google Play などのアプリ マーケットプレイスを通じてアプリをリリースします。
自前のウェブサイトでリリースも可能です。

### 宣伝素材を準備する
Google Play のマーケティング機能と宣伝機能をフル活用するには、アプリの宣伝素材として使用するスクリーンショット、動画、画像、プロモーション テキストなどを作成する必要があります。

### オプションを設定し、アセットをアップロードする
Google Play では、全世界規模のユーザーやデバイスをアプリのターゲットにできます。
販売対象にする国、掲載情報に使用する言語、各国での価格などを設定できます。

掲載情報の詳細（アプリのタイプ、カテゴリ、コンテンツのレーティングなど）も設定できます。

### アプリのリリース バージョンを公開する
    
公開設定に問題がないことを確認できたら、いよいよアップロード済みのアプリを公開します。
[**公開**] をクリックします。
ここでストア審査が入り、
`Google Play の審査に合格` すると、アプリが公開され、世界中でダウンロードできるようになります。



## おわりに
オリジナルアプリつくりたい
がんばるぞい！

## 参考
- https://developer.android.com/studio/publish?hl=ja
- https://developer.android.com/studio/publish/versioning?hl=ja#groovy