発生したエラーのまとめ
最初に発生したエラーは、release
でビルドしたことが原因だった。
Error: The apk for your currently selected variant cannot be signed. Please specify a signing configuration for this variant (free-release).
最後に発生したエラーはapplicationIdSuffix ".debug"
を設定したままプレビューを実行したことが原因だった。
Execution failed for task ':app:processFreeDebugGoogleServices'.
> No matching client found for package name 'com.takagimeow.example.debug'
エラー発生時の状況
build.gradleにbuildTypes
とproductFlavors
を使ってビルドバリアントを設定した。
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
無料アプリと有料アプリで、同じクラスでも処理を分けるようにするため、2つのディレクトリを作成した。
そして、それぞれに同じ名前のコンポーザブルファイルを作成した。
- src
- freeRelease
- com.takagimeow.example
- feature
- home
- HomeScreen.kt
- paidRelease
- com.takagimeow.example
- feature
- home
- HomeScreen.kt
Active Build VariantとしてfreeReleaseを選択した。
そして、コンポーザブルのプレビューを確認するために、**Run 'HomeScreenPreview'**を実行した。
ビルドバリアントを設定する前には出現しなかったウィンドウが表示された。
ウィンドウにはエラー内容が書かれていた。
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
ディレクトリを作成した。
- 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にはエラーが表示された。
Execution failed for task ':app:processFreeDebugGoogleServices'.
> No matching client found for package name 'com.takagimeow.example.debug'
buildTypes
のdebug
で、applicationIdSuffix ".debug"
を設定したのが原因だった。
なので、コメントアウトする。
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"
を使用してほしい。
参考にした記事