#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:
Вот решение:
- Добавьте этот пульт в
repositories
build.gradle
allprojects {
repositories {
// .. rest of remote urls
maven { url("http://download.flutter.io/")}
}
}
- Добавьте эту зависимость в модуль
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_
фразу.