【问题标题】:flutter: can not build android apk颤振:无法构建android apk
【发布时间】:2020-10-05 04:59:41
【问题描述】:
FAILURE: Build failed with an exception.
  • 出了什么问题: 任务 ':app:lintVitalRelease' 执行失败。

    无法解析配置“:app:debugRuntimeClasspath”的所有工件。 无法转换 libs.jar 以匹配属性 {artifactType=processed-jar, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}。 JetifyTransform 执行失败:E:\AndroidStudioProjects\FlutterProject\EduyaariGuruFlutter\eduyaari_guru_flutter\build\app\intermediates\flutter\debug\libs.jar。 无法使用 Jetifier 转换“E:\AndroidStudioProjects\FlutterProject\EduyaariGuruFlutter\eduyaari_guru_flutter\build\app\intermediates\flutter\debug\libs.jar”。原因:FileNotFoundException,消息:E:\AndroidStudioProjects\FlutterProject\EduyaariGuruFlutter\eduyaari_guru_flutter\build\app\intermediates\flutter\debug\libs.jar(系统找不到指定的路径)。 (使用 --stacktrace 运行以获取更多详细信息。) 请在http://issuetracker.google.com/issues/new?component=460323 提交错误。

  • 尝试: 使用 --stacktrace 选项运行以获取堆栈跟踪。使用 --info 或 --debug 选项运行以获得更多日志输出。运行 --scan 以获得完整的见解。

  • 通过https://help.gradle.org获得更多帮助

在 1m 8s 内构建失败

【问题讨论】:

  • 您找到解决方案了吗?我也面临同样的问题。
  • 我也有同样的问题。无法构建 APK,但可以构建 AAB。它似乎也在debug文件夹中寻找libs.jar文件而不是release

标签: android flutter


【解决方案1】:

第 1 步。flutter build apk --debug

第 2 步。flutter build apk --profile

第 3 步。flutter build apk --release

【讨论】:

  • 如果我在进行 CI 构建?每次都运行三个是没有意义的
  • 使用 Android 插件 4.0 可能会出现以 debug/libs.jarprofile/libs.jar 结尾的特定问题。这表明您需要首先构建哪个apk。在这种情况下,它是debug/libs.jar,所以先构建--debug,然后再构建--release。就我而言,它是profile/libs.jar,所以构建--profile 然后--release 将起作用。如果您不想遵循所有三个步骤,请使用 Android Studio 构建签名的 apkappbudle,打开 android directory in。
  • 不敢相信这有这么多赞成...人们不使用 CI 吗?
【解决方案2】:

对我有用的唯一解决方案是从

