颤振:无法构建android apk

Posted

技术标签:

【中文标题】颤振:无法构建android apk【英文标题】:flutter: can not build 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 【参考方案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 同步时遇到了这个问题。我通过执行以下操作修复了它:

    打开***build.gradle 并将gradle 类路径更改为:

    classpath 'com.android.tools.build:gradle:4.0.0'
    

    打开 gradle\wrapper\gradle-wrapper.properties 并将分发 URL 更改为:

    distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
    
    从新项目中复制.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】:

永久修复

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

    flutter doctor

这会给你这样的总结

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

修复 android 许可证

输入flutter doctor --android-licenses

如果遇到此错误

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

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

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

然后再次运行

flutter doctor --android-licenses

修复 Flutter 插件未安装

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

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

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

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

此解决方案适用于 Mac 用户

    键入/usr/libexec/java_home -V 查找您的本地Java 版本 通过键入 /usr/libexec/java_home /Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home 设置 Java_Home 路径 在终端中输入所有这些
cd /Applications/Android\ Studio.app/Contents/jre
ln -s ../jre jdk
ln -s "/Library/Internet Plug-Ins/JavaAppletPlugin.plugin" jdk
    最后运行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

【讨论】:

这很危险,因为应用程序在部署后仍然会崩溃。这个问题应该得到解决,而不是被扫地出门。错误是有原因的

以上是关于颤振:无法构建android apk的主要内容,如果未能解决你的问题,请参考以下文章

无法在颤振中构建apk

构建 Gradle 时出现问题(无法创建任务 ':path_provider_android:generateDebugUnitTestConfig')。在颤振中为 android

颤振构建错误无法解析 com.google.android.gms:play-services-location:16.+

IOS颤振构建没有创建,但它在android上运行

我无法从 android studio 构建或运行我的颤振应用程序,但它可以从命令行运行

Android 设备无法使用颤振连接到 scoket.io