Launching lib/main.dart on sdk gphone64 arm64 in debug mode...
FAILURE: Build failed with an exception.
* What went wrong:
A problem was found with the configuration of task ':app:selectGoogleServicesJson' (type 'Copy').
- Gradle detected a problem with the following location: '<PATH_TO_PROJ>/android/app'.
Reason: Task ':app:compileFlutterBuildDebug' uses this output of task ':app:selectGoogleServicesJson' without declaring an explicit or implicit dependency. This can lead to incorrect results being produced, depending on what order the tasks are executed.
Possible solutions:
1. Declare task ':app:selectGoogleServicesJson' as an input of ':app:compileFlutterBuildDebug'.
2. Declare an explicit dependency on ':app:selectGoogleServicesJson' from ':app:compileFlutterBuildDebug' using Task#dependsOn.
3. Declare an explicit dependency on ':app:selectGoogleServicesJson' from ':app:compileFlutterBuildDebug' using Task#mustRunAfter.
For more information, please refer to https://docs.gradle.org/8.2/userguide/validation_problems.html#implicit_dependency in the Gradle documentation.
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 2s
Error: Gradle task assembleDebug failed with exit code 1
Exited (1).
% flutter build appbundle --dart-define-from-file=dart_defines/prod.env
Running Gradle task 'bundleRelease'...
Warning: SDK processing. This version only understands SDK XML versions up to 3 but an SDK XML file of version 4 was encountered. This can happen if you use versions of Android Studio and the command-line tools that were released at different times.
ERROR: /<PATH_TO_DIR>/build/app/intermediates/merged_java_res/release/base.jar: R8: com.android.tools.r8.ResourceException: com.android.tools.r8.internal.vc: I/O exception while reading '/<PATH_TO_DIR>/build/app/intermediates/merged_java_res/release/base.jar': /<PATH_TO_DIR>/build/app/intermediates/merged_java_res/release/base.jar
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:minifyReleaseWithR8'.
> A failure occurred while executing com.android.build.gradle.internal.tasks.R8Task$R8Runnable
> Compilation failed to complete, origin: /<PATH_TO_DIR>/build/app/intermediates/merged_java_res/release/base.jar
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
> Get more help at https://help.gradle.org.
BUILD FAILED in 22s
Running Gradle task 'bundleRelease'... 22.9s
Gradle task bundleRelease failed with exit code 1
Discussion
暗号化ではなく、エンコードです。
秘匿する目的ではなく、渡されたパラメーターの値を後から正確に展開するための処理のはずです。
暗号化と表現すると、ここにセキュアな値を入れても良いかのような誤解を招きそうですが、そうではないので。
これは恥ずかしい…!monoさん、ご指摘ありがとうございます☺️
修正しました👌
記事わかりやすく、とても参考になりました!
ありがとうございます🙇
自分が利用していて気づいたことなのですが

このDart-defineを使った上でfirebaseを新規導入する際は
Copy Bundle ResourcesにSelect GoogleService-Info.plistで
コピーされたGoogleService-Info.plistを追加しないと
GoogleService-Info.plistが読み込まれずfirebaseを使うことができないみたいです!
@akaboshinit さん、追加情報ありがとうございます✨
遅くなってしまいましたが、記事に追記させていただきました🙌
Flavor対応参考にさせていただきました。
--dart-defineが出る前の名残でflutter_flavorizr | Flutter Package辺りを使って凌いでましたが、記事の通り進めたらさくっとできました。ありがとうございます。1点アプリアイコンの切り替えについてですが、出力までの手順に留まっており反映の記述が漏れている様子でしたので、間違いなさそうであれば追記お願いします🙏

