java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy

简介: java.io.FileNotFoundException: ...my_flutter/.android/include_flutter.groovy

flutter混合开发中,有时候会遇到

java.io.FileNotFoundException: /Users/nesger/Desktop/nesger_folder/project/studio/my_flutter/.android/include_flutter.groovy

这样的问题,提示文件找不到。

记住:一定要先执行一次   flutter pub get

无论是新建项目,还是老项目允许出现这个问题,先想办法让编译器找到这个文件。

我们看下配置信息:

include ':app'
setBinding(new Binding([gradle: this]))          
evaluate(new File(                                         
        settingsDir.parentFile,                                  
        'my_flutter/.android/include_flutter.groovy'    
))   
 

new File(settingsDir.parentFile,'my_flutter/.android/include_flutter.groovy' ) 解读下这句话的意思就是指定 include_flutter.groovy 的所在位置。这里的意思是在 settings 文件所在目录(settingsDir)的父目录有个文件(settingsDir.parentFilemy_flutter/.android/include_flutter.groovy。看下下面的文件放置位置图就清楚了:

所以官网在跟项目同级创建 flutter module 是没问题的。但是我们现在改了,应该怎样设置呢?

上下图,然后大家考虑一下答案,再往下翻,相信聪明的你一定知道,改法有多种,下面提供一下几种方案。

Tips:注意相对路径的使用,重点是找到 include_flutter.groovy

解法一:(推荐)

include ':app'
setBinding(new Binding([gradle: this]))         
evaluate(new File(                                        
        settingsDir,                                  
        'sub/my_flutter/.android/include_flutter.groovy'    
))                                                                     

在 settings 所在目录有 sub/my_flutter/.android/include_flutter.groovy 文件

解法二:

include ':app'
setBinding(new Binding([gradle: this]))        
evaluate(new File(                                          
        settingsDir.parentFile,                                   
        'MyApp/sub/my_flutter/.android/include_flutter.groovy'   
))                                                                     

在 settings 所在目录的父目录有 MyApp/sub/my_flutter/.android/include_flutter.groovy 文件

有了上面图文并茂的讲解加上一个实际的 Sample,相信不管 flutter module 放在哪里你到可以关联到了。


最后再说个老项目遇到这种问题的解决办法。

下图是项目各模块的位置(flutter_module目录就是flutter相关代码):

从上图可以看到,settings.gradle与flutter_module处在根目录同一级下。

settings.gradle配置如下:

include ':***'
include ':biz-ss'
include ':***'
include ':runtime'
 
include ':app'
def localPropertiesFile = new File("gradle.properties")
def properties = new Properties()
localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) }
// 非发布模式,添加本地依赖
if (!properties.getProperty('IS_PUBLISHED').toBoolean()) {
    setBinding(new Binding([gradle: this]))
    evaluate(new File(
            './flutter_module/.android/include_flutter.groovy'
    ))
}
 
include ':flutter_module'

这个配置是没有问题且可以正常运行,当换了个电脑重新运行,有时候会出现下面的错误:

org.gradle.api.GradleScriptException: A problem occurred evaluating settings '**-android_2.5.3'.

