背景
Flutterで開発しているアプリをAndroidで起動したところ、
VSCodeのターミナルにもログが一切表示されず、即クラッシュする という事象に遭遇しました。
iOSでは正常に動作しており、原因はAndroid特有のものでした。
こんな使い方もあるということで備忘録として残しておきます
ログの取得
まずは adb logcat
を使って、デバイス側のログを直接取得します。
adb logcat -d > log.txt
キーワードで絞り込み
log.txt
には膨大なログが含まれるため、クラッシュ関連のキーワードだけを抽出します。
検索キーワード例(大文字小文字区別なし):
crash
fatal
error
exception
androidruntime
FATAL
AIで解析
取得した log.txt
をGitHub CopilotやChatGPTなどのAIに渡し、
「上記キーワードを含む行を探して原因を推測してほしい」と依頼します。
この方法で、次の原因が特定できました。
原因
AndroidManifest.xml
のアプリIDが
hogehoge.fugafuga.piyopiyo
となっているのに対し、
MainActivity
クラスは
com.example.myapp
という別パッケージに存在していました。
AndroidManifestのアプリIDとMainActivityのパッケージが一致していない ため、
Androidが起動エントリポイントを見つけられず、起動時クラッシュしていました。
解決策
-
MainActivityのパッケージをAndroidManifestのアプリIDに合わせる
または - AndroidManifestの
package
をMainActivityのパッケージに合わせる
// 修正後の例(hogehoge.fugafuga.piyopiyoに統一)
package hogehoge.fugafuga.piyopiyo
class MainActivity: FlutterActivity() { }
学び
- ログが出ないクラッシュでも、
adb logcat
+ キーワード抽出で原因を特定できる - AIを使えば、ログ解析のノイズ除去と原因推測が高速化できる
- FlutterのAndroid側では、アプリIDとMainActivityパッケージの不一致はよくある落とし穴
まとめ
- iOSで動くのにAndroidで即落ちする場合 → package不一致を疑う
- VSCodeでログが出なくても、
adb logcat
とAI活用で爆速で解析し、修正も依頼してしまってください - 小さな構成ミスもAIの助けで短時間で発見できるのが良いですね