つきすけ の コーディング記

細かいところで嫌にならないように、小さいことでも解説していくブログ。たまに関係ないことも書く。

Flutterのicon(Android)どうやっていれるのか。

※もう一度言います。Androidの話です。

まず皆様にお手間取らせないために、結論から言うと

  1. 用意するのは1024x1024の画像一枚だけでよかった。(1024なのは多分推奨サイズ、他のサイズでは実験していない)
  2. 書き換えるのは./pubspec.yaml

なんでデフォルトの置き換えだけじゃダメなんだよ

一枚の画像からリサイズしてくれるサービスあるし、デフォルトicon画像のある場所(ex.) android/src/main/res/minmap-***/ hoge.png)に同じ名前で入れてなんで反映されないのか。
キャッシュクリア? そんなの当たり前に試してるよ、エンジニアなら当たり前だ。
調べた結果。

最近のAndroid(Android 8.0以降)は、単なる1枚の画像ではなく
「背景層」と「前景層」を分けたアダプティブアイコンという仕組みを使っている。

どうやらこのアダプティブアイコンとやらが悪さをしているらしい。
=前景層や背景層が優先して表示されている
しかも
=手動での変更はとても難しい

なにそれ。

解決策の正攻法

Flutter界隈では flutter_launcher_icons というパッケージを使うのが「正攻法
1枚のマスター画像から全サイズ・全プラットフォーム用のアイコンを自動生成してくれる。

ここで、先ほど用意した1024x1024のpngを仮にapp_icon.pngとする。
./assets/app_icon.png みたいに適当な場所にフォルダ作って入れる。

./pubspec.yamlに以下を記述する(ちょっと複雑)

dev_dependencies:
  # ↓もとからあるやつら
  flutter_test:
    sdk: flutter

  #↓追記#################
  flutter_launcher_icons: ^0.13.1
  ######################

  flutter_lints: ^6.0.0 # もとからあるやつ

flutter:
  uses-material-design: true #もとからあるやつ
  #↓追加####################
  assets:
    - assets/ #←画像入れたフォルダ
  #########################

#↓追加###############################
flutter_launcher_icons:
  android: true
  image_path: "assets/app_icon.png" # これが1024x1024の画像
  
  # Androidのアダプティブアイコン用の設定
  adaptive_icon_background: "#FFFFFF" # 背景を白に指定
  adaptive_icon_foreground: "assets/app_icon.png"  # アダプティブも同じアイコンで構わない

######################################

yamlは、インデントと空白に厳しい

半角スペースに赤字で起こるyaml
コロンつけた間違いにはあんまり優しい指摘をするyaml


で、プロンプト等にて

flutter clean
flutter pub get

エラーが出るとここで注意してくれる。

そして、

dart run flutter_launcher_icons

これで勝手にいろんなアイコン作ってくれるらしい

で、アプリを一回アンインストール、キャッシュクリア、何ならcold boot 心配なら初期化デモしてから

flutter run

これでできなければ、あとはAIにでも聞こう。

AdMobのテストデバイスIDが出ないなーと思ったら

本番用IDを入れて、広告が表示される前に、
忘れる前に!
テストデバイスIDを登録しておきたくてログをあさっていたのに、ないなーと思ったら

それこそ表示される前、つまり

Ad failed to load : 3

no fill 状態のときはまだテストデバイスIDは出てこないらしい。

ちなみにテストデバイスIDのログはこんな感じで出てくるとか

Use RequestConfiguration.Builder().setTestDeviceIds(Arrays.asList("ABCDEF012345"))

はやく会いたいな、テストデバイスID

クリスマスに知ったGithubの RepositoryとProjectの違い

アドベントカレンダー

2025年12/24〜25の深夜にお届けします。

正直、あんまりネタ(勉強していない)が無かったと言うよりこれ自体を忘れていたのですが、アドベントカレンダーと銘打っているのに最終日に書かないわけには行かないとギリギリ思い出しました。

来年は、一ヶ月に一回は何か有益なものを載せたい所存。

 

今日はGitHubについての学び

 

RepositoryとProject

GitHub始めたてだと、とりあえず「New Repository 」ってボタンと「New Project」というボタンの二つが現れて、とりあえず迷った。

二つの違いは何か?

新しく何か開発したい場合は、どっちのボタンを押せば良いわけ?

 

実は、これら二つは役割が全く異なる。

使い方を理解して、使い倒してやろうじゃないか。

 

Repository とは

ソースコードを管理するもの。

