使用google-play-services_lib添加admob广告后Android应用尺寸增加

时间:2014-02-04 14:50:59

标签: android admob proguard

我要发布我的应用程序有两个版本,包括付费和免费(使用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用作部件,则客户端库占用空间小   你的构建过程,所以它不会对你的产生负面影响   app的文件大小。

并且没有 - 我可以找到它的指南!

3 个答案:

答案 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

如果你自己无法发现,你可以用它来告诉你为什么要保留特定课程。