ほんまに聞いてくださいよ!
Flutterでアプリ開発して、さて動かそうとなったときにね、アプリが立ち上がらなかったんですわ。
そんな時に、Android界隈で有名な中田大先生 が立ち上がって下さり、サポートいただきました。
本当にありがとうございました!
発生していた事件
1. SocketException
2. Caused by: java.lang.ClassNotFoundException
3. AndroidStudioでemulatorのログが出力されない問題を解決する(←未解決)
SocketException
ほんま聞いてくださいよ!
Flutterで通信系のアプリを開発して、iOSでは表示確認できて、Androidで確認できなかったわけです。
で、確認してみるとそもそもエミュレータでgoogle chromeを使ってサイトの閲覧なんかもできなくなっていたわけです。
調査したところ、こんな事例が掲載されていました。
Mac OS High Sierra 10.13.2 - Android Emulator has no internet connection
この中で、
./emulator -avd YOUR_EMULATOR_NAME -dns-server 8.8.8.8,8.8.4.4
これじゃない?と思い、実際に試してみることに。。。
が、そもそもこのemulatorってどこにあるんや?ってなるわけですよ。
場所は大抵の人はここかと思います。
/Users/<username>/Library/Android/sdk/emulator
なので、ここでまずはavdのリストを出力して、その中のemulator名をYOUR_EMULATOR_NAMEから置き換えします。
以下は実際に使用したコマンドです。
# emulatorの場所に移動
cd /Users/takehiro/Library/Android/sdk/emulator
# emulator一覧を表示
./emulator -list-avds
# emulatorのdns serverを変更
./emulator -avd Pixel_2_API_28_2 -dns-server 8.8.8.8,8.8.4.4
これで無事通信ができるようになりました。
Caused by: java.lang.ClassNotFoundException
これはかなり注意が必要な案件です。
アプリを作った時に、idが自動的につくかと思います。
僕、このidがおかしな形で生成されていたので、以下のファイルで該当箇所(com.example.flutt.flutt)を(com.example.flutt)に修正したわけです。
- android/app/src/main/AndroidManifest.xml
- android/app/build.gradle
しかし、android/app/src/main/kotlin/com/example/flutt/flutt/MainActivity.ktとその中の情報がおかしかったわけです。
まず、idが変わった時点で、
android/app/src/main/kotlin/com/example/flutt/flutt/MainActivity.kt
は
android/app/src/main/kotlin/com/example/flutt/MainActivity.kt
にならないとおかしい。
ディレクトリ構造もcom.example.fluttと合わせる必要があります。
次に、このMainActivity.ktの中のidがcom.example.flutt.fluttだったので、com.example.fluttに修正。
このあと、flutter cleanをしてから再度flutter runしたところ無事表示されました。