经过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,则客户端库具有轻量级占用空间,因此不会对应用程序的文件大小产生负面影响。
但我找不到任何指南!