Caused by: java.io.FileNotFoundException: /Users/lzx/.gradle/daemon/6.1.1/flutter_module/.android/include_flutter.groovy (/Users/lzx/.gradle/daemon/6.1.1/flutter_module/.android/include_flutter.groovy)

   at settings_2829oyj549dc28e9vwzq8kywa.run(/Users/lzx/Documents/git/**t-android_2.5.3/settings.gradle:13)

   at org.gradle.groovy.scripts.internal.DefaultScriptRunnerFactory$ScriptRunnerImpl.run(DefaultScriptRunnerFactory.java:91)

   ... 125 more

从报错可以看出,编译器没有找到正确的include_flutter.groovy所在的路径。

在网上找了一番后,总算找到了解决办法,修改配置如下:

1. if (!properties.getProperty('IS_PUBLISHED').toBoolean()) {
2.     setBinding(new Binding([gradle: this]))
3.     evaluate(new File(settingsDir,
4. 'flutter_module/.android/include_flutter.groovy'
5.     ))
6. }

再次build就能正常运行了。

PS:当项目能正常运行一段时间后,可以将settingsDir配置删除掉再试下,项目也能正常运行了

相关文章
|
2天前
|
SQL Java Unix
Android经典面试题之Java中获取时间戳的方式有哪些?有什么区别?
在Java中获取时间戳有多种方式,包括`System.currentTimeMillis()`(毫秒级,适用于日志和计时)、`System.nanoTime()`(纳秒级,高精度计时)、`Instant.now().toEpochMilli()`(毫秒级,ISO-8601标准)和`Instant.now().getEpochSecond()`(秒级)。`Timestamp.valueOf(LocalDateTime.now()).getTime()`适用于数据库操作。选择方法取决于精度、用途和时间起点的需求。
15 3
|
1月前
|
安全 Java 编译器
Android面试题之Java 泛型和Kotlin泛型
**Java泛型是JDK5引入的特性,用于编译时类型检查和安全。泛型擦除会在运行时移除类型参数,用Object或边界类型替换。这导致几个限制:不能直接创建泛型实例,不能使用instanceof,泛型数组与协变冲突,以及在静态上下文中的限制。通配符如<?>用于增强灵活性,<? extends T>只读,<? super T>只写。面试题涉及泛型原理和擦除机制。
24 3
Android面试题之Java 泛型和Kotlin泛型
|
1月前
|
存储 Java 数据库连接
Android Java开发异步
【6月更文挑战第15天】
|
1月前
|
缓存 网络协议 Java
Android面试题之Java网络通信基础知识
Socket是应用与TCP/IP通信的接口,封装了底层细节。网络通信涉及连接、读写数据。BIO是同步阻塞,NIO支持多路复用(如Selector),AIO在某些平台提供异步非阻塞服务。BIO示例中,服务端用固定线程池处理客户端请求,客户端发起连接并读写数据。NIO的关键是Selector监控多个通道的事件,减少线程消耗。书中推荐《Java网络编程》和《UNIX网络编程》。关注公众号AntDream了解更多。
26 2
|
1月前
|
安全 Java Android开发
Kotlin与Java:Android开发的双剑合璧
【6月更文挑战第9天】Kotlin和Java在Android开发中形成互补态势。Java凭借广泛社区支持和丰富的类库资源占据主导,但其语法繁琐和空指针问题限制了发展。Kotlin,设计来解决这些问题,以其简洁、安全、高效的特性逐渐兴起。Kotlin的互操作性允许与Java无缝集成,提升开发效率,减少错误。两者结合提高了代码质量和开发者的灵活性,促进了Android开发社区的繁荣。开发者应把握这种&quot;双剑合璧&quot;,适应技术发展。
40 10
|
1月前
|
开发框架 Dart 开发工具
|
21天前
|
Dart Android开发 Windows
Flutter和Native 通信 android端
Flutter和Native 通信 android端
|
1月前
|
Android开发 开发者 UED
未来已来:Flutter 引领的安卓与跨平台开发奇幻之旅
【6月更文挑战第8天】Flutter,一款引领安卓与跨平台开发革新的框架,以其高效一致的开发体验、精美UI设计和跨平台能力脱颖而出。开发者可使用相同代码库在多平台开发,降低复杂性。其活跃社区和丰富生态系统进一步增强功能。示例代码展示了一个简单的计数器应用,体现Flutter的易用性。随着技术发展,Flutter有望塑造移动应用的未来,开启奇幻之旅。
|
1月前
|
Java Android开发 Kotlin
Android面试题:App性能优化之Java和Kotlin常见的数据结构
Java数据结构摘要:ArrayList基于数组,适合查找和修改;LinkedList适合插入删除;HashMap1.8后用数组+链表/红黑树,初始化时预估容量可避免扩容。SparseArray优化查找,ArrayMap减少冲突。 Kotlin优化摘要:Kotlin的List用`listOf/mutableListOf`,Map用`mapOf/mutableMapOf`,支持操作符重载和扩展函数。序列提供懒加载,解构用于遍历Map,扩展函数默认参数增强灵活性。
21 0
|
2月前
|
数据库 Android开发
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画
Android数据库框架-GreenDao入门,2024年最新flutter 页面跳转动画