颤振:无法构建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.jar
或 profile/libs.jar
结尾的特定问题。这表明您需要首先构建哪个apk
。在这种情况下,它是debug/libs.jar
,所以先构建--debug
,然后再构建--release
。就我而言,它是profile/libs.jar
,所以构建--profile
然后--release
将起作用。如果您不想遵循所有三个步骤,请使用 Android Studio 构建签名的 apk
或 appbudle
,打开 android directory
in。
不敢相信这有这么多赞成...人们不使用 CI 吗?【参考方案2】:
对我有用的唯一解决方案是从
降级 gradle.builddependencies
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.propertiesdistributionBase=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的主要内容,如果未能解决你的问题,请参考以下文章
构建 Gradle 时出现问题(无法创建任务 ':path_provider_android:generateDebugUnitTestConfig')。在颤振中为 android
颤振构建错误无法解析 com.google.android.gms:play-services-location:16.+