背景
flutter 項目在安卓機編譯時報錯,提示/Users/vz4qt9/fvm/versions/3.7.12/bin/cache/artifacts/engine/android-arm/flutter.jar找不到,而無論使用 flutterMode 為 debug、profile、release 始終 /Users/vz4qt9/fvm/versions/3.7.12/bin/cache/artifacts/engine/ 都只有 android-arm-profile、android-arm-release、android-arm64-profile、android-arm64-release、android-x64-profile、android-x64-release 并沒有 android-arm
報錯日志如下
Downloading android-arm-profile/darwin-x64 tools...
Downloading android-arm-release/darwin-x64 tools...
Downloading android-arm64-profile/darwin-x64 tools...
Downloading android-arm64-release/darwin-x64 tools...
Downloading android-x64-profile/darwin-x64 tools...
Downloading android-x64-release/darwin-x64 tools...
Launching lib/main.dart on PGEM10 in profile mode...
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':vkm_car_control:kaptGenerateStubsProfileKotlin'.
> Could not resolve all files for configuration ':vkm_car_control:profileCompileClasspath'.
> Failed to transform flutter.jar to match attributes {artifactType=android-classes-jar, org.gradle.libraryelements=jar, org.gradle.usage=java-runtime}.
> Execution failed for JetifyTransform: /Users/vz4qt9/fvm/versions/3.7.12/bin/cache/artifacts/engine/android-arm/flutter.jar.
> Transform's input file does not exist: /Users/vz4qt9/fvm/versions/3.7.12/bin/cache/artifacts/engine/android-arm/flutter.jar. (See https://issuetracker.google.com/issues/158753935)
* Try:
> Run with --stacktrace option to get the stack trace.
> Run with --info or --debug option to get more log output.
> Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 20s
┌─ Flutter Fix ────────────────────────────────────────────────────────────────────────────┐
│ This issue appears to be https://github.com/flutter/flutter/issues/58247. │
│ Fix this issue by adding the following to the file │
│ /Users/vz4qt9/Documents/workspace/DGAPP_216769_gmpi_mobile_app/android/app/build.gradle: │
│ android { │
│ lintOptions { │
│ checkReleaseBuilds false │
│ } │
│ } │
└──────────────────────────────────────────────────────────────────────────────────────────┘
Exception: Gradle task assembleUatProfile failed with exit code 1
#0 throwToolExit (package:flutter_tools/src/base/common.dart:10:3)
#1 AndroidGradleBuilder.buildGradleApp (package:flutter_tools/src/android/gradle.dart:446:7)
<asynchronous suspension>
#2 AndroidGradleBuilder.buildApk (package:flutter_tools/src/android/gradle.dart:184:5)
<asynchronous suspension>
#3 AndroidDevice.startApp (package:flutter_tools/src/android/android_device.dart:574:7)
<asynchronous suspension>
#4 FlutterDevice.runCold (package:flutter_tools/src/resident_runner.dart:518:33)
<asynchronous suspension>
#5 ColdRunner.run (package:flutter_tools/src/run_cold.dart:57:28)
<asynchronous suspension>
#6 AppDomain.launch.<anonymous closure> (package:flutter_tools/src/commands/daemon.dart:646:9)
<asynchronous suspension>
#7 AppDomain.launch (package:flutter_tools/src/commands/daemon.dart:644:5)
<asynchronous suspension>
#8 RunCommand.runCommand (package:flutter_tools/src/commands/run.dart:603:15)
<asynchronous suspension>
#9 FlutterCommand.run.<anonymous closure> (package:flutter_tools/src/runner/flutter_command.dart:1257:27)
<asynchronous suspension>
#10 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#11 CommandRunner.runCommand (package:args/command_runner.dart:209:13)
<asynchronous suspension>
#12 FlutterCommandRunner.runCommand.<anonymous closure> (package:flutter_tools/src/runner/flutter_command_runner.dart:283:9)
<asynchronous suspension>
#13 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#14 FlutterCommandRunner.runCommand (package:flutter_tools/src/runner/flutter_command_runner.dart:229:5)
<asynchronous suspension>
#15 run.<anonymous closure>.<anonymous closure> (package:flutter_tools/runner.dart:64:9)
<asynchronous suspension>
#16 AppContext.run.<anonymous closure> (package:flutter_tools/src/base/context.dart:150:19)
<asynchronous suspension>
#17 main (package:flutter_tools/executable.dart:91:3)
<asynchronous suspension>
Exited (1).

