Реализация Multidex во Flutter для приложений с более чем 64 тысячами методов

По мере того, как ваше приложение Flutter становится все сложнее и функциональнее, вы можете столкнуться с распространенной проблемой, известной как «ограничение метода 65 КБ» на Android. Это ограничение возникает из-за базового формата файла Dalvik Executable (DEX), который используется Android для упаковки и выполнения скомпилированного кода. Когда количество методов в вашем приложении превышает 64 КБ, вам необходимо включить multidex, чтобы обойти это ограничение. В этой статье блога мы рассмотрим шаги по включению мультидексации в вашем приложении Flutter и предоставим примеры кода, которые помогут вам в этом процессе.

Включение Multidex во Flutter:
Чтобы включить Multidex в приложении Flutter, выполните следующие действия:

Шаг 1. Добавьте зависимость multidex
В файле pubspec.yamlвашего проекта Flutter добавьте зависимость multidex в раздел dependencies:

dependencies:
  flutter:
    sdk: flutter
  multidex: ^1.0.0

Шаг 2. Обновите файл android/app/build.gradle.
Откройте файл android/app/build.gradleв своем проекте Flutter и внесите следующие изменения:

android {
    defaultConfig {
        // ...
        multiDexEnabled true
    }
// ...
}
dependencies {
    // ...
    implementation 'androidx.multidex:multidex:2.0.1'
}

Шаг 3. Переопределите класс Application.
Создайте новый класс, назовем его MyApplication, который расширяет предоставленный класс FlutterApplication. от Флаттера. Переопределите метод attachBaseContextи вызовите MultiDex.install(this), чтобы включить мультидекс.

import androidx.multidex.MultiDex;
public class MyApplication extends FlutterApplication {
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        MultiDex.install(this);
    }
}

Шаг 4. Обновите файл AndroidManifest.xml.
Откройте файл AndroidManifest.xmlв своем проекте Flutter и обновите элемент <application>, чтобы использовать ваш пользовательский класс MyApplication.

<application
    android:name=".MyApplication"
    <!-- ... -->
</application>

Пример кода:
Вот пример того, как вы можете реализовать мультидекс в своем приложении Flutter:

import 'package:flutter/material.dart';
import 'android/app/src/main/java/com/example/my_flutter_app/MyApplication.java';
void main() {
  runApp(MyApp());
}
class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My Flutter App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Multidex Example'),
        ),
        body: Center(
          child: Text(
            'Hello, Multidex!',
            style: TextStyle(fontSize: 24),
          ),
        ),
      ),
    );
  }
}

Включение мультидексирования в вашем приложении Flutter позволяет преодолеть ограничение метода в 64 КБ, установленное Android. Выполнив действия, описанные в этой статье, и внеся необходимые изменения, вы можете быть уверены, что ваше приложение будет продолжать работать правильно по мере его усложнения. Не забудьте обновить зависимости, изменить файлы build.gradle и AndroidManifest.xml и переопределить класс Application. Включив мультидекс, вы можете уверенно расширять функциональность своего приложения, не беспокоясь об ограничениях методов.