2

为什么我需要这个?

我正在创建一个 Flutter 包(适用于 android),我想MethodCallHandler在一个单独的 AAR 文件中创建 's 代码,该文件可以添加到我的插件代码中

所以我会有:

  • 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类的颤振代码。

统一中的类似行为和本机反应

在 react-native 中com.facebook.react:react-native:+,可以添加它compileOnly以获得所需的 react-native 代码

在统一中,我们有unity.jar包含统一本机代码的文件,也可以添加compileOnly以提供引擎的本机 API

我们在 Flutter 中为此提供了什么?

是否有一个依赖项可以包含为 compileOnly 并使用它来获取所需的类并aar在单独的项目中创建我的文件?

4

1 回答 1

0

这是一个解决方案:

  1. 将此遥控器添加repositoriesbuild.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_短语。
于 2021-06-16T11:33:08.450 回答