はじめに
Flutterに携わって2,3年経過してきたので、ローカルに残っているエラー対応のメモについて、備忘録としてまとめようと思います。
実行しても何もエラー吐かずに動かない場合
ターミナルでflutter run
を実行
こんな感じ↓のエラーが出ることがある
$ flutter run
Using hardware rendering with device Android SDK built for x86. If you get graphics
artifacts, consider enabling software rendering with "--enable-software-rendering".
Launching lib/main.dart on Android SDK built for x86 in debug mode...
Initializing gradle... 0.7s
Resolving dependencies... 3.6s
・・・・
D8: Cannot fit requested classes in a single dex file (# methods: 73623 > 65536)
Running Gradle task 'assembleDebug'...
Running Gradle task 'assembleDebug'... Done 8.6s
Gradle task assembleDebug failed with exit code 1
D8: Cannot fit requested classes in a single dex file (# methods: 73623 > 65536)
このエラーが出るときはAndroid 64k問題が発生しているとのこと。
解決するために以下のことを行う
-
build.gradle
に以下を追加する
android {
defaultConfig {
...
minSdkVersion 21
targetSdkVersion 30
multiDexEnabled true //←コレ
}
...
}
-
minSdkVersion
を 20 以下に設定している場合は、Multidex サポート ライブラリを依存関係に追加
(今のアプリでminSdkVersion
を20以下にしているものなんてなさそう)
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 30
multiDexEnabled true
}
...
}
dependencies {
compile 'com.android.support:multidex:1.0.3' //←コレ
}
- MultiDexの初期化
- Applicationクラスを継承したクラスを使っていない場合
- マニフェストファイルのタグ内に、以下の編集を行う
xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.myapp"> <application android:name="android.support.multidex.MultiDexApplication" > <!-- コレ --> ... </application> </manifest>
- Applicationクラスを継承したクラスを使っている場合
- 自作ApplicationクラスのattachBaseContext()メソッド内で、Multidexを有効にする
public class MyApplication extends Application { @Override protected void attachBaseContext(Context base) { super.attachBaseContext(base); MultiDex.install(this); //←コレ } }
これで通るようになるはず。
参考文献
64Kを超えるメソッドを使用するアプリ向けにmultidexを有効化する - Android Developers
https://developer.android.com/studio/build/multidex
エミュレータがネットワークにつながらない
→エミュレータ内でGoogleChromeとか開いても繋がらない場合
- 起動をAndroidStudioからではなくターミナルから行う
- ターミナルでAndroidのエミュレータが入っているディレクトリに移動
$ cd /Library/Android/sdk/emulator/
- 以下でエミュレータを起動
$ ./emulator -avd <エミュレータ名> -dns-server 8.8.8.8
ビルドは成功したが以下のエラーが出る場合
Error connecting to the service protocol:HttpException
先駆者様↓
- エミュレータのOSがAndroid Qだと発生するらしい
- OSをPiにすると治るとのこと
iOSで起動できない場合
Run
->Edit Configurations...
Additional argumentsを以下にしてみる
--no-track-widget-creation --debug --flavor develop
終わりに
エラーで行き詰まった時に追記します。