如何优化(减少)我的android应用程序的大小
我创建了一个android应用程序,其中只包含2个Web视图,其中包含一些java脚本,一个内置的PDF阅读器API,重约2MB,所有PDF(压缩)约25MB,以及其他图像(也压缩)etc小于1MB,约为30MB。因此,生成应用程序后,我的应用程序大小约为55MB。我认为这是不可接受的。如何优化(减少)我的android应用程序的大小,android,apk,Android,Apk,我创建了一个android应用程序,其中只包含2个Web视图,其中包含一些java脚本,一个内置的PDF阅读器API,重约2MB,所有PDF(压缩)约25MB,以及其他图像(也压缩)etc小于1MB,约为30MB。因此,生成应用程序后,我的应用程序大小约为55MB。我认为这是不可接受的。 那么,为什么我的应用程序有这么大的尺寸,以及我如何能更大程度地减小我的android应用程序的尺寸。使用Proguard。从build.gradle文件中,像这样启用Proguard buildTypes
那么,为什么我的应用程序有这么大的尺寸,以及我如何能更大程度地减小我的android应用程序的尺寸。使用Proguard。从build.gradle文件中,像这样启用Proguard
buildTypes {
release {
minifyEnabled true
shrinkResources true
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
然后打开你的“proguard rules.pro”并提及所有规则。如果不使用任何外部库,请将其粘贴到“proguard rules.pro”文件中。
发现“lib”是15MB,大约是我应用程序大小的35%,这是不可接受的,因为我只使用了2MB的单个ext库
您计算错了该库的大小及其依赖项。假设您自己没有使用NDK,那么该库正在使用NDK,或者其依赖项正在使用该库。该库的大小与的大致匹配,尽管我不知道这是否是您正在使用的特定库
该PDF查看库的文档包括:
Android PdfViewer依赖于PdfiumAndroid,这是一组用于许多体系结构的本机库(大约16MB)。Apk必须包含所有这些库,才能在市场上可用的每个设备上运行。幸运的是,Google Play允许我们上传多个APK,例如,每个架构一个APK。有一篇关于自动将应用程序拆分为多个APK的好文章。最重要的部分是通过APK拆分改进多APK创建和版本代码处理,但整篇文章值得一读。您只需要在应用程序中执行此操作,不需要分叉PdfiumAndroid之类的东西
你的选择是:
- 按照文档中的建议,使用ABI拆分来为每个CPU体系结构提供单独的APK(这仅在您通过支持每个体系结构的单独APK的某种方式(如Play Store)进行分发时才有帮助)
- 使用
- 依靠
和用户选择的PDF查看器,从应用程序中删除PDF呈现功能ACTION\u VIEW
- 从应用程序中删除PDF,将其转换为HTML/CSS/图像并在
WebView中呈现
-optimizationpasses 5
-dontusemixedcaseclassnames
-dontskipnonpubliclibraryclasses
-dontpreverify
-verbose
-allowaccessmodification
-optimizations !code/simplification/arithmetic,!code/simplification/cast,!field/*,!class/merging/*
-keepattributes EnclosingMethod
-keep public class * extends android.app.Activity
-keep public class * extends android.app.Application
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep public class * extends android.content.ContentProvider
-keep public class * extends android.app.backup.BackupAgentHelper
-keep public class * extends android.preference.Preference
-keep public class com.android.vending.licensing.ILicensingService
-keepclasseswithmembernames class * {
native <methods>;
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet);
}
-keepclasseswithmembers class * {
public <init>(android.content.Context, android.util.AttributeSet, int);
}
-keepclassmembers class * extends android.app.Activity {
public void *(android.view.View);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-keep class * implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *;
}
-keep public class com.google.android.gms.ads.** {
public *;
}
-keep public class com.google.ads.** {
public *;
}
# For OkHttp3
-keepattributes Signature
-keepattributes Annotation
-keep class okhttp3.** { *; }
-keep interface okhttp3.* { *; }
-dontwarn okhttp3.*