LoginSignup
19
7

More than 3 years have passed since last update.

FlutterのAndroid開発における64K問題の解決方法

Last updated at Posted at 2020-12-15

TL; DR

Androidでは、アプリおよびアプリが参照するライブラリが65,536メソッドを超えるとビルドエラーが発生します。
65,536 = 64 × 1,024(K)なので64K問題と言います。

解決策1: アプリが使用するメソッドやライブラリを見直す

一番シンプルで当たり前の解決策。とはいえ、必要だからライブラリを入れているのであって、実際に効果はそこまで期待できないと思われます。
実際は、解決策2, 3のどちらかを選択することになるでしょう。

解決策2: 対象のSDKを21以上にする

Android 5.0(API 21)移行ではデフォルトでmultidexに対応しているので、何らかの理由でそれ以前のバージョンに対応する必要がなければ単純に対象のSDKを21以上にするのが良いです。

android/app/build.gradle
android {
    defaultConfig {
        applicationId "com.example.sample"
        // minSdkVersion 16
        minSdkVersion 21 // 最小サポートSDKを21以上にする
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
}

解決策3: multidexサポートライブラリを使用する

何らかの事情がある場合にはmultidexサポートライブラリを使用することでも解決できます。

android/app/build.gradle
android {
    defaultConfig {
        applicationId "com.example.sample"
        minSdkVersion 16
        targetSdkVersion 29
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
        multiDexEnabled true // multidexサポートライブラリを使用する
    }
}

解決策4: ビルド時に圧縮する(参考)

Flutterでできるのかは要調査(調査するとは言っていない)。
ビルド時に不要なメソッドを除くことができるはず。

検索用

1. flutter runを実行した際に64K問題が発生したときのログ

この時は、cloud_firestorepubspec.yamlに追加したことでアプリ全体のメソッド数が85242個と64Kよりも大きくなってしまった。

D8: Cannot fit requested classes in a single dex file (# methods: 85242 > 65536)
com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: 
The number of method references in a .dex file cannot exceed 64K.       
Learn how to resolve this issue at https://developer.android.com/tools/building/multidex.html

参考資料

19
7
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
19
7