Android 原生导入Flutter模块

这篇博客主要讨论了在Java项目中遇到的两个Flutter模块集成问题:一是由于compileSdkVersion和targetSdkVersion过高导致的AssertionError,解决方法是降低这两个版本;二是setting.gradle文件中的setBinding和evaluate方法无法识别,解决办法是将设置文件从.setting.gradle.kts改为.setting.gradle,并调整文件路径。此外,还提醒注意flutter模块的实际导入名称。博主分享了调试Gradle问题的技巧,并提供了gradlew buildInfo和直接编译Flutter工程的命令。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1:java.lang.AssertionError: annotationType(): unrecognized Attribute name MODULE

原因在于导入的flutter模块的compileSdkVersion 31和targetSdkVersion 31 过高,将他调低。

注意将Flutter模块里面的Flutter工程调低。位置别搞错了。flutter模块包含了.android模块也包含了一个Flutter模块将对应的sdk都调成一致吧。

问题2:setting.gradle 加入这两句话

setBinding(new Binding([gradle: this])) // new
evaluate(new File( // new
settingsDir, // new
‘flutter_module/.android/include_flutter.groovy’ // new
))
出现各种问题。比如setBinding不识别,或者找不到flutter_module模块。

我的项目原先是setting.gradle.kts。这货死活不识别setBinding方法和evaluate方法,导致我绕了很久的弯子。这里将setting.gradle.kts 改成了setting.gradle 问题解决。

其次关于flutter模块路径问题。可以跟settingsDir一个路径,就如上所描述。也可以跟settingsDir的父路径一个路径。那么代码相应改成

evaluate(new File( // new
settingsDir.parentFile, // new
‘flutter_module/.android/include_flutter.groovy’ // new
))
问题3:注意你的模块虽然是flutter_module等名字,但是最终能够被app依赖的确是

implementation(project(“:flutter”)) 这个名字。因为 flutter_module有好多工程,实际被导入到host工程里面的是那个flutter工程。
说白了,new File的第一个参数确定的路径就是你的flutter模块的路径。

问题到此解决。吐槽一下,gralde出现的问题的时候排查最痛苦。这里有几个调试方法。

1、gradlew build info 能够输出大量调试信息,就是特别慢

2、gradlew task :flutter:compileDebugJavaWithJavac  可以直接编译flutter工程的信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值