我正在尝试测试应用程序。由于应用无法调试/运行,我一直对此问题感到陌生。 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构建无法生成.apk文件。这很可能是 文件是在C:\ Development \\ build下生成的,但是该工具 找不到它。
是否可以通过提供或提供Gradle的输出路径来传递此问题或配置,从而使我能够运行? .apk似乎是由于错误状态而生成的。
更新:
Android Studio -v 3.5.3
Gradle -v 3.4.2
Gradle Wrapper -v 5.1.1
答案 0 :(得分:20)
就我而言,我有一个像这样的多功能应用程序:
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"
}
}
}
因此,如果要运行应用程序,则必须先编写风味名称,然后再编写包含main()函数的类名称
flutter run --flavor staging -t lib/main_staging.dart
我解决了我的错误并构建了.apk
答案 1 :(得分:5)
在buildTypes之后在App标签build.gradle文件中添加以下代码:
flavorDimensions "flavor"
productFlavors {
staging {
dimension "flavor"
}
}
答案 2 :(得分:3)
答案 3 :(得分:1)
有时,当您在build.gradle文件中提到以下代码时,就会发生此问题。注释此代码,然后尝试运行构建,它对我来说成功。如果要构建多个apk文件,请在进行发行版本构建时使用它们并将其删除以进行调试版本。从您共享的屏幕截图中,我可以看到为您生成了多个apk,并评论拆分的apk将帮助您对其进行修复。
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}
}
答案 4 :(得分:1)
答案 5 :(得分:1)
我将以下部分添加到 app / build / gradle 文件中,因为我只需要arm64-v8a versio apk
,
splits {
abi {
enable true
reset()
include 'arm64-v8a'
universalApk true
}
}
然后发生错误,因此我的解决方法仅是将名为app-debug.apk的符号链接更改为新的名为 app-arm64-v8a-debug.apk 的符号链接在文件夹 build / app / outputs / flutter-apk / 中 它有效!
答案 6 :(得分:0)
就我而言,问题是未为我的Android API模块设置特定于模块的SDK。 我找到的解决方案是:
Open Android Studio->File->Project Structure->Project SDK box->set Android API
答案 7 :(得分:0)
我不知道它是否会为您提供帮助,但我通过遵循解决方案1解决了我的问题。
解决方案1
用以下替换替换项目级别的build.gradle文件 使用自己的版本和类路径。
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 }
最重要的部分: 确保您正在使用两个子项目
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>
这将重建所有丢失的文件。 对我有用
答案 8 :(得分:0)
经过一天的努力,我终于找到了真正解决该问题的方法。在插入随机代码之前,我们必须搜索生成的apk的确切名称。
Flutter构建文件夹->应用->输出-> apk
在这里,您将确切地知道apk名称是处于发布还是调试模式。
在这种情况下,如果该名称具有app-staging.apk或其他一些怪异的名称,则您的gradle版本中的某些内容将无法正常运行。就我而言,这是因为我拥有名称阶段不需要的味道。
如果您的情况并非如此,那么肯定会一直是需要检查的设置。尝试从发行版更改为调试模式 或“ launch.json” 的反义词,在这种情况下,您将能够查看一侧是否另一侧并了解配置差异。
答案 9 :(得分:0)
我通过禁用拆分解决了问题
splits {
abi {
enable false
}
}
答案 10 :(得分:0)
我发现 build.gradle 中的这些行导致了问题
splits {
abi {
enable true
reset()
include 'armeabi', 'armeabi-v7a', 'arm64-v8a', 'x86', 'x86_64'
universalApk true
}}
并且还发现我们不需要它,来构建split apk run
flutter build apk --split-per-abi
这将自动生成 v7、v8a 和 x86_64