我将发布我的应用程序的两个版本,付费版本和免费版本(带有 AdMob 广告)。
除了我在 AdMob 服务的免费版本中使用的 google-play-service_lib 之外,这两个版本完全相同。
使用proguard后最终的apk大小为:
付费版本 1.301.435 字节
广告版本 1.946.634 字节
在免费版本中,我仅显示插页式广告。
这是我相对于 google-play-service_lib 的 proguard 设置
-keep class * extends java.util.ListResourceBundle {
protected Object[][] getContents();
}
-keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
public static final *** NULL;
}
-keepnames @com.google.android.gms.common.annotation.KeepName class *
-keepclassmembernames class * {
@com.google.android.gms.common.annotation.KeepName *;
}
-keepnames class * implements android.os.Parcelable {
public static final ** CREATOR;
}
我可以做些什么来减少文件大小,例如删除一些 -keep 标志或什么?
编辑
使用apktool我发现Google Play服务包中的所有类都没有被缩小(包括
com.google.android.gms.maps.*
、com.google.android.gms.games.*
和许多其他我认为广告管理不需要的类)。
如何强制缩小班级或班级群?
编辑(再次)
看起来 Eclipse 没有保留 Proguard 输出,至少我在任何地方都看不到它。然后,我配置了使用 Ant 构建的项目和库以查看一些输出,但它几乎不重要,这是两种情况:
-whyareyoukeeping class com.google.android.gms.maps.GoogleMap
[proguard] Explaining why classes and class members are being kept...
[proguard] Printing usage to [...../bin/proguard/usage.txt]...
[proguard] com.google.android.gms.maps.GoogleMap
[proguard] is not being kept.
(至少我读到该类没有被保留,尽管我可以使用 apktool 看到它!)并且
-whyareyoukeeping class com.google.android.gms.games.Games
[proguard] Explaining why classes and class members are being kept...
[proguard] Printing usage to [...../bin/proguard/usage.txt]...
这里没有提及特定的课程。
我放弃了,对于单个插页式广告,我的应用程序将其大小增加了 50%,尽管 Google 关于 GPS 指出:
如果您使用 ProGuard 作为一部分,则客户端库的占用空间很小 您的构建过程,因此不会对您产生不利影响 应用程序的文件大小。
我在哪里都找不到它的指南!
这与 proguard 无关。 如您所知,Google Play 服务是闭源的。 proguard 无法在没有源的情况下处理它 代码。但你可以手动缩小它。
1、从jar文件中删除未使用的类
在google play服务的文件夹中,通常是sdk xtras\google\google_play_services \libproject\google-play-services_lib\libs\, 用zip文件管理器如7zip打开google-play-services.jar,你可以找到很多 如果您只使用广告,地图、游戏等文件夹对您来说就没用。所以就 删除它们。请小心保留 ads、common、dynamic、internal 和 location 文件夹,否则在展示广告时您将收到 NoClassDefFoundError 的 fc。
2、如果您只使用广告,请从 res 文件夹中删除未使用的资源。
google-play-services_lib 中有很多资源 es文件夹对你来说没有用,你可以删除它。例如values-af,values-am,....您需要保留的是color,drawable,drawable-hdpi和values文件夹。
3、现在在你的eclipse中刷新并构建google-play-services_lib项目,然后刷新 并再次构建您的项目。现在您应该会发现 apk 大小变小了。我的尺寸 apk 在 proguard 之前从 902kb 下降到 480kb,在 proguard 之后从 330kb。
你在 build.gradle 文件中使用了这一行吗?
compile 'com.google.android.gms:play-services:6.+'
如果是,则用这一行补充它
compile 'com.google.android.gms:play-services-ads:6.+'
它减少了应用程序大小约 600kb。
更新
使用 Ads lite 限制 64kb:https://developers.google.com/admob/android/lite-sdk