Android导入Flutter Module报错Failed to apply plugin class ‘FlutterPlugin’.

Android导入Flutter Module报错Failed to apply plugin class ‘FlutterPlugin’.

最近将Flutter版本升级到2.5.3后发现一个问题,在Android项目中import或new一个Flutter module会提示错误:
Caused by: org.gradle.api.InvalidUserCodeException: Build was configured to prefer settings repositories over project repositories but repository ‘maven’ was added by plugin class ‘FlutterPlugin’
Caused by: org.gradle.api.internal.plugins.PluginApplicationException: Failed to apply plugin class ‘FlutterPlugin’.
这个错误在我这里是必现的,所以在此记录一下解决方法,希望能够帮助遇到同样问题的同学。

第一步:
打开Android project的settings.gradle修改repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)为
repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.PREFER_PROJECT)
    repositories {
        google()
        mavenCentral()
        jcenter() // Warning: this repository is going to shut down soon
    }
}

第二步:
打开Android project的build.gradle增加如下设置

allprojects {
    repositories {
        google()
        jcenter()
    }
}

第三步:
重新build项目

到这里这个报错问题应该已经解决了,这个应该是flutter的一个bug,希望之后的版本可以解决掉这个问题。

### 解决 FlutterJava 交互中的 `MalformedInputException` 异常 当在 Flutter 中调用 Android 原生代码并处理字符串数据时,可能会遇到字符编码不匹配的问题,这可能导致 `java.nio.charset.MalformedInputException` 异常。此异常通常发生在尝试读取或写入带有非法字节序列的数据流时。 为了防止此类异常的发生,在传递字符串之前应确保两端使用的字符集一致,并且正确设置编码方式[^1]。 #### 设置统一的字符编码 建议显式指定 UTF-8 编码来避免潜在的乱码问题: ```java // 在Java端接收来自Flutter的消息时指明编码格式 String receivedMessage = new String(message.getBytes(), StandardCharsets.UTF_8); ``` 同样地,在发送消息回给 Dart 层面也需要保持相同的编码标准: ```java byte[] bytesToSendBack = response.getBytes(StandardCharsets.UTF_8); result.success(bytesToSendBack); ``` 通过这种方式可以有效减少由于不同平台默认采用不同的字符编码而导致的兼容性问题。 另外值得注意的是,如果确实存在非常短(如长度为1)的有效输入却仍然抛出了该异常,则可能是遇到了特殊字符或者是BOM(Byte Order Mark),此时可以在解析前先去除这些可能引起冲突的内容再做进一步处理[^3]。 对于特别情况下的单个字符引发异常的情况,可以通过调试工具查看具体是什么样的字符造成了这个问题,并针对性地调整处理逻辑以适应特殊情况。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值