僅有藍色的文件夾時會報錯
.
├── android-arm-profile
│ └── darwin-x64
│ └── gen_snapshot
├── android-arm-release
│ └── darwin-x64
│ └── gen_snapshot
├── android-arm64-profile
│ └── darwin-x64
│ └── gen_snapshot
├── android-arm64-release
│ └── darwin-x64
│ └── gen_snapshot
├── android-x64-profile
│ └── darwin-x64
│ └── gen_snapshot
├── android-x64-release
│ └── darwin-x64
│ └── gen_snapshot
├── common
│ ├── flutter_patched_sdk
│ │ ├── platform_strong.dill
│ │ ├── platform_strong.dill.d
│ │ └── vm_outline_strong.dill
│ └── flutter_patched_sdk_product
│ ├── platform_strong.dill
│ ├── platform_strong.dill.d
│ └── vm_outline_strong.dill
├── darwin-x64
│ ├── const_finder.dart.snapshot
│ ├── flutter_tester
│ ├── FlutterMacOS.framework
│ │ ├── FlutterMacOS -> Versions/Current/FlutterMacOS
│ │ ├── Headers -> Versions/Current/Headers
│ │ ├── Modules -> Versions/Current/Modules
│ │ ├── Resources -> Versions/Current/Resources
│ │ └── Versions
│ ├── FlutterMacOS.framework.zip
│ ├── font-subset
│ ├── frontend_server.dart.snapshot
│ ├── gen_snapshot
│ ├── gen_snapshot_arm64
│ ├── gen_snapshot_x64
│ ├── icudtl.dat
│ ├── impellerc
│ ├── isolate_snapshot.bin
│ ├── libpath_ops.dylib
│ ├── libtessellator.dylib
│ ├── LICENSE.font-subset.md
│ ├── LICENSE.impellerc.md
│ ├── LICENSE.path_ops.md
│ ├── shader_lib
│ │ ├── flutter
│ │ └── impeller
│ ├── vm_isolate_snapshot.bin
│ └── without_entitlements.txt
├── darwin-x64-profile
│ ├── FlutterMacOS.framework
│ │ ├── FlutterMacOS -> Versions/Current/FlutterMacOS
│ │ ├── Headers -> Versions/Current/Headers
│ │ ├── Modules -> Versions/Current/Modules
│ │ ├── Resources -> Versions/Current/Resources
│ │ └── Versions
│ ├── FlutterMacOS.framework.zip
│ ├── gen_snapshot
│ ├── gen_snapshot_arm64
│ └── gen_snapshot_x64
├── darwin-x64-release
│ ├── FlutterMacOS.framework
│ │ ├── FlutterMacOS -> Versions/Current/FlutterMacOS
│ │ ├── Headers -> Versions/Current/Headers
│ │ ├── Modules -> Versions/Current/Modules
│ │ ├── Resources -> Versions/Current/Resources
│ │ └── Versions
│ ├── FlutterMacOS.framework.zip
│ ├── gen_snapshot
│ ├── gen_snapshot_arm64
│ └── gen_snapshot_x64
├── ios
│ ├── Flutter.xcframework
│ │ ├── Info.plist
│ │ ├── ios-arm64
│ │ └── ios-arm64_x86_64-simulator
│ ├── gen_snapshot_arm64
│ └── LICENSE
├── ios-profile
│ ├── Flutter.xcframework
│ │ ├── Info.plist
│ │ ├── ios-arm64
│ │ └── ios-arm64_x86_64-simulator
│ ├── gen_snapshot_arm64
│ └── LICENSE
└── ios-release
├── Flutter.xcframework
│ ├── Info.plist
│ ├── ios-arm64
│ └── ios-arm64_x86_64-simulator
├── gen_snapshot_arm64
└── LICENSE
49 directories, 50 files
嘗試了一些操作后,再次編譯,問題仍然存在。例如:
- 清除gradle緩存
./gradlew clean - 清除 fvm 緩存
rm -rf /Users/vz4qt9/fvm/versions/3.7.12/bin/cache
都無法解決問題。
直到使用了fvm flutter precache --android才觸發(fā)了fvm下載android-arm文件夾。
Flutter 為 Android 平臺提供了針對不同 CPU 架構 和 構建模式 (Build Mode) 的工件
- 按構建模式劃分:
Debug (調(diào)試模式): 用于開發(fā)和熱重載。
Profile (性能模式): 用于分析應用性能。
Release (發(fā)布模式): 用于打包發(fā)布到應用商店。- 按 CPU 架構劃分:
arm: 32位 ARM 架構(例如你之前用的 PGEM10 設備)。
arm64: 64位 ARM 架構(現(xiàn)在絕大多數(shù)手機)。
x64: 64位 Intel/AMD 架構(主要用于 Android 模擬器)。
- android-arm 這個名字代表:
android: 平臺是安卓
arm: 架構是 32位 ARM
(無后綴): 構建模式是 Debug
fvm flutter precache --android 介紹
這個命令的作用是提前下載(Pre-cache)指定 Flutter 版本(3.7.12)在開發(fā)和構建 Android 應用時所需的所有引擎工件(engine artifacts)。flutter precache --android 命令的職責就是“把所有 Android 相關的工件都準備好”