flutter android 应用程序在发布模式下冻结在初始屏幕上
flutter android app freezes on the splash screen in release mode
我在使用存储来保存用户登录数据时遇到问题。
这样的场景:登录后,我清除应用程序并尝试再次重新打开它,有时它会打开,有时它会在初始屏幕上冻结。
这只发生在发布模式下。
我尝试删除每个包,直到我发现登录后使用存储有问题。所以如果我不登录,什么都不会冻结。
我使用了 get_storage、shared_preferences 和 secured_storage 包,但没有任何改变。
颤振 2.10.2.
在真实设备上测试
还有这个用过的包
module:
androidX: true # Add this line.
environment:
sdk: ">=2.11.0 <3.0.0"
dependencies:
dio: ^4.0.0
get: ^4.1.4
get_storage:
flutter:
sdk: flutter
dev_dependencies:
flutter_launcher_icons: ^0.9.2
flutter_icons:
android: true
ios: false
image_path: "assets/icons/launcher_icon.png"
flutter_test:
sdk: flutter
name: delivery
description: manager App
version: 1.6.3
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
最后还是决定分享啰啰嗦嗦希望有人能帮忙
带上你的真实设备并通过电缆将它连接到你的电脑并安装你的应用程序的发布版本
Go-to 终端和 运行 flutter logs
看看发生了什么
在某些情况下,可能是权限原因。您需要指定它们 (don't relax because of default permissions set)
我认为应该有两件事--
首先确保您在 AndroidManifest.xml 文件中添加了 Internet 权限和其他必需的权限
其次,如果您已经定义了所有必需的权限,那么试试这个--
在您的 app/build.gradle 文件中添加这 3 行
minifyEnabled false
useProguard false
shrinkResources false
在
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
minifyEnabled false
useProguard false
shrinkResources false
}
}
然后清理你的项目并重试我希望这会起作用,如果你仍然遇到这个问题,请再次检查你使用的 flutter_native_splash 包的文档,同时观看已经链接的 Johannes Milke 教程的视频在文档中。
谢谢。
您可以在应用程序中安装 sentry_flutter 以捕获发布应用程序中的异常。
此外,尝试将 flutter_native_splash: ^2.0.4
从 dev_dependencies
移动到 dependencies
。
由于其他答案没有给出任何运气,我建议您首先禁用应用程序中的所有内容,然后逐渐启用应用程序的某些部分,直到您重现问题。例如,首先将 main()
中的 MyApp()
替换为应用程序的空白 shell:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // transparent status bar
));
await initServices();
runApp(MaterialApp(
home: Container(color: Colors.blue),
));
}
这会告诉您问题出在您的初始化还是应用程序的其余部分。如果加载蓝屏,则表示初始化正常。像这样继续划分您的应用程序,直到找到导致应用程序挂起的部分。
推荐大家重新安装flutter sdk试试
我有一个类似的错误:
- 默认情况下 Android,
android:allowBackup
设置为 true
,这意味着您的应用数据会自动备份到您的 Google Drive
- 问题是当您的数据结构中的某些内容发生变化但您的旧备份具有旧的且不兼容的数据结构时。当重新安装与备份的旧数据结构不兼容的新版本应用程序时,它会在本机启动画面上冻结。
我通过将 android:allowBackup="false"
添加到 android/app/src/main/AndroidManifest.xml
解决了这个问题:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
...
android:allowBackup="false"
...
</application>
</manifest>
几天前我在我们的生产应用程序中遇到了同样的问题。我用 Flutter 2.10.2 发布了一个更新(本地应用程序数据库中只更新了几个表),许多用户开始冻结启动屏幕。
我花了好几天时间解决,终于把 Flutter 降级到 2.8 并发布更新,问题就解决了。
我在使用存储来保存用户登录数据时遇到问题。
这样的场景:登录后,我清除应用程序并尝试再次重新打开它,有时它会打开,有时它会在初始屏幕上冻结。 这只发生在发布模式下。
我尝试删除每个包,直到我发现登录后使用存储有问题。所以如果我不登录,什么都不会冻结。
我使用了 get_storage、shared_preferences 和 secured_storage 包,但没有任何改变。 颤振 2.10.2.
在真实设备上测试
还有这个用过的包
module:
androidX: true # Add this line.
environment:
sdk: ">=2.11.0 <3.0.0"
dependencies:
dio: ^4.0.0
get: ^4.1.4
get_storage:
flutter:
sdk: flutter
dev_dependencies:
flutter_launcher_icons: ^0.9.2
flutter_icons:
android: true
ios: false
image_path: "assets/icons/launcher_icon.png"
flutter_test:
sdk: flutter
name: delivery
description: manager App
version: 1.6.3
publish_to: 'none' # Remove this line if you wish to publish to pub.dev
最后还是决定分享啰啰嗦嗦希望有人能帮忙
带上你的真实设备并通过电缆将它连接到你的电脑并安装你的应用程序的发布版本
Go-to 终端和 运行
flutter logs
看看发生了什么在某些情况下,可能是权限原因。您需要指定它们
(don't relax because of default permissions set)
我认为应该有两件事--
首先确保您在 AndroidManifest.xml 文件中添加了 Internet 权限和其他必需的权限
其次,如果您已经定义了所有必需的权限,那么试试这个--
在您的 app/build.gradle 文件中添加这 3 行
minifyEnabled false
useProguard false
shrinkResources false
在
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
minifyEnabled false
useProguard false
shrinkResources false
}
}
然后清理你的项目并重试我希望这会起作用,如果你仍然遇到这个问题,请再次检查你使用的 flutter_native_splash 包的文档,同时观看已经链接的 Johannes Milke 教程的视频在文档中。
谢谢。
您可以在应用程序中安装 sentry_flutter 以捕获发布应用程序中的异常。
此外,尝试将 flutter_native_splash: ^2.0.4
从 dev_dependencies
移动到 dependencies
。
由于其他答案没有给出任何运气,我建议您首先禁用应用程序中的所有内容,然后逐渐启用应用程序的某些部分,直到您重现问题。例如,首先将 main()
中的 MyApp()
替换为应用程序的空白 shell:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
SystemChrome.setSystemUIOverlayStyle(SystemUiOverlayStyle(
statusBarColor: Colors.transparent, // transparent status bar
));
await initServices();
runApp(MaterialApp(
home: Container(color: Colors.blue),
));
}
这会告诉您问题出在您的初始化还是应用程序的其余部分。如果加载蓝屏,则表示初始化正常。像这样继续划分您的应用程序,直到找到导致应用程序挂起的部分。
推荐大家重新安装flutter sdk试试
我有一个类似的错误:
- 默认情况下 Android,
android:allowBackup
设置为true
,这意味着您的应用数据会自动备份到您的 Google Drive - 问题是当您的数据结构中的某些内容发生变化但您的旧备份具有旧的且不兼容的数据结构时。当重新安装与备份的旧数据结构不兼容的新版本应用程序时,它会在本机启动画面上冻结。
我通过将 android:allowBackup="false"
添加到 android/app/src/main/AndroidManifest.xml
解决了这个问题:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
...
<application
...
android:allowBackup="false"
...
</application>
</manifest>
几天前我在我们的生产应用程序中遇到了同样的问题。我用 Flutter 2.10.2 发布了一个更新(本地应用程序数据库中只更新了几个表),许多用户开始冻结启动屏幕。
我花了好几天时间解决,终于把 Flutter 降级到 2.8 并发布更新,问题就解决了。