我有一个正在运行的应用程序,我添加了一些新的东西,然后在构建 Flutter 应用程序时收到错误“由于使用已弃用的 Android v1 嵌入而导致构建失败”
所以我按照别人告诉我的那样创建了一个新项目,并删除了新项目中的所有旧文件,同时检查我是否没有将代码拖到新项目中,从而杀死了 v1/v2 的东西。稍后修复一些错误,我现在正处于一个阶段,我的 VS 代码不会向我尖叫 1k 错误,但现在我无法运行或构建它......
我现在得到:
PS C:\Users\Bassi\Documents\VMP lutter_application_1 erpfly> flutter build apk --debug
lib/main.dart:错误:读取“lib/main.dart”时出错:Das System kann den angegebenen Pfad nicht finden。
翻译:找不到数据
目标 kernel_snapshot_program 失败:异常
FAILURE:构建失败并出现异常。
- 出了什么问题:任务“:app:compileFlutterBuildDebug”执行失败。
> 处理'命令'C:\Users\Bassi\Documents\VMP lutter in lutter.bat''以非零退出值1完成
- 尝试:
> 使用 --stacktrace 选项运行以获取堆栈跟踪。
> 使用 --info 或 --debug 选项运行以获得更多日志输出。
> 使用 --scan 运行以获得完整的见解。
> 在 https://help.gradle.org 获取更多帮助。
运行 Gradle 任务“assembleDebug”2 秒内构建失败...
3,6s Gradle 任务 assembleDebug 失败,退出代码为 1
但它就在那里:项目结构
我已经尝试为 Flutter 和/或 Dart 添加 20 个不同的启动选项,并直接通往
main.dart
,但没有任何效果。我已经筋疲力尽了。
运行代码:PS
C:\Users\Bassi\Documents\VMP lutter_application_1 erpfly> 文件是 在: C:\Users\Bassi\Documents\VMP lutter_application_1 erpfly\lib\main.dart
对我猜的每一个新想法都开放?
编辑_1: 经过一些更改后,我现在得到:
PS C:\Users\Bassi\Documents\VMP\flutter_application_1\verpfly> flutter build apk
lib/main.dart: Error: Error when reading 'lib/main.dart': Das System kann den angegebenen Pfad nicht finden.
package:Verpfly/main.dart: Error: No 'main' method found.
Try adding a method named 'main' to your program.
Target kernel_snapshot_program failed: Exception
这是我的 main.dart:
// lib/main.dart
import 'package:flutter/material.dart';
import 'licenses/custom_license.dart'; // Importiere die benutzerdefinierten Lizenzen
import 'package:hive_flutter/hive_flutter.dart';
import 'models/entry.dart';
import 'models/settings.dart';
import 'pages/home_page.dart';
import 'pages/entries_page.dart';
import 'pages/edit_entry_page.dart';
import 'pages/settings_page.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter_exit_app/flutter_exit_app.dart';
import 'package:intl/intl.dart';
import 'package:flutter_localizations/flutter_localizations.dart';
import 'utils/constants.dart'; // Hinzugefügt
import 'package:package_info_plus/package_info_plus.dart'; // Für App-Versionierung
import 'package:google_mobile_ads/google_mobile_ads.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
MobileAds.instance.initialize(); // AdMob SDK initialisieren
// Hive initialisieren
await Hive.initFlutter();
// Adapter registrieren
Hive.registerAdapter(EntryAdapter());
Hive.registerAdapter(SettingsAdapter());
await Hive.openBox<Entry>('entries');
await Hive.openBox<Settings>('settings');
// Versionsprüfung und Migration
await checkAndMigrateDatabase();
registerCustomLicense(); // Registriere die benutzerdefinierten Lizenzen
runApp(const MyApp());
}
Future<void> checkAndMigrateDatabase() async {
final settingsBox = Hive.box<Settings>('settings');
Settings? settings = settingsBox.get('settings');
int storedDbVersion = settings?.dbVersion ?? 0;
int currentDbVersion = Constants.currentDbVersion;
if (storedDbVersion < currentDbVersion) {
// Migration erforderlich
await migrateDatabase(fromVersion: storedDbVersion, toVersion: currentDbVersion);
// Aktualisiere die gespeicherte Datenbankversion
if (settings != null) {
settings.dbVersion = currentDbVersion;
await settings.save();
} else {
// Falls keine Einstellungen vorhanden sind, erstelle neue
settings = Settings(
ownerName: settings?.ownerName ?? '',
companyName: settings?.companyName ?? '',
dbVersion: currentDbVersion,
);
await settingsBox.put('settings', settings);
}
}
}
Future<void> migrateDatabase({required int fromVersion, required int toVersion}) async {
for (int version = fromVersion + 1; version <= toVersion; version++) {
switch (version) {
case 1:
await migrateToVersion1();
break;
// Weitere Migrationen hier hinzufügen
default:
throw Exception('Unbekannte Datenbankversion: $version');
}
}
}
Future<void> migrateToVersion1() async {
var entriesBox = Hive.box<Entry>('entries');
for (int i = 0; i < entriesBox.length; i++) {
Entry? entry = entriesBox.getAt(i);
if (entry != null) {
entry.breakfastsProvided = entry.breakfastsProvided ?? 0;
entry.lunchesProvided = entry.lunchesProvided ?? 0;
entry.dinnersProvided = entry.dinnersProvided ?? 0;
await entry.save();
}
}
}
class MyApp extends StatelessWidget {
const MyApp({super.key}); // const-Konstruktor hinzugefügt
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'verpfly',
theme: ThemeData(
primarySwatch: Colors.blue,
),
// Lokalisierung hinzugefügt
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
],
supportedLocales: [
const Locale('de'), // Deutsch
],
home: HomePage(),
routes: {
'/entries': (context) => EntriesPage(),
'/settings': (context) => SettingsPage(),
},
);
}
}
class DatabaseErrorApp extends StatelessWidget {
const DatabaseErrorApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: DatabaseErrorPage(),
);
}
}
class DatabaseErrorPage extends StatelessWidget {
const DatabaseErrorPage({super.key});
void _handleUserChoice(BuildContext context, bool deleteDb) async {
if (deleteDb) {
// Löschen der bestehenden Datenbank
await Hive.deleteBoxFromDisk('entries');
await Hive.deleteBoxFromDisk('settings');
// Starten der App neu
Navigator.of(context).pushReplacement(
MaterialPageRoute(builder: (context) => MyApp()),
);
} else {
// App schließen
FlutterExitApp.exitApp();
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Datenbankfehler'),
),
body: Center(
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'Die bestehende Datenbank ist beschädigt oder entspricht nicht den aktuellen Anforderungen.',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 18),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _handleUserChoice(context, true),
child: Text('Datenbank löschen und neu erstellen'),
),
SizedBox(height: 10),
ElevatedButton(
onPressed: () => _handleUserChoice(context, false),
style: ElevatedButton.styleFrom(
backgroundColor: Colors.red,
),
child: Text('App schließen'),
),
],
),
),
),
);
}
}
我猜问题出在 vscode 配置上。由于使用vscode来运行flutter,因此需要为flutter项目配置vscode。通常这个配置是由 vscode 自动生成的,我不知道为什么你的不是。因此,要手动添加配置,请按照以下步骤操作:
Shift + Command + P
(Mac) / Ctrl + Shift + P
(Windows/Linux) / 应用程序菜单 > 查看 > 命令面板在 vscode 中打开命令面板
{
"configurations": [
{
"name": "verpfly",
"request": "launch",
"type": "dart",
"program": "lib/main.dart"
}
]
}
如果您想查看更多属性检查启动配置
flutter run
或flutter run -t lib/main.dart
您的配置设置应在
文件夹中可用.vscode