(私の環境ではこちらの設定なしではアイコン反映できずでした)
ツルオカさん、ご報告ありがとうございます🙏😊
後ほど追記させていただきます!
ここに関してのコメントですが、Downloadフォルダ等からではなく、Runnerディレクトリにコピーされて出来上がったものをドラッグアンドドロップして参照するようにするのが良いと思います!(ダウンロードフォルダからとかだと参照のディレクトリが違くて、「
Cannnot find ~/GoogleService-Info.plist」みたいなエラーが出そうです!)kboyさん、コメントありがとうございます😊
Xcodeでドラッグ&ドロップする際に、
Copy items if neededにチェックすれば、Downloadフォルダにあるファイルへの参照ではなく、新規にファイルを作成して配置してくれるので参照エラーは出ない認識でした…!試してみて問題あるようだったら修正しますね💪
なるほどです!そしたらコピーされるので大丈夫かもです!!
Flavor対応参考にさせて頂きました〜!
記事通り進めるだけで手軽にできて驚きました、ありがとうございます!!
もし良ければスクラップに残しておいたので使ってください!🎯
Daigoさん、サポートありがとうございます!!
またAndroid Studioの設定例もありがとうございます🙌
後ほど記事更新してリンクさせていただきます😊
久々にアイコン差し替えの対応をすることがあって、忘れてしまっていた部分が多かったので参考にさせていただきました 🙏
Androidのアイコン差し替えですが、設定でビルド時に
src/main/resとsrc/${flavor}/resをマージすることができるので、それを使ったほうが綺麗かなと思います。ありがとうございます!!Androidの知見少ないのでありがたいです🙌
後ほど使わせていただくと思います!
参考になる記事をありがとうございます!
launch.jsonの参考例ですが、余計な{が4行目に含まれているようなので一応記載しておきます!kyam_28さん
{が二重にありますね!ありがとうございます、修正します🙌記事とても参考になりました。ありがとうございます。
macOSでしか動作確認をしておりませんが、
Select GoogleService-Info.plistはCompile Sourcesよりも上にしないと環境が適切に切り替わらなかったように見受けられました。もしどなたかのご参考になりましたら。大変参考になりました。ありがとうございます🙌
CFBundleName とは、と自身も改めて確認したところ
とあったので CFBundleDisplayName があれば不要そうでした。自分は CFBundleDisplayName をセットしてCFBundleName を削除してみたところ、正常にビルドされました🙋♂️
Kirkさん、ありがとうございます🙌
CFBundleNameを削除しても問題なくビルド可能なんですね👏✨もしかしたら環境によるかもしれませんが、
CFBundleNameは出力したipaファイルの名前になるようです👀(
CFBundleNameがsampleの場合はsample.ipaになる)しかし、このとき
CFBundleNameに日本語が含まれていた場合省略されるようです。(
CFBundleNameがサンプルappの場合、「サンプル」部分が省略されてapp.ipaになる)なので、
CFBundleDisplayNameが日本語のアプリなどは分けて定義するメリットがあるかもしれませんね✍️わざわざコメントありがとうございます!
実はコメントしたあとに「Archive はどうなるんだ…」と気になってました。笑
さらに逆に勉強になりました。ありがとうございます🙏
いつもこの記事のお世話になっております🙇
iosのGoogleService-info.jsonの位置がRnner/Runner配下でないと動かない仕様?になっている気がしましたがどうでしょうか?
また、大変分かりやすいので、Firebase CLI版(androidは変わらず、iosのfile名が変わっただけかもですが...)も執筆していただけることを心待ちにしております!
龍之介さん!
すみません、こちらのコマンドを打つ前にbuild.gradlededで、minSdkVersionに数値を入力しないとエラーが出てしまうようです!
最近は、Flutter SDK本体の設定をいじれば、数値を設定できていたのですが、flutter_launcher_iconsは違うみたいです!
驚きました!
flutter pub run flutter_launcher_icons:main
エラーログ
非常に参考になり助かりました🙏
要ないかもしれませんが、dart-defineを外してビルドした際にデフォルトでdevのアイコンをセットできるようにもしてみたので共有です。
とても遅くなってしまいましたが、
build.gradleの記法など勉強になります!共有ありがとうございます🙌
--dart-define-from-file が利用可能になったので、かなり設定が楽になりましたね
ありがとうございます!
--dart-define-from-file使って、記事書き換えてみました👍こちらの記事のおかげでアプリ名の出しわけができました!
とても役に立つ記事、ありがとうございます。
前回記事からお世話になっています。ありがとうございます。
Select GoogleService-Info.plistのスクショで記入されているコピーコマンド、
cp -f ${SRCROOT}/${FLAVOR}/GoogleService-Info.plist ${SRCROOT}/GoogleService-Info.plistは
cp -f ${SRCROOT}/${flavor}/GoogleService-Info.plist ${SRCROOT}/GoogleService-Info.plistですね(実際作業してたら間違えないと思いますが)。
また、Web (Firebase Hosting 使用)ですが、以下でちゃんと環境分けできてます。
遅くなりましたが、補足コメントありがとうございます🙌
flavorの大文字・小文字のミスですね。あとで修正いたします🙏役に立ちました。
extentionを使っていると、ビルド時に次のエラーで失敗します。
この記事の方法とコメントで対応できました。
遅くなりましたが、extensionを使用した場合の補足とコメントありがとうございます🙌
This is really helpful, Thank you
この記事の内容ですが、Flutter 3.17で動作しなくなる可能性が高そうです 😱
コメントありがとうございます!残念ですがそうなりそうですね🥶
古い方の記事残しておいたのでこちらの内容をまた追記することになりそうです…
前回の記事からお世話になっています。ありがとうございます。
dart_defines/dev.env の googleReversedClientId の行の最後に「,」が入っていますが、「,」があると「"」と「,」が残ったまま環境変数が設定されてしまうようです。
googleReversedClientId の出力例
dart_defines のファイルは「,」を削除した以下の形が正しいかと思います。
google認証をしようとした際に、アプリがクラッシュされる方がいらっしゃったらこれが原因かもしれません。
ご指摘ありがとうございます!JSONファイルの時の末尾カンマが残ってしまっていたみたいです…!
修正します🙌
この構成でプロジェクトを作った場合って、apiKeyなどのセキュアなものってどこで持たせるのがいいのでしょうか。そこだけ綺麗にできずに困ってます。
秘密鍵などのセキュアなものはアプリに入れてしまうと、成果物から解読されるリスクが高い認識です。
なので、原則サーバーサイドで管理するのが良いかと思っています。
それがどうしても難しい場合は envied等を使って難読化するのが妥協案になりそうです。
返信ありがとうございます。
他の方の記事とかで.envにapiKeyを入れてる方がちらほらいたので気になりました。
privateのリポジトリにあげるとしてもアプリ自体を解析されてしまう可能性があるんですね。その辺の知識がなかったので勉強になりました。
build.gradleを編集してdart-defineを受け取るの部分でちょっとハマりそうな挙動を発見したので報告です。
こんな感じにvalueが空の変数を定義したときに
pair.first()とpair.last()が両方hogeとなり、keyもvalueもhogeのmapになるみたいです。
対策としてはlengthが2でない場合に空のmapにするなどが考えられそうです。
以下は実際にこのケースに遭遇した際に対応したIssueです。
報告ありがとうございます🙌
なるほど!空文字の値を設定してしまうと、
lastもpairもKeyの方を参照してしまうんですね…!勉強になりました✍️
後ほど対策取り入れさせていただくと思います🙏
記事の執筆ありがとうございます🙇♂️
当方のFlutter 3.29.0 の環境でAndroid版のビルドをしようとしたら問題が発生し、少し修正を加えました。
Androidデバッグビルドがうまく行かず…
記事の通りにAndroid版の設定を更新し、dart-define-from-fileを使ったアプリのデバッグを試みたところ、エラーが発生しました。
エラー詳細
エラーではタスクの依存関係の設定が良くないと言われたので、
app/build.gradleのif文に新たに条件を追加してみた所、Debugモードのビルドはうまくいきました。リリースビルドができず
上記対応により、デバッグのビルドは成功するようになりましたが、リリースビルドには失敗してしまいました。
エラー詳細
そこで
:app:minifyReleaseWithR8というタスクに関連していろいろ調べてみた所、新しいAGP (私の環境では8.2.1です) ではtasks.whenTaskAddedを使っている部分はtasks.configureEachに置き換える必要があるらしいことがわかりました。そこで、
whenTaskAddedをconfigureEachに置き換えた所、問題なくリリースビルドが成功しました。まとめ
最新のFlutter/AGP環境では
tasks.whenTaskAddedをtasks.configureEachに置き換えていくつか条件文を追加しましょう。