0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

WindowsでFlutterのflavor向けicon作成でつまった話

Posted at

前置き

FlutterでFlavor毎にアプリのアイコンを変更するときにはまったので、その記録を残します。(恐らくWindowsだけです。)
Flutterでflavorの設定をした記録を書きましたが、その続きになります。

flutter launcher icons

Flutterでアプリのアイコンを作成する場合は、flutter launcher icons とっても便利なツールを使用します。

基本的な使い方は、公式GitHubや検索すれば素晴らしい記事が出てくると思いますので、割愛します。

flutter launcher icons でflavorに対応するにはflavorブランチから取ってきます。

pubspec.yaml
dev_dependencies:
  flutter_launcher_icons:
      git:
        url: https://github.com/fluttercommunity/flutter_launcher_icons.git
        ref: flavors
$ flutter packages get

公式GitHubにもflvor対応について書いてあります。

Flavor support

Create a Flutter Launcher Icons configuration file for your flavor.
The config file is called flutter_laucher_icons-(flavor).yaml
by replacing (flavor) by the name of your desired flavor.

The configuration file format is the same.

Google翻訳

フレーバーサポート
あなたのフレーバー用のFlutter Launcher Icons設定ファイルを作成してください。
設定ファイルの名前はflutter_laucher_icons-(flavor)> .yamlで、
(flavor)を希望のフレーバーの名前に置き換えます。

設定ファイルのフォーマットは同じです。

書いてある通りに、プロジェクトのルートにflutter_launche_icons-flavor.yamlを作成します。

flutter_launcher_icons-app1.yaml
flutter_icons:
  image_path: "assets/1/app1_icon.png" //ここで指定する画像をflavorごとに変えます。
  android: true
  ios: true

これをflavorの数だけ作成します。
ファイルを作成したら、flutter launcher icons のコマンドを実行すればアイコンが作成されます。

$ flutter packages pub run flutter_launcher_icons:main
*** ERROR ***
NoConfigFoundException
Check that your config file `flutter_launcher_icons.yaml` has a `flutter_icons` section
pub finished with exit code 1

と思ったら、残念ながらエラーになります。

GitHubにあるソースコードを見てみると、getFlavors() で正規表現を使いパターンに合ったファイルを見つけてきているので、動作するように見えます。
しかし、実際にはパターンにあったファイルが見つからず、作成した設定ファイルが無視されているようです。

見ているだけではわからないので、実際のソースを書き換えて動作を確認してみます。
.packagesにソースコードのパスが記載されていますが、そこに記載されているコードを修正しても何も変化はありません。(実際はどのファイルを見ているのか探しました。汗)
答えはpubspec.lockにあり、flutter_launcher_iconsはGitHubを直接見に行っていることがわかります。
.packagesにあるパスは一体何なのか・・・
GitHubにあるファイルはもちろん編集できませんので、ローカルにあるファイルを見てもらうように修正ます。

pubspec.yaml
dev_dependencies:
  flutter_launcher_icons:
    path: (flutterがインストールされているパス)/.pub-cache/git/flutter_launcher_icons-6a1e009d085a0a0b882d546e0bdaee3573011204

これで、ローカルにあるソースコードで確認ができます。
そのまま実行すると、今度は別のエラーが発生するので、ここを参考にすると、imageの依存関係でエラーになっているようですので、修正します。

pubspec.yaml
dependency_overrides:
  image: 2.0.7

ようやくflutter launcher iconsが動作するようになったので、試しにRegExpでマッチさせようとしてるパターンと文字列を表示してみました。
/の部分が違うようです。Windowsのメモ帳で開くと円マークになります。

.\flutter_launcher_icons-app1.yaml //パス文字列
./flutter_launcher_icons-(.*).yaml //パターン

これにより、正規表現のMatchせずにflavorが無視される原因になります。

const flavorConfigFilePattern = "\./flutter_launcher_icons-(.*).yaml";
//この内容を下に変更します。
const flavorConfigFilePattern = "flutter_launcher_icons-(.*).yaml";

flutter launcher iconsを実行する前にAndroidManifest.xml のバックアップを取ってください。
初実行時に内容が消えてしまうようです。

$flutter packages pub run flutter_launcher_icons:main
Android minSdkVersion = 16
Creating default icons Android
Overwriting the default Android launcher icon with a new icon
Building iOS launcher icon for app1
Android minSdkVersion = 16
Creating default icons Android
Overwriting the default Android launcher icon with a new icon
Building iOS launcher icon for app2

無事に動作しました。

あとはそれぞれflutter run すればアイコンが使用されます。
app.png

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?