Flutter:Gradle 构建未能生成 .apk 文件。很可能这个文件是在<app_root>\build下生成的,但是工具找不到它
Flutter: Gradle build failed to produce an .apk file. It's likely that this file was generated under <app_root>\build, but the tool couldn't find it
我正在尝试试驾一个应用程序。由于应用程序无法 debug/run,我一直遇到这个问题的奇怪问题。 SDK版本为28,其余版本如下:
Flutter 1.13.9-pre.79 • channel master • https://github.com/flutter/flutter.git
Framework • revision 9eb9ea0ffa (6 hours ago) • 2020-01-13 21:30:42 -0800
Engine • revision 0235a50843
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 28c335d5a2)
Gradle build failed to produce an .apk file. It's likely that this
file was generated under C:\Development\build, but the tool
couldn't find it.
有没有办法通过提供或提供 Gradle 的输出路径来解决此问题或允许我 运行 的配置? .apk 似乎生成为错误状态。
更新:
Android Studio -v 3.5.3
Gradle -v 3.4.2
Gradle Wrapper -v 5.1.1
就我而言,我有一个像这样的多口味应用程序:
2021 年 4 月 15 日更新:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "YOUR_PROJECT_NAME",
"program": "lib/main.dart",
"request": "launch",
"type": "dart",
"args": [
"--flavor",
"ADD_YOUR_FLAVOR_NAME_HERE" //development or staging or production
]
}
]
另一种方式:
android {
...
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
flavorDimensions "flavor-type"
productFlavors{
development{
dimension "flavor-type"
}
staging{
dimension "flavor-type"
}
production{
dimension "flavor-type"
}
}
}
所以如果你想 运行 应用程序你必须写风味名称,然后 class 包含 main() 函数的名称
flutter run --flavor staging -t lib/main_staging.dart
我解决了错误并构建了 .apk
在 buildTypes 之后的应用级别 build.gradle 文件中添加以下代码:
flavorDimensions "flavor"
productFlavors {
staging {
dimension "flavor"
}
}
并修改您的编辑配置,如下图所示:
在我的例子中,问题是没有为我的 Android API 模块设置模块特定的 SDK。
我找到的解决方案是:
Open Android Studio->File->Project Structure->Project SDK box->set Android API
当您在 build.gradle 文件中提到以下代码时,有时会发生此问题。评论此代码并尝试 运行 构建,它对我来说成功了。如果您想构建多个 apk 文件,请在发布构建时使用它们,并在调试构建时将其删除。从您分享的屏幕截图中,我可以看到为您生成了多个 apk,评论拆分 apk 将帮助您修复它。
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
}
在 Build name
中添加了来自 Edit Configurations
的口味名称,它成功了!
我不知道它是否对你有帮助,但我按照解决方案 1 解决了我的问题。
解法-1
Replace your project level build.gradle file with following replace
the versions and classpath with your own.
buildscript {
ext.kotlin_version = '1.3.50'
repositories {
google()
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:3.5.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.3.3'
}
}
allprojects {
repositories {
google()
jcenter()
}
}
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
task clean(type: Delete) {
delete rootProject.buildDir
}
The Most Important Part:
Make sure your are using two subprojects
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}
subprojects {
project.evaluationDependsOn(':app')
}
解法-2
尝试重建您的 android 文件,将 android 文件夹重命名为
其他可以停用它的东西,例如“android-old”或其他任何东西。
然后,进入项目的父文件夹,运行下面的命令
flutter create --org your.organization <your appname>
这将重建所有丢失的文件。
这对我有用
好的,我发现如果你用vscode
在launch.json
里面是args
经过一天的努力解决这个问题后,我找到了从哪里开始真正解决它。在我们插入随机代码之前,我们必须搜索它生成的 apk 的确切名称。
Flutter 构建文件夹 -> 应用程序 -> 输出 -> apk
在这里您将看到在发布或调试模式下 apk 名称的确切名称。
在这种情况下,如果名称具有 app-staging.apk 或其他一些奇怪的名称,那么您的 gradle 构建中的某些内容无法正常工作.在我的例子中,这是因为我有一种名字 staging 不需要的味道。
如果您的情况并非如此,那么肯定会始终检查一些 gradle 设置。尝试从发布模式更改为调试模式
或者与 "launch.json" 相反,在这种情况下,您将能够看到一侧和另一侧是否不同,并了解配置差异。
我将以下部分添加到 app/build/gradle 文件中,因为我只需要 arm64-v8a versio apk
,
splits {
abi {
enable true
reset()
include 'arm64-v8a'
universalApk true
}
}
然后错误发生了,所以我解决这个问题的解决方法只是将一个名为 symbol-link 的 app-debug.apk 命名为新的 app-arm64 -v8a-debug.apk 文件夹 build/app/outputs/flutter-apk/
有效!
我通过禁用拆分解决了我的问题
splits {
abi {
enable false
}
}
我发现 build.gradle 中的这些行导致了问题
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}}
并且还发现我们不需要它来构建拆分 apk 运行
flutter build apk --split-per-abi
这将自动生成 v7、v8a 和 x86_64
确认android/app/build.gradle没有风味相关问题后,请运行命令
flutter run --flavor dev lib/main_dev.dart
而不是
flutter run lib/main_dev.dart --flavor dev
就我而言,我根本不在 gradle 文件中添加风味部分。经过几次尝试,最后我通过在根 build.gradle 文件中添加以下代码解决了这个问题:
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
我发现 build.gradle 中的这些行导致了问题。然后我解决了这个问题set splits abi enable false
splits{
abi{
enable false
reset()
include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
universalApk false
}
}
要遵循的步骤。
1- cd your_projetc
2- 颤动创建 .
3-终于扑了运行
在子项目部分的根 android 文件夹 build.gradle 的注释后添加图像中的行解决了我的问题
这是要添加的行:
project.buildDir = "${rootProject.buildDir}/${project.name}"
我正在尝试试驾一个应用程序。由于应用程序无法 debug/run,我一直遇到这个问题的奇怪问题。 SDK版本为28,其余版本如下:
Flutter 1.13.9-pre.79 • channel master • https://github.com/flutter/flutter.git
Framework • revision 9eb9ea0ffa (6 hours ago) • 2020-01-13 21:30:42 -0800
Engine • revision 0235a50843
Tools • Dart 2.8.0 (build 2.8.0-dev.0.0 28c335d5a2)
Gradle build failed to produce an .apk file. It's likely that this file was generated under C:\Development\build, but the tool couldn't find it.
有没有办法通过提供或提供 Gradle 的输出路径来解决此问题或允许我 运行 的配置? .apk 似乎生成为错误状态。
更新:
Android Studio -v 3.5.3
Gradle -v 3.4.2
Gradle Wrapper -v 5.1.1
就我而言,我有一个像这样的多口味应用程序:
2021 年 4 月 15 日更新:
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"name": "YOUR_PROJECT_NAME",
"program": "lib/main.dart",
"request": "launch",
"type": "dart",
"args": [
"--flavor",
"ADD_YOUR_FLAVOR_NAME_HERE" //development or staging or production
]
}
]
另一种方式:
android {
...
buildTypes {
release {
// TODO: Add your own signing config for the release build.
// Signing with the debug keys for now, so `flutter run --release` works.
signingConfig signingConfigs.debug
}
}
flavorDimensions "flavor-type"
productFlavors{
development{
dimension "flavor-type"
}
staging{
dimension "flavor-type"
}
production{
dimension "flavor-type"
}
}
}
所以如果你想 运行 应用程序你必须写风味名称,然后 class 包含 main() 函数的名称
flutter run --flavor staging -t lib/main_staging.dart
我解决了错误并构建了 .apk
在 buildTypes 之后的应用级别 build.gradle 文件中添加以下代码:
flavorDimensions "flavor"
productFlavors {
staging {
dimension "flavor"
}
}
并修改您的编辑配置,如下图所示:
在我的例子中,问题是没有为我的 Android API 模块设置模块特定的 SDK。 我找到的解决方案是:
Open Android Studio->File->Project Structure->Project SDK box->set Android API
当您在 build.gradle 文件中提到以下代码时,有时会发生此问题。评论此代码并尝试 运行 构建,它对我来说成功了。如果您想构建多个 apk 文件,请在发布构建时使用它们,并在调试构建时将其删除。从您分享的屏幕截图中,我可以看到为您生成了多个 apk,评论拆分 apk 将帮助您修复它。
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
}
在 Build name
中添加了来自 Edit Configurations
的口味名称,它成功了!
我不知道它是否对你有帮助,但我按照解决方案 1 解决了我的问题。
解法-1
Replace your project level build.gradle file with following replace the versions and classpath with your own.
buildscript { ext.kotlin_version = '1.3.50' repositories { google() jcenter() } dependencies { classpath 'com.android.tools.build:gradle:3.5.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath 'com.google.gms:google-services:4.3.3' } } allprojects { repositories { google() jcenter() } } rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') } task clean(type: Delete) { delete rootProject.buildDir }
The Most Important Part: Make sure your are using two subprojects
rootProject.buildDir = '../build' subprojects { project.buildDir = "${rootProject.buildDir}/${project.name}" } subprojects { project.evaluationDependsOn(':app') }
解法-2
尝试重建您的 android 文件,将 android 文件夹重命名为
其他可以停用它的东西,例如“android-old”或其他任何东西。然后,进入项目的父文件夹,运行下面的命令
flutter create --org your.organization <your appname>
这将重建所有丢失的文件。 这对我有用
好的,我发现如果你用vscode
launch.json
里面是args
经过一天的努力解决这个问题后,我找到了从哪里开始真正解决它。在我们插入随机代码之前,我们必须搜索它生成的 apk 的确切名称。
Flutter 构建文件夹 -> 应用程序 -> 输出 -> apk
在这里您将看到在发布或调试模式下 apk 名称的确切名称。
在这种情况下,如果名称具有 app-staging.apk 或其他一些奇怪的名称,那么您的 gradle 构建中的某些内容无法正常工作.在我的例子中,这是因为我有一种名字 staging 不需要的味道。
如果您的情况并非如此,那么肯定会始终检查一些 gradle 设置。尝试从发布模式更改为调试模式 或者与 "launch.json" 相反,在这种情况下,您将能够看到一侧和另一侧是否不同,并了解配置差异。
我将以下部分添加到 app/build/gradle 文件中,因为我只需要 arm64-v8a versio apk
,
splits {
abi {
enable true
reset()
include 'arm64-v8a'
universalApk true
}
}
然后错误发生了,所以我解决这个问题的解决方法只是将一个名为 symbol-link 的 app-debug.apk 命名为新的 app-arm64 -v8a-debug.apk 文件夹 build/app/outputs/flutter-apk/ 有效!
我通过禁用拆分解决了我的问题
splits {
abi {
enable false
}
}
我发现 build.gradle 中的这些行导致了问题
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}}
并且还发现我们不需要它来构建拆分 apk 运行
flutter build apk --split-per-abi
这将自动生成 v7、v8a 和 x86_64
确认android/app/build.gradle没有风味相关问题后,请运行命令
flutter run --flavor dev lib/main_dev.dart
而不是
flutter run lib/main_dev.dart --flavor dev
就我而言,我根本不在 gradle 文件中添加风味部分。经过几次尝试,最后我通过在根 build.gradle 文件中添加以下代码解决了这个问题:
rootProject.buildDir = '../build'
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
project.evaluationDependsOn(':app')
}
我发现 build.gradle 中的这些行导致了问题。然后我解决了这个问题set splits abi enable false
splits{
abi{
enable false
reset()
include "x86", "x86_64", "armeabi", "armeabi-v7a", "arm64-v8a"
universalApk false
}
}
要遵循的步骤。
1- cd your_projetc
2- 颤动创建 .
3-终于扑了运行
在子项目部分的根 android 文件夹 build.gradle 的注释后添加图像中的行解决了我的问题
这是要添加的行:
project.buildDir = "${rootProject.buildDir}/${project.name}"