【Android】ビルドバリアントを設定してコンポーザブルのプレビューを実行したときに発生したエラーのまとめ

# 発生したエラーのまとめ

最初に発生したエラーは、`release`でビルドしたことが原因だった。

```shell
Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (free-release).
```

最後に発生したエラーは`applicationIdSuffix ".debug"`を設定したままプレビューを実行したことが原因だった。

```shell
Execution failed for task ':app:processFreeDebugGoogleServices'.
> No matching client found for package name 'com.takagimeow.example.debug'
```

# エラー発生時の状況

**build.gradle**に`buildTypes`と`productFlavors`を使ってビルドバリアントを設定した。

```gradle
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
    debug {
        applicationIdSuffix ".debug"
        debuggable true
    }
}

flavorDimensions "plan"

productFlavors {
    paid {
        dimension "plan"
    }
    free {
        dimension "plan"
    }
}
```

同期後、次のビルドバリアントが作成された。

- freeDebug
- paidDebug
- freeRelease
- paidRelease

![名称未設定のデザイン (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/f524ce28-bf27-015b-5b83-3f9039b295bc.png)

無料アプリと有料アプリで、同じクラスでも処理を分けるようにするため、２つのディレクトリを作成した。
そして、それぞれに同じ名前のコンポーザブルファイルを作成した。

```md
- src
    - freeRelease
        - com.takagimeow.example
            - feature
                - home
                    - HomeScreen.kt
    - paidRelease
        - com.takagimeow.example
            - feature
                - home
                    - HomeScreen.kt
```

**Active Build Variant**として**freeRelease**を選択した。
そして、コンポーザブルのプレビューを確認するために、**Run 'HomeScreenPreview'**を実行した。

![名称未設定のデザイン (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/f2db9597-4567-2260-3d8b-68ac3b9d7272.png)

ビルドバリアントを設定する前には出現しなかったウィンドウが表示された。

![名称未設定のデザイン (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/577119/2c539efe-3330-4cd6-8113-f5024c97841f.png)

ウィンドウにはエラー内容が書かれていた。

```
Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (free-release).
```

調べてみると、BuildTypeが`release`の場合は正しく署名する必要があるらしい。
つまり、今まではBuildTypeが`debug`の状態でプレビューを実行していたということだ。

# 解決した手順

`freeRelease`ディレクトリの名前を、`free`に変更した。
`paidRelease`ディレクトリの名前を、`paid`に変更した。

新たに、空の`debug`ディレクトリを作成した。

```md
- src
    - debug
    - free
        - com.takagimeow.example
            - feature
                - home
                    - HomeScreen.kt
    - paid
        - com.takagimeow.example
            - feature
                - home
                    - HomeScreen.kt
```

**Sync Project with Gradle Files**を実行後、Active Build Variantを**freeDebug**にした状態で、**Run 'HomeScreenPreview'**　を実行した。

Buildにはエラーが表示された。

```shell
Execution failed for task ':app:processFreeDebugGoogleServices'.
> No matching client found for package name 'com.takagimeow.example.debug'
```

`buildTypes`の`debug`で、`applicationIdSuffix ".debug"`を設定したのが原因だった。
なので、コメントアウトする。

```gradle
buildTypes {
    release {
        minifyEnabled false
        proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        signingConfig signingConfigs.debug
    }
    debug {
        // applicationIdSuffix ".debug"
        debuggable true
    }
}
```


もう一度**Sync Project with Gradle Files**を実行後、Active Build Variantを**freeDebug**にした状態で、**Run 'HomeScreenPreview'**　を実行した。

結果エラーは全て消え、エミュレーターが起動しコンポーザブルが表示された。

# 追記

`applicationIdSuffix ".debug"`を設定したときにエラーが発生した本当の原因は、Firebaseを使用するために生成した`google-services.json`に設定された`package_name`には`.debug`が付与されていないことが本当の原因だった。

```
Execution failed for task ':app:processFreeDebugGoogleServices'.
> No matching client found for package name 'com.takagimeow.example.debug'
```

`google-services.json`をFirebase Consoleで作成した際に登録したパッケージ名は`com.takagimeow.example`だった。

ところが、`applicationIdSuffix ".debug"`を設定したことによりアプリケーションのパッケージ名は`com.takagimeow.example.debug`に変更されるので、`google-services.json`に設定した内容と一致しないためエラーが発生した。

なので、Firebaseを使わない人には発生しないエラーだと思うので、安心して`applicationIdSuffix ".debug"`を使用してほしい。


# 参考にした記事

https://yamatooo.blog/entry/2020/12/29/083000