我要发布我的应用程序有两个版本,包括付费和免费(使用AdMob广告) 除了我在AdMob服务的免费版本中使用的google-play-service_lib之外,这两个版本完全相同。
使用proguard后的最终apk尺寸为:
付费版本为1.301.435字节
广告版本为
在免费版中,我只会展示插页式广告。
这是我相对于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用作部件,则客户端库占用空间小 你的构建过程,所以它不会对你的产生负面影响 app的文件大小。
并且没有 - 我可以找到它的指南!
答案 0 :(得分:13)
与proguard无关。 如你所知,谷歌播放服务是密切的来源。 proguard无法在没有来源的情况下处理它 码。但你可以手动缩小它。
1,从jar文件中删除未使用的类
在google play服务的文件夹中,通常为sdk \ extras \ google \ google_play_services \ libproject \的Google Play-services_lib \库\ 用zip文件管理器打开 google-play-services.jar ,如7zip,你会发现很多 如果您只使用广告,那么诸如地图,游戏等巫文件对您没用。所以就 删除它们。请小心保留广告,常用,动态,内部和位置文件夹,否则在展示广告时您将收到NoClassDefFoundError的fc。
2,如果您只使用广告,请从res文件夹中删除未使用的资源。
google-play-services_lib \ res文件夹中的许多资源对您没用,您可以将其删除。例如values-af,values-am,....您需要保留的是 color,drawable,drawable-hdpi 和 values 文件夹。
3,现在在eclipse中刷新并构建google-play-services_lib项目,然后刷新 并再次构建您的项目。现在你知道发现apk尺寸变小了。我的大小 apk在proguard之前从 902kb 下降到 480kb ,在proguard之后 330kb 。
答案 1 :(得分:4)
你是否在build.gradle文件中使用了这一行?
compile 'com.google.android.gms:play-services:6.+'
如果是,则用这一行补充
compile 'com.google.android.gms:play-services-ads:6.+'
它将应用程序大小减少了大约600kb。
答案 2 :(得分:2)
您的proguard配置的其他部分正在导致保留GPS类。
查看Proguard Usage,尤其是选项
-whyareyoukeeping class_specification
如果你自己无法发现,你可以用它来告诉你为什么要保留特定课程。