2
1

More than 1 year has passed since last update.

【Flutter】開発時に行き詰まったエラーメモ

Posted at

はじめに

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

終わりに

エラーで行き詰まった時に追記します。

2
1
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
2
1