【发布时间】:2014-02-04 14:50:59
【问题描述】:
我将以两个版本发布我的应用,包括付费版和免费版(带有 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 about GPS 声明:
如果您使用 ProGuard 作为一部分,客户端库的占用空间很小 你的构建过程,所以它不会对你的 应用的文件大小。
而且我找不到它的指南!
【问题讨论】:
-
不是一个真正的解决方案,只是可能有所帮助:您可能可以删除 drawable-XXXX 文件夹。它们仅包含登录/退出和 +1 按钮图像。我会检查库许可证以验证 Google 是否可以。
-
@sagis +1!谢谢,这是一个有趣的观点。