我是一名原生 Android 开发人员,我开始使用 Flutter SDK。我按照官方flutter doc开发了一个简单的应用程序。但我发现调试应用程序大小为 46 MB,对于这个简单的应用程序来说太大了。有什么办法可以优化应用大小吗?因为 Flutter 应用程序的大小比原生的 Android 应用程序要大。
6 回答
Flutter 调试应用程序非常大,要优化应用程序,您应该将其构建为发布版本,使用
flutter build apk (flutter build defaults to --release).
有很多可能性:
首先,使用以下命令在发布模式下构建您的应用程序:
在您的终端中:
flutter build --release
或者只是指定目标:
对于 Android Apk: flutter build apk --release
对于 Android App Bundle: flutter build app bundle --release
对于 IOS: flutter build ios --release
默认情况下,
flutter run
编译为调试模式。这解释了应用程序的大尺寸。调试模式(热重载、Dart Devtools 等 ..)与发布模式(简单应用程序)
默认为发布模式
flutter build
构建。所以你可以做flutter build
使用 --split-debug-info
标志可以显着减少代码大小。有关使用此标志的示例,请参阅混淆 Dart 代码。
您可以做的其他一些事情来使您的应用程序更小:
- 删除未使用的资源
- 最小化从库中导入的资源
- 压缩 PNG 和 JPEG 文件
您可以在此处了解有关 Flutter 应用程序大小的更多信息
减小/优化应用程序大小
第 1 步:压缩资产所有资产(例如:使用 tinypng 或任何其他选项)
第 2 步:删除未使用的资源
您可以轻松地从 Android Studio 中搜索未使用的资源。只需按 Ctrl + Alt +Shift + i 并输入“未使用的资源”(不带引号)。这将执行 lint。运行 lint 命令(以及 IDE 中的其他内容)的超级简单方法。或在 Android Studio 菜单 > 重构 > 删除未使用的资源...中选择要删除的资源。您可以通过右键单击资源项来排除要保留的资源。使用 Do Refactor 一次删除所有资源。更新:使用 ⌘ +Option +Shift + i for mac
第 3 步:将此代码放入 app/build.gradle
请参阅此链接以了解有关 android ABIS 的更多信息 ( https://developer.android.com/ndk/guides/abis )
///注意:只有工作的构建发布应用程序(导致调试运行问题,所以在调试模式下运行时注释它) android { defaultConfig { minSdkVersion 19 ..... //当应用程序处于调试模式时注释此代码 ndk { abiFilters " armeabi", "armeabi-v7a","arm64-v8a" } } }
第 4 步:从 pubspec.yaml 中删除未使用的插件
第 5 步:使用以下命令构建您的 App Bundle
flutter build appbundle
flutter build appbundle --target-platform android-arm,android-
arm64,android-x64
更多
您可以使用 Proguard 规则
buildTypes { release { minifyEnabled true // 添加这个 proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' // 添加这个 signingConfig signingConfigs.release // 这是发布的默认设置 } }
在 android 主目录中,你可以找到 proguard-rules.pro 如果没有然后 new-> file -> proguard-rules.pro 创建这个文件
将此代码放入该文件以及您在 pubspec.yaml 中添加的插件的适当规则注意:添加插件所需的所有 proguard,否则 android 应用程序将无法正常工作
## Flutter wrapper
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
# -keep class com.google.firebase.** { *; } // uncomment this if you are
using firebase in the project
-dontwarn io.flutter.embedding.**
-ignorewarnings
也去你的 gradle.properties 并添加:
extra-gen-snapshot-options=--obfuscate
在你的 app/build.gradle
buildTypes {
release {
minifyEnabled true // added previously
shrinkResources true // add this
proguardFiles getDefaultProguardFile('proguard-android.txt'),
'proguard-rules.pro' // added previously
signingConfig signingConfigs.release // added previously
}
}
尝试这个,
flutter build apk --split-per-abi
关注官方文档 - https://flutter.dev/docs/perf/app-size
您可以做的一些明显的事情来使您的应用程序更小:
- 删除未使用的资源
- 最小化从库中导入的资源
- 支持有限数量的屏幕密度
- 压缩 PNG 和 JPEG 文件
减小 APK 大小:
如果您正在构建 android apk 或捆绑包,请确保您正在考虑
缩小
保卫
一些常见的事情要记住
干净的代码
删除未使用的插件
移除未使用的资产
删除未使用的字体等