新しく「プログラミングソースのあるもの」を管理する場合は、ここ。

ただしRepository機能を使ってできるのはあくまで

  • 過去のバージョン・変更管理
  • 複数人での作業をスムーズにするためにブランチが切れる

と言う点。

 

反対に言うと「タスクの管理」はできない。

 

Project とは

「タスクを管理」する機能。

昨今の開発のされ方(アジャイル開発、スクラム開発)に合わせて最近できた部分もあるらしいが、ToDoリストを作成できる機能。

『この機能、〇〇までに実装』

のように扱う。

 

複合して使うのか?

A. それぞれ単体で使うこともあれば、複合して使うこともある。

チーム開発であれば、RepositoryとProjectは案外同時に使用されるし、個人開発であればRepositoryのみ使われ、タスクがわけわからなくなってきたらProject機能で仕分けする、など上手く使い分けることができるようだ。

 

まとめ

Scrumの一般的な使い方がまだよくわからないけど、上手く扱えたら良いなと言う今日この頃です。

メリークリスマス🎁

エミュレータ電源入れてなかった

アドベントカレンダー12/13

薄情します。忘れてたよ!

 

Androidエミュレータ実行エラー原因がしょうもなかった件。

 

このエラー

Error connecting to the service protocol: failed to connect to http://127.0.0.1:60790/PfFywjgyX9U=/HttpException: Connection closed before full header was received, uri = http://127.0.0.1:60790/PfFywjgyX9U=/ws

 

解決方法

エミュレータの電源を入れる

 

エミュレータ立ち上げただけで電源切ってたらこのエラーでた。

笑うしかないぜ。

カービィのエアライダー 実況ボイス消失事件

アドベントカレンダー12月6日

 

今日は技術ブログというか、ちょっと面白い発見をしただけなのだが

 

カービィのエアライダーの実況ボイスだけ綺麗に消えた

イヤホンジャックに一極端子のケーブルを挿したから

そのあと別のヘッドホンで試したわけでもないけど、あの声はサラウンド時専用ボイスであってモノラル端子では聴けないのだということを知った。

綺麗にボイスだけ抜けてるので、「極振りをそういう使い方するんだー」って思ったという話

 

今時一極端子のイヤホンジャックを持つイヤホンなんて早々ないのでな(持ってた人)

gitに-uなんてのあったんだね

すでに3日あいたアドベントカレンダー

まあ、わかってたよ。毎日なんて無理だって。

 

本日の話。今日初めて知ったんだけど便利じゃんこれ。

 

git push -u origin main の -u

今まで普通に、正直に

git push origin main

って毎回打ってたけど。

なんなら

git push origin hoge:main

とか色々やってたけど(これは例外か)

git push -u origin main

を一回やるだけで?

ローカルとリモートのリポジトリがくっつく、だと!?

こうしておけば二回目からはローカルリポジトリで main にいれば

git push

git pull

だけで良い、だと...

オプションいっぱいあるけどー、便利なのはしておきたいな〜

 

※ -u: --set-upstream

 

 

Perplexity の本気を見た気がする

アドベントカレンダー2日目

 

Perplexity の本気を見た気がする

パプレとは

なんかソフトバンクが提供してる、AIをいろいろ詰め込んだ検索エンジン的なもの。

結局のところChat-GPTみたいに対話型で使えるわけなんだけど、Chat-GPTもGeminiも他にも色々内包してて、話題に応じて適当なエンジン選んでる、らしい(本人談)

 

こんなことをやってみた

「Flutterで○○で○○して○○するというアプリを作るのだが、画面はこれとあれとそれの三つで、これにはこれこれこれのボタン、でそれを押すとあれの画面に飛んで、あれにはこう言う機能がついてて、あれがこうなるとそれに移って、それからこれに戻るボタンもどこかにある。そんなUIを生成して欲しい」

といって、まあ画像生成をしてもらった。

そこまではよかった。

画像生成については、一回暴走すると変になるから、そこはパプレの愛嬌というかカオス部分というかクセというかなんというか。

 

ただ単に相談してみたつもりだった

「Flutterで○○で○○して○○するというアプリを作るんだけど、二人で作業するとして、どういうふうにタスク振り分けると良いかなあ?」

ああ! この前言ってたあれのことですね(別日)!! こんな感じはどうでしょう!!

すでにタスク化された表が登場

なんのWidget使えば良いかとかも書いてあった。

 

え? あ、ありがと。

これからもよろしくな、相棒。