降级 gradle.build
dependencies {
    classpath 'com.android.tools.build:gradle:4.0.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

 dependencies {
    classpath 'com.android.tools.build:gradle:3.5.0'
    classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
}

并从

更改了 gradle-warpper.properties
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip

distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip

Here 你可以明白为什么你不应该只在 gradle 上添加 lintOptions { checkReleaseBuilds false }

【讨论】:

    【解决方案3】:

    我找到了我的案例所需的解决方法,我相信它也对你有用。

    我在 android 的应用级 build.gradle 中将 checkReleaseBuilds 标志设置为 false,如下所示:

    android {
        ...
        lintOptions {
            checkReleaseBuilds false
        }
    }
    

    Found it here

    【讨论】:

    • 这对我有用。非常感谢
    【解决方案4】:

    问题与版本有关。尝试更改插件的版本。这对我有用。

    https://developer.android.com/studio/releases/gradle-plugin?authuser=1&hl=pt-br#updating-gradle

    例子:

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip
    
    classpath 'com.android.tools.build:gradle:3.6.4'
    

    【讨论】:

      【解决方案5】:

      运行这两个命令对我有用:

      flutter build apk --profile
      flutter build apk --release
      

      【讨论】:

        【解决方案6】:

        我遇到了同样的问题并尝试构建 --debug 然后 --release ,它仍然没有工作。但是,如果您查看特定错误中的路径,它应该以 debug/libs.jar 或 profile/libs.jar 结尾。这表明您需要首先构建哪个 apk。在 OP 的情况下,它是 debug/libs.jar 所以先构建 --debug 然后 --release 工作。就我而言,它是 profile/libs.jar 所以构建 --profile 然后 --release 工作。我很确定构建 --release 不应该访问调试或配置文件目录。

        如果你的错误是 debug/libs.jar,构建 --debug 然后 --release。
        如果你的错误是 profile/libs.jar,构建 --profile 然后 --release。

        参考链接:https://github.com/flutter/flutter/issues/58247#issuecomment-636500680

        【讨论】:

          【解决方案7】:

          尝试在项目文件夹上运行flutter clean,然后重试。似乎构建文件夹中缺少一个文件

          【讨论】:

            【解决方案8】:

            我找到了提到here的解决方案

            我在 Android Studio 4.0 中进行 Gradle 同步时遇到了这个问题。我通过执行以下操作修复了它:

            1. 打开顶级build.gradle 并将gradle 类路径更改为:

              classpath 'com.android.tools.build:gradle:4.0.0'
              
            2. 打开 gradle\wrapper\gradle-wrapper.properties 并将分发 URL 更改为:

              distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
              
            3. 从新项目中复制.idea\jarRepositories.xml

            这是我的新 Flutter 项目jarRepositories.xml,你可以自己获取。

            <?xml version="1.0" encoding="UTF-8"?>
            <project version="4">
              <component name="RemoteRepositoriesConfiguration">
                <remote-repository>
                  <option name="id" value="central" />
                  <option name="name" value="Maven Central repository" />
                  <option name="url" value="https://repo1.maven.org/maven2" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="jboss.community" />
                  <option name="name" value="JBoss Community repository" />
                  <option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="BintrayJCenter15" />
                  <option name="name" value="BintrayJCenter15" />
                  <option name="url" value="https://jcenter.bintray.com/" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="Google17" />
                  <option name="name" value="Google17" />
                  <option name="url" value="https://dl.google.com/dl/android/maven2/" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="maven2" />
                  <option name="name" value="maven2" />
                  <option name="url" value="https://storage.googleapis.com/download.flutter.io" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="maven5" />
                  <option name="name" value="maven5" />
                  <option name="url" value="https://google.bintray.com/exoplayer/" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="maven4" />
                  <option name="name" value="maven4" />
                  <option name="url" value="https://maven.fabric.io/public" />
                </remote-repository>
                <remote-repository>
                  <option name="id" value="MavenLocal" />
                  <option name="name" value="MavenLocal" />
                  <option name="url" value="file:$USER_HOME$/.m2/repository" />
                </remote-repository>
              </component>
            </project>
            

            不知道如何或为什么,但它对我有用

            【讨论】:

              【解决方案9】:

              在android build.gradle中,

              dependencies {
                 classpath 'com.android.tools.build:gradle:3.5.0'
              }
              

              对我不起作用,并在执行颤振运行时引发了云存储错误。 所以我将我的 gradle 版本更改为 4.0.1。其中flutter run执行成功,但是flutter build apk失败了,所以我把它的版本改成了3.5.4。

              在 android/gradle/wrapper/gradle-wrapper.properties 集合中,

              distributionUrl=https\://services.gradle.org/distributions/gradle-5.6.2-all.zip
              

              这对于flutter run和flutter build apk都非常有效。 将来这个 gradle 版本可能不支持我们在项目中使用的少数插件,在这种情况下升级到下一个 gradle 版本。在此处参考 gradle 版本:How Do I Fix "unexpected element <queries> found in <manifest>"?

              【讨论】:

                【解决方案10】:

                如果您看到此错误是因为您想在 gradle 上运行某些任务,例如 lintDebug,那么您不需要构建可能很慢的 apk。您可以运行此命令来执行生成 lint 依赖项的任务:

                ./gradlew generateProfileDependenciesForLint generateReleaseDependenciesForLint
                

                运行这些命令后,将生成每个相应构建类型的 lib.jar,然后您可以运行需要 lib.jar 的 gradle 任务。它会为您节省很多时间。

                【讨论】:

                • 嗨!你用的是什么版本的gradle?当我运行 ./gradew 任务时,任务 generateProfileDependenciesForLint 没有出现在列表中。还是我必须配置其他东西?谢谢!
                • 我正在使用 gradle 6.7.1 和 gradle plugin 4.2.0。我从 gradle 5.6.4 升级后发现了这个问题
                【解决方案11】:

                永久修复

                要永久解决此问题,请输入终端

                1. flutter doctor

                这会给你这样的总结

                你需要修复所有这些红色标记!

                修复 android 许可证

                输入flutter doctor --android-licenses

                如果遇到此错误

                Exception in thread "main" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/XmlSchema
                

                尝试从 Android Studio 安装 Android SDK 命令行工具(工具 > SDK 管理器)

                1. 展开外观和行为
                2. 展开系统设置
                3. 点击Android SDK
                4. 点击SDK工具标签
                5. 查看 Android SDK 命令行工具(最新)
                6. 点击应用按钮

                然后再次运行

                flutter doctor --android-licenses

                修复 Flutter 插件未安装

                1. 检查您的 Android Studio 版本(对于 Mac,请转到 ~/Library/Application Support/Google/AndroidStudio{Version}。在我的情况下,{Version} 是 2020.3)
                2. 然后输入

                ln -s ~/Library/Application\ Support/Google/AndroidStudio2020.3/plugins ~/Library/Application\ Support/AndroidStudio2020.3

                此命令只是将 Flutter Doctor 重定向到不同的文件夹以查找插件(它们现在所在的位置)。这称为符号链接

                修复无法找到捆绑的 Java 版本

                此解决方案适用于 Mac 用户

                1. 键入/usr/libexec/java_home -V 查找您的本地Java 版本
                2. 通过键入 /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home 设置 Java_Home 路径
                3. 在终端中输入所有这些
                cd /Applications/Android\ Studio.app/Contents/jre
                ln -s ../jre jdk
                ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk
                
                1. 最后运行flutter doctor -v查看所有细节变化

                快乐的结局

                解决所有这些问题后,运行

                flutter clean
                flutter run
                

                构建发布 apk

                flutter build apk --split-per-abi
                

                【讨论】:

                  【解决方案12】:

                  Android Gradle LintPerVariantTask 现在似乎正在将所有构建变体中的 JAR 添加到其输入中: https://android.googlesource.com/platform/tools/base/+/1f9787310d64a66370627a2aaefa1e616565c17d

                  包含应用程序编译的 Dart 代码的 libapp.so 库被打包在一个 JAR 中,并且为每个变体生成不同的 JAR。如果 lint 任务期望所有变体的 JAR 都可用,我不确定应该如何处理动态生成的每个变体 JAR。

                  作为 hack 解决方法,您可以更改 app/build.gradle 中的 lintOptions 以禁用 lint 任务:

                  lintOptions {
                      checkReleaseBuilds false
                  }
                  

                  【讨论】:

                  • 这很危险,因为应用程序在部署后仍然会崩溃。这个问题应该得到解决,而不是被扫地出门。错误是有原因的
                  猜你喜欢
                  • 2021-10-15
                  • 1970-01-01
                  • 2020-08-25
                  • 2020-12-18
                  • 1970-01-01
                  • 2021-08-04
                  • 2020-12-30
                  • 2022-01-01
                  相关资源
                  最近更新 更多