Добавьте функциональность Flutter в качестве зависимости в библиотеку Android

#android #flutter #flutter-packages #flutter-platform-channel

Вопрос:

Зачем мне это нужно?

Я создаю пакет Flutter (для Android) и хочу создать MethodCallHandler код в отдельном файле AAR, который можно добавить в код моего плагина

Так что у меня будет:

  • pluginNativeCode/android/MyPlugin.kt
 import ir.malv.android.flutter.MySeparateMethodCallHandler

class MyFlutterPlugin: FlutterPlugin {
   override fun onAttachedToEngine(...) {
      // Here's the source of the problem
      channel.setMethodCallHandler(MySeparateMethodCallHandler()) 
   }
}
 

Его MySeparateMethodCallHandler нет в plugin/android детали, и он импортирован как зависимость от класса

Однако в этой библиотеке у меня нет доступа к кодам flutter, таким как MethodCallHandler class.

Аналогичное поведение в unity и react native

В react-native есть com.facebook.react:react-native: то, что можно добавить, compileOnly чтобы получить необходимые коды react-native

В unity у нас есть unity.jar файл, который содержит собственные коды unity и может быть добавлен compileOnly также для предоставления собственных API движка

Что у нас есть для этого в Флаттере?

Есть ли зависимость, которую я могу включить как компиляцию и использовать ее для получения необходимых классов и создания своего aar файла в отдельном проекте?

Ответ №1:

Вот решение:

  1. Добавьте этот пульт в repositories build.gradle
 allprojects {
  repositories {
    // .. rest of remote urls

    maven { url("http://download.flutter.io/")}
  }
}
 
  1. Добавьте эту зависимость в модуль build.gradle
 dependencies {
  
  compileOnly("io.flutter:flutter_embedding_debug:1.0.0-0fdb562ac8068ce3dda6b69aca3f355f4d1d2718")

  // rest
}
 

Обратите внимание на compileOnly . Это позволит избежать дублирования классов. Плагин просто требует этого. Приложение flutter предоставит его само.

Что такое 0fdb562ac8068ce3dda6b69aca3f355f4d1d2718 ?
Это версия движка, которая хорошо соответствует версии, с которой вы разрабатываете плагин.

в вашем коде у вас будет доступ к необходимым классам , таким как MethodChannel , MethodChannel.Result и …


Бонус: Как я узнаю, на каком движке я создаю плагин?

Я думаю, что это не должно иметь значения, если вам просто нужен класс, например MethodChannel , для вызова метода, но вот способ получить его с помощью Android Studio

  • Откройте project/example/android свой плагин с помощью Android studio (у которого активирован плагин Flutter).
  • запустите gradle plugin_name:dependencies задание и найдите flutter_embedding_ фразу.