java - 如何从flutter中的kotlin代码访问本地.jar文件的Java类和方法
问题描述
我创建了一个颤振插件,我想在其中使用本地 .aar 文件。我的项目结构(android 部分)如下所示:
--android
--gradle
--libs
--geth.jar
--src
--main
--Kotlin code
--build.gradle
所以要在我的插件中使用 .aar 文件,首先我从这个链接下载了 geth .aar 文件:
https://geth.ethereum.org/downloads/
然后我将名称更改为 geth.jar(请注意仅通过更改名称来更改格式)然后我通过在插件的 android 文件夹中创建一个 libs 文件夹将其导入项目:
--android
--gradle
--libs <--!! here
--geth.jar
--src
--main
--Kotlin code
--build.gradle
然后在依赖部分的 build.graadle 文件的末尾,我将其更改为:
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation fileTree(dir: 'libs', include: ['*.jar']) <--!! this part was added
}
现在,我的问题是如何在 android 的 kotlin 文件中使用这个 .aar(或 .jar)文件的类和方法?在这里: --android --gradle --libs --geth.jar --src --main --Kotlin code <--!!here --build.gradle 我试过这个,但它给出了错误:
package com.example.flutter
import androidx.annotation.NonNull
import io.flutter.embedding.engine.plugins.FlutterPlugin
import io.flutter.plugin.common.MethodCall
import io.flutter.plugin.common.MethodChannel
import io.flutter.plugin.common.MethodChannel.MethodCallHandler
import io.flutter.plugin.common.MethodChannel.Result
import io.flutter.plugin.common.PluginRegistry.Registrar
import go.geth.gojni.Account; <--!! this is added
import go.geth.gojni.Geth; <--!! this is added
import go.geth.gojni.KeyStore; <--!! this is added
import go.geth.gojni.Node; <--!! this is added
import go.geth.gojni.NodeConfig; <--!! this is added
/** FlutterNPlugin */
class FlutterNPlugin: FlutterPlugin, MethodCallHandler {
/// The MethodChannel that will the communication between Flutter and native Android
///
/// This local reference serves to register the plugin with the Flutter Engine and unregister it
/// when the Flutter Engine is detached from the Activity
private lateinit var channel : MethodChannel
override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) {
channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter")
channel.setMethodCallHandler(this)
}
override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) {
if (call.method == "getPlatformVersion") {
NodeConfig nc = new NodeConfig();
result.success("Android ${android.os.Build.VERSION.RELEASE}")
} else {
result.notImplemented()
}
}
override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) {
channel.setMethodCallHandler(null)
}
}
解决方案
它不是有效的 Kotlin 语法,请尝试替换:
NodeConfig nc = new NodeConfig();
这样:
val nc = NodeConfig()
推荐阅读
- python - 读取带有嵌套字典的文本文件并转换为 csv
- google-cloud-platform - GPU配额增加但无法访问
- r - 有没有办法将一个列中的字符串与 R 中另一列中的几个字符串完全匹配?
- node.js - nodejs http服务器:出现错误时如何结束请求?
- php - php mysqli 连接到旧版本
- c# - 在 ASP.NET MVC 5 中调用 SOAP webservice 时如何修复 502 Bad Gateway 错误?
- asp.net - 我无法通过 Request.form aspx 获取发布参数
- javascript - 如何连接任意数量的数组并返回指定数量的数组副本
- java - In Java, How do I capitalize the first letters of an automated input?
- html - 如何用css制作阅读滚动条?