Flutter 手把手教你解决引用第三方插件导致 AndroidX 编译失败的问题

本贴最后更新于 1734 天前,其中的信息可能已经时异事殊

序言

最近学习了 Flutter 一段时间,确实感觉到 Flutter 是一个未来的大趋势,更新到 1.12 后一套代码能在全平台运行。(Andorid,IOS,Linux,Windows,Web,Mac)并且相对来说学习难度不大,语法,工具都比较现代与先进。实在建议各位 APP 开发或者前端开发好好学一学。好了说重点,今天我的同事运行 Flutter 项目时就出现了一个 AndroidX 的兼容问题,虽然对我来说不是什么大问题,但是对于没有 Android 开发经验的前端来说可能这个问题会卡一天。因此还是留下这个解决方案,好好做人,贡献社会

问题标识

引入第三方插件后,重新在 Android 上编译出现错误提示

java.lang.RuntimeException: Duplicate class android.support.v4.app.INotificationSideChannel found in modules classes.jar (androidx.core:core:1.0.2) and classes.jar (com.android.support:support-compat:28.0.0)

同时出现 androidx com.android.support 字样的一般都是 androidx 的兼容问题了

image.png

错误分析

android.support 是早前的 Android 开发工具包,大部分的控件都是依赖这个。但是由于历史原因已经出现了 android.support.v4 v7 v13 等各个版本,每次更新版本,相关控件的包名都要替换。为了解决这个麻烦的版本更新问题,现在统一江湖改为 androidx ,因此出现这个 support 与 androidx 的冲突问题。

解决步骤

既然知道了问题所在,那修复起来也就不难了。

基于你有没有 Android Studio 这里有两种方式,推荐先下载 Android Studio

方式 1 不使用 Android Studio

网上教程很多,这里贴一个,但是估计没有 Android 开发经验也很难改好

方式 2 使用 Android Studio (推荐)

下载 Android Studio 最新版

使用 Android Studio 打开你的 Flutter 项目下的 Android 目录
image.png

等待编译完成,时间可能需要几分钟不等

image.png

编译完后可以看到运行的图标绿了 绿了绿了 它绿了

image.png

然后点击 Refactor 的 Migrate to AndoridX

image.png

可以把备份关掉

image.png

然后点击下面的 Do Refactor

image.png

之后稍等片刻就可以正常运行了

后续问题

博主你骗人呀,我弄完了上一步还是出现别的错误了,还我血汗钱!

同学别着急,一般来说弄完上面一步就可以解决问题了。但是也有不一般的情况,就是 androidX 的版本不一致导致的问题 大概报错提示可以看到

androidx.core:core:1.1.0 ... androidx.core:core:1.0.0 之类的,就说明是版本不一致了

解决方法也好办

打开 build.gradle module:app 这个文件

image.png

详细地址是 android/app/build.gradle

image.png

在 android{} 里面复制如下代码

configurations.all {
        resolutionStrategy {
            resolutionStrategy.eachDependency { details ->
                if (details.requested.group == 'androidx.core') {
                    details.useVersion "1.0.1"
                }
                if (details.requested.group == 'androidx.lifecycle') {
                    details.useVersion "2.0.0"
                }
                if (details.requested.group == 'androidx.versionedparcelable') {
                    details.useVersion "1.0.0"
                }
                if (details.requested.group == 'androidx.fragment') {
                    details.useVersion "1.0.0"
                }
                if (details.requested.group == 'androidx.appcompat') {
                    details.useVersion "1.0.1"
                }
            }
        }
    }

image.png

这段代码的作用就是固定 androidx.core 的版本,让插件的版本也保持一致,接着点击上方的 Sync Now 等待下载完成就可以了。

尾语

这次的解决步骤已经截图很明确了,如果真的有帮到你的话,帮我点下 (我的 Solo 博客)[http://www.moyck.com/]广告就好了~嘿

  • Flutter

    Flutter 是谷歌的移动 UI 框架,可以快速在 iOS 和 Android 上构建高质量的原生用户界面。 Flutter 可以与现有的代码一起工作,它正在被越来越多的开发者和组织使用,并且 Flutter 是完全免费、开源的。

    39 引用 • 92 回帖 • 5 关注
1 操作
Moyck 在 2020-01-07 18:27:33 更新了该帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...