本文主要对笔者flutter插件开发过程中如下问题做了解决。
一、Flutter插件android模块中的代码报红问题解决
二、Flutter Plugin 开发中引入本地 aar 包报错的问题。
三、Flutter插件项目中获取到 Activity
一、Flutter插件android模块中的代码报红问题解决
1、在开发Flutter插件时,打开插件的android项目,准备编写native端的代码时,发现各种报红,代码无法跳转,体验十分不好。就像我下面的截图一样:
2、这是因为android项目中没有依赖Flutter库。利用local.properties中的flutter.sdk路径来加载。(我们文件中一般自动加了flutter.sdk的路径,加上了的不用管,没加的加上就行)。
3、有些人可能在项目工程中没有看到该文件,原因可能是将local.properties文件隐藏了。
在 File => Settings => Editor => File Types =》Ignored Files and Folders 中移除就可以了。
4、在插件工程的android目录下的build.gradle文件中添加如下代码
//获取local.properties配置文件
def localProperties = new Properties()
def localPropertiesFile = rootProject.file('local.properties')
if (localPropertiesFile.exists()) {
localPropertiesFile.withReader('UTF-8') { reader ->
localProperties.load(reader)
}
}
//获取flutter的sdk路径
def flutterRoot = localProperties.getProperty('flutter.sdk')
if (flutterRoot == null) {
throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.")
}
dependencies {
compileOnly files("$flutterRoot/bin/cache/artifacts/engine/android-arm/flutter.jar")
}
5、重新加载编译就不会爆红了。
二、Flutter Plugin 开发中引入本地 aar 包报错的问题。
1、我是直接在插件的安卓工程(不是example项目中的安卓工程!!)中的根目录新建了libs目录,将aar复制到该目录中,随后在builld.gradle文件中通过如下方式引用。
implementation files('libs/speedata/scandecode-release.aar')
最后编译报错。报错内容如下:
Direct local .aar file dependencies are not supported when building an AAR. The resulting AAR would be broken because the classes and Android resources from any local .aar file dependencies would not be packaged in the resulting AAR. Previous versions of the Android Gradle Plugin produce broken AARs in this case too (despite not throwing this error). The following direct local .aar file dependencies of the :bytedcert project caused this error
本人通过 stack overflow 上苦苦搜寻终于得以解决。
解决方案如下 :
1、在插件项目的android目录下建立 lbs
目录放置你要引入的arr包,我这里是多建了一层speedata。
2、在build.gradle文件中的 rootProject.allprojects
部分 的 repositories 代码块下加入如下代码
flatDir{
dirs project(':插件名称').file('目录名称')
}
如下图:
3、在build.gradle
文件的 dependencies
代码块中加入如下内容
implementation (name: '不带后缀的aar名称', ext: 'aar')
如图
4、网上其他人说做到这里就够了,但是我重新加载项目会报如下错误。Project with path <plugin_name> could not be found in root project <project_name>
<plugin_name>和<plugin_name>为你的插件项目名称。
5、遇到这种错误,在你的settings.gradle
文件中加入如下内容,再编译就能通过了。
include '你的插件项目名称'
如图
原文可以看:怎么在flutter插件项目中引入本地aar?How to use local aar inside flutter plugin?
三、Flutter插件项目中获取到 Activity
笔者开发的插件需要获取到当前activity
上下文对象,可以在你的插件入口类中实现ActivityAware
接口,重写四个方法(onAttachedToActivity、onDetachedFromActivityForConfigChanges、onReattachedToActivityForConfigChanges、onDetachedFromActivity),可以在onAttachedToActivity
方法中拿到activity。
我的代码如图:
千万注意,方法调用的顺序!!!!
先是连接上 flutter 引擎 再是连接到 activity。
方法调用顺序为:onAttachedToEngine ⇒ onAttachedToActivity。
所以先在 onAttachedToEngine 设置方法调通道, 再去 onAttachedToActivity 利用 activity 对象做其它操作。文章来源:https://www.toymoban.com/news/detail-830093.html
原文可以看:在flutter 插件项目中获取 activity。Get activity reference in flutter plugin.文章来源地址https://www.toymoban.com/news/detail-830093.html
到了这里,关于Flutter 插件开发遇到的问题及解决方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!