anu*_*der 24 android gradle apk dart flutter
我在 Google PlayStore 中的 App Bundle 下载大小约为23 MB:
但是为什么安装后,磁盘上的应用程序大小显着增加到83 MB:
知道为什么会发生这种情况,因为:
1) Flutter 的项目资源文件(图像、声音和字体)只有11 MB左右
2) 磁盘上 Flutter 源代码 (.dart) 的大小仅为1.4 MB
3) Android Native Resource/icon (Res) 只有大约800 KB
关于我在下面使用的flutter插件:
dependencies:
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
angles: ^1.0.1
app_settings: ^1.0.5
archive: ^2.0.8
cached_network_image: ^1.1.1
carousel_slider: ^1.3.0
cron: ^0.2.1
crypto: ^2.0.6
cupertino_icons: ^0.1.2
date_format: ^1.0.5
device_id: ^0.1.3
dio: ^2.0.0
easy_alert: ^0.0.2
localstorage: ^2.0.0
audioplayers: ^0.13.1
path_provider: ^1.1.0
esys_flutter_share: ^1.0.2
flutter_compass: ^0.3.2
flutter_html: ^0.9.6
flutter_local_notifications: ^0.8.2
flutter_offline: ^0.2.4+1
flutter_swiper: ^1.1.6
flutter_xlider: ^2.4.5
font_awesome_flutter: ^8.2.0
geolocator: ^5.0.1
google_maps_flutter: ^0.2.0
google_sign_in: ^4.0.1+1
http: ^0.12.0+2
libcalendar: ^0.2.0
location : ^2.3.0
numberpicker: ^1.0.0
pigment: ^1.0.3
rxdart: ^0.21.0
shared_preferences: ^0.5.1+1
shimmer: ^1.0.0
unicode: ^0.1.0
url_launcher: ^5.0.2
validate: ^1.6.0
vibrate: ^0.0.4
after_layout: ^1.0.7+2
draggable_scrollbar: ^0.0.4
flutter_web_browser: ^0.11.0
flutter_youtube: ^1.1.6
google_api_availability: ^2.0.1
indexed_list_view: ^0.0.5
permission_handler: ^3.1.0
queries: ^0.1.4
rect_getter: ^0.0.1
scroll_to_index: any
sqflite: ^1.1.5
tuple: ^1.0.2
xml2json: ^3.0.3
firebase_messaging: ^5.1.6
firebase_analytics: ^3.0.2
firebase_core: ^0.4.0+3
firebase_auth: ^0.11.1+6
firebase_admob: ^0.9.0+1
firebase_in_app_messaging: ^0.0.1+3
superellipse_shape: ^0.1.5
device_info: ^0.4.0+2
in_app_purchase: ^0.2.0+6
sentry: any
system_info: ^0.1.1
highlighter_coachmark: ^0.0.3
volume: ^0.1.0
admob_flutter: ^0.3.2
bubble_tab_indicator: "^0.1.4"
material_design_icons_flutter: ^3.0.3289
scoped_model: ^1.0.1
flutter_slidable: ^0.4.9
kiwi: ^0.1.0
flutter_markdown: ^0.2.0
flutter_downloader: ^1.2.1
native_ads: ^0.2.0
onesignal_flutter: ^2.0.0
Run Code Online (Sandbox Code Playgroud)
任何想法如何减少应用程序的大小?
先感谢您...
更新
如果我在我的中设置minifyEnabled = true和shrinkResources = true(按照 Ravinder Kumar 的建议),build.gradle那么它会产生一个很长的错误,这是日志:
== 为 Android 构建 ==
... (由于很长,我剪掉了错误日志,但可以在这里看到完整的日志:https : //www.dropbox.com/s/jy92d1lmj9pgb6d/full_flutter_error_log.txt?dl=0)
注意:配置保持入口点 'io.flutter.plugins.googlesignin.GoogleSignInPlugin$Delegate$3 { void onComplete(com.google.android.gms.tasks.Task); }',但不是描述符类'com.google.android.gms.tasks.Task'
注意:配置保持入口点 'io.flutter.plugins.inapppurchase.Translator { java.util.HashMap fromSkuDetail(com.android.billingclient.api.SkuDetails); }',但不是描述符类 'com.android.billingclient.api.SkuDetails'
注意:配置保持入口点 'io.flutter.plugins.inapppurchase.Translator { java.util.HashMap fromPurchase(com.android.billingclient.api.Purchase); }',但不是描述符类'com.android.billingclient.api.Purchase'
注意:配置保持入口点 'io.flutter.plugins.inapppurchase.Translator { java.util.HashMap fromPurchasesResult(com.android.billingclient.api.Purchase$PurchasesResult); }',但不是描述符类 'com.android.billingclient.api.Purchase$PurchasesResult'
注意:有 7 个对未知类的引用。
Run Code Online (Sandbox Code Playgroud)You should check your configuration for typos. (http://proguard.sourceforge.net/manual/troubleshooting.html#unknownclass)注意:有 3 个对未知类成员的引用。
Run Code Online (Sandbox Code Playgroud)You should check your configuration for typos.注意:在保留的类成员中有 242 个未处理的描述符类。
Run Code Online (Sandbox Code Playgroud)You should consider explicitly keeping the mentioned classes (using '-keep'). (http://proguard.sourceforge.net/manual/troubleshooting.html#descriptorclass)注意:有 68 个未解析的对类或接口的动态引用。
Run Code Online (Sandbox Code Playgroud)You should check if you need to specify additional program jars. (http://proguard.sourceforge.net/manual/troubleshooting.html#dynamicalclass)警告:有 25 个未解析的类或接口引用。
Run Code Online (Sandbox Code Playgroud)You may need to add missing library jars or update their versions. If your code works fine without the missing classes, you can suppress the warnings with '-dontwarn' options. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedclass)警告:有 2 个未解析的对库类成员的引用。
Run Code Online (Sandbox Code Playgroud)You probably need to update the library versions. (http://proguard.sourceforge.net/manual/troubleshooting.html#unresolvedlibraryclassmember)警告:处理任务时出现异常 java.io.IOException:请先更正上述警告。
线程(任务限制器_1):破坏正在运行的 Gradle 任务 'bundleRelease'... 690.7s(!)
****************************************************** **********************>******************** Gradle 失败可能是因为此 Flutter 应用程序中的 AndroidX >不兼容问题。请参阅“https : //goo.gl / CP92wY”以获取有关该问题的更多信息以及>如何修复它。****************************************************** **********************>******************** Gradle 任务 bundleRelease 失败,退出代码为 1
构建失败:| 无法为 Android 构建
顺便说一句,下面是我的proguard-rules.pro:
#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.baseflow.** { *; }
#-keep class com.chartboost.** { *; }
-dontwarn com.google.common.base.**
-keep class com.google.common.base.** {*;}
-dontwarn com.google.errorprone.annotations.**
-keep class com.google.errorprone.annotations.** {*;}
-dontwarn com.google.j2objc.annotations.**
-keep class com.google.j2objc.annotations.** { *; }
-dontwarn java.lang.ClassValue
-keep class java.lang.ClassValue { *; }
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
-keep class org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement { *; }
Run Code Online (Sandbox Code Playgroud)
我的回答是基于官方文件,
除此之外,您还需要启用 proguard 以减小 apk 的大小并防止应用程序逆向工程。在颤振中,
为了使您的应用程序尽可能小,您应该在发布版本中启用收缩以删除未使用的代码和资源。
默认情况下,Flutter 不会混淆或缩小 Android 主机。如果您打算使用第三方 Java、Kotlin 或 Android 库,您可能希望减小 APK 的大小或保护该代码免遭逆向工程。
按照此链接在您的应用程序中启用 progaurd,
第 1 步:第 1 步 - 配置 Proguard
创建一个/android/app/proguard-rules.pro文件并添加下面列出的规则。
## 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.** { *; }
-dontwarn io.flutter.embedding.**
Run Code Online (Sandbox Code Playgroud)
第 2 步:启用混淆和/或缩小
android {
...
buildTypes {
release {
signingConfig signingConfigs.release
minifyEnabled true
shrinkResources true// to shrink your image resource read more at https://developer.android.com/studio/build/shrink-code
useProguard true// enables progaurd
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
Run Code Online (Sandbox Code Playgroud)
注意:仅在生产 apk 中使用 Proguard。
另外,请阅读 为什么我在设备上的应用大小与 APK 或 Play 商店大小不同
应用程序也依赖于本机库,并且大多数本机库都是设备上可用的 android 框架库,因此它们不会捆绑在 apk/aab 中。但是这些库将包含在 odex 文件中,因此在安装时会扩展其大小。
问题:可能的预防措施是什么?
答案: 尽量减少图书馆的资源使用
如果库是为服务器或桌面设计的,它可以包含许多应用程序不需要的对象和方法。要仅包含您的应用程序需要的库部分,如果许可证允许您修改库,您可以编辑库的文件。您还可以使用替代的、适合移动设备的库为您的应用程序添加特定功能。
注意:代码收缩可以清理库中一些不必要的代码,但它可能无法删除一些大的内部依赖项。
另请阅读此处提到的步骤
https://developer.android.com/topic/performance/reduce-apk-size#reduce-code
| 归档时间: |
|
| 查看次数: |
7084 次 |
| 最近记录: |