在 android 库中添加 Flutter 功能作为依赖项
Add Flutter functionality as a dependency in android library
为什么我需要这个?
我正在创建一个 Flutter 包(用于 android),我想在一个单独的 AAR 文件中创建 MethodCallHandler
的代码,该文件可以添加到我的插件代码中
所以我要:
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
部分,它作为 gradle 依赖项导入
但是在那个库中我无法访问像 MethodCallHandler
class.
这样的 flutter 代码
Unity 和 React Native 中的相似行为
In react-native there is com.facebook.react:react-native:+
that can be added as compileOnly
to get the needed react-native codes
In unity we have unity.jar
file which contains unity native codes and can be added as compileOnly
as well to provide engine's native APIs
我们在 Flutter 中为此做了什么?
是否有我可以包含为 compileOnly 的依赖项并使用它来获取所需的 classes 并在单独的项目中创建我的 aar
文件?
这是一个解决方案:
- 将此遥控器添加到
build.gradle
repositories
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
。这将避免 class 重复。插件只需要它。 flutter 应用程序将自行提供。
What is 0fdb562ac8068ce3dda6b69aca3f355f4d1d2718
?
It's the engine version that is good to match the version you are developing the plugin with.
在您的代码中,您将可以访问所需的 class,例如 MethodChannel
、MethodChannel.Result
和 ...
奖励:我怎么知道我用什么引擎制作插件?
我认为如果你只需要一个像 MethodChannel
这样的 class 来调用一个方法应该没关系,但这里有一种方法可以使用 Android Studio
- 使用 Android studio 打开插件的
project/example/android
(已激活 Flutter 插件)
- 运行
gradle plugin_name:dependencies
任务并查找 flutter_embedding_
短语。
为什么我需要这个?
我正在创建一个 Flutter 包(用于 android),我想在一个单独的 AAR 文件中创建 MethodCallHandler
的代码,该文件可以添加到我的插件代码中
所以我要:
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
部分,它作为 gradle 依赖项导入
但是在那个库中我无法访问像 MethodCallHandler
class.
Unity 和 React Native 中的相似行为
In react-native there is
com.facebook.react:react-native:+
that can be added ascompileOnly
to get the needed react-native codes
In unity we have
unity.jar
file which contains unity native codes and can be added ascompileOnly
as well to provide engine's native APIs
我们在 Flutter 中为此做了什么?
是否有我可以包含为 compileOnly 的依赖项并使用它来获取所需的 classes 并在单独的项目中创建我的 aar
文件?
这是一个解决方案:
- 将此遥控器添加到
build.gradle
repositories
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
。这将避免 class 重复。插件只需要它。 flutter 应用程序将自行提供。
What is
0fdb562ac8068ce3dda6b69aca3f355f4d1d2718
?
It's the engine version that is good to match the version you are developing the plugin with.
在您的代码中,您将可以访问所需的 class,例如 MethodChannel
、MethodChannel.Result
和 ...
奖励:我怎么知道我用什么引擎制作插件?
我认为如果你只需要一个像 MethodChannel
这样的 class 来调用一个方法应该没关系,但这里有一种方法可以使用 Android Studio
- 使用 Android studio 打开插件的
project/example/android
(已激活 Flutter 插件) - 运行
gradle plugin_name:dependencies
任务并查找flutter_embedding_
短语。