使用 google-play-services_lib 添加 Admob 广告后 Android 应用程序大小增加

问题描述 投票:0回答:4

我将发布我的应用程序的两个版本,付费版本和免费版本(带有 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 作为一部分,则客户端库的占用空间很小 您的构建过程,因此不会对您产生不利影响 应用程序的文件大小。

我在哪里都找不到它的指南!

android admob proguard
4个回答
13
投票

这与 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、internallocation 文件夹,否则在展示广告时您将收到 NoClassDefFoundError 的 fc。

2、如果您只使用广告,请从 res 文件夹中删除未使用的资源。

google-play-services_lib 中有很多资源 es文件夹对你来说没有用,你可以删除它。例如values-af,values-am,....您需要保留的是color,drawable,drawable-hdpivalues文件夹。

3、现在在你的eclipse中刷新并构建google-play-services_lib项目,然后刷新 并再次构建您的项目。现在您应该会发现 apk 大小变小了。我的尺寸 apk 在 proguard 之前从 902kb 下降到 480kb,在 proguard 之后从 330kb


4
投票

你在 build.gradle 文件中使用了这一行吗?

compile 'com.google.android.gms:play-services:6.+'

如果是,则用这一行补充它

compile 'com.google.android.gms:play-services-ads:6.+'

它减少了应用程序大小约 600kb。


2
投票

您的 proguard 配置的其他部分导致 GPS 类被保留。

看看Proguard用法尤其是选项

-为什么要保留类规范

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


0
投票

更新

使用 Ads lite 限制 64kb:https://developers.google.com/admob/android/lite-sdk

© www.soinside.com 2019 - 2024. All rights reserved.