【问题标题】:Shrink Google Play Services library for use with Google Analytics only缩小 Google Play 服务库以仅与 Google Analytics 一起使用
【发布时间】:2015-01-09 13:19:29
【问题描述】:

是否可以从 Google Play 服务库中删除不必要的包,以便该库仅包含 Google Analytics 所需的所有内容?

我之所以问这个问题是因为 Google Play 服务库中充斥着我认为 Google Analytics 未使用的额外包、图像和资源。

【问题讨论】:

    标签: android google-analytics google-play-services proguard


    【解决方案1】:

    默认情况下,Proguard 也会从 Google Play 服务库中删除 jar 文件中未使用的代码。但是proguard不能用来移除(未使用的)资源,但是我发现还有其他选项可以进一步优化库。

    我能够使用方法二将应用程序从 1827 KB 缩小到 1115 KB。我测试了该应用程序,它运行良好,Google Analytics 统计数据按预期显示在在线仪表板上。


    方法 1:只需包含 google-play-services.jar 文件并忽略 R 警告。

    第一种方法可能是最简单的。

    第 1 步:将 google-play-services.jar 文件从库项目复制到您自己的项目中,并将其粘贴到 libs 文件夹中。

    第 2 步:从您的项目中删除对原始 google-play-services_lib 项目的库引用。

    Right click on your project -> Properties -> Android -> Select library -> Remove
    

    第 3 步:将 dontwarn 标志添加到您的 progruard 设置文件中。

    -dontwarn com.google.**.R
    -dontwarn com.google.**.R$*
    

    说明:google-play-services-jar 包含对生成的 Java 文件 (R.java) 的引用。这些文件通常在构建 google-play-services_lib 项目时生成。 Proguard 通常会在优化 google-play-services.jar 文件时警告您(通过错误退出)这些文件丢失。通过添加 dontwarn 标志,proguard 将忽略这些文件丢失的事实,并且不会因错误而退出。


    方法二:创建优化的google-play-services(-analytics).jar

    方法二是方法一的更优化版本。不同之处在于,不是将库项目中的 google-play-services.jar 文件复制到您自己的项目中,而是首先使用 proguard 优化库。

    因此,您要做的是仅在 google-play-services.jar 文件上手动运行 proguard。为了只保留 Google Analytics,我使用了这个 proguard 设置文件。

    -injars google-play-services.jar
    -outjars google-play-services-analytics.jar
    
    -libraryjars [add your path to sdk]/sdk/extras/android/support/v4/android-support-v4.jar
    -libraryjars [add your path to sdk]/sdk/platforms/android-21/android.jar
    
    -dontoptimize
    -dontobfuscate
    -dontwarn com.google.**.R
    -dontwarn com.google.**.R$*
    -dontnote
    
    -keep public class com.google.android.gms.analytics.**, com.google.android.gms.common.**, com.google.android.gms.location.** {
        public protected *;
    }
    
    -keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
        java.lang.String NULL;
    }
    

    第 1 步:将 google-play-services.jar 文件从库项目复制到 sdk\tools\proguard\lib 文件夹。

    第 2 步:将您的 proguard 设置文件复制到 sdk\tools\proguard\lib 文件夹。

    第 3 步:使用您的设置文件运行 progaurd:

    在 Windows 上:打开命令窗口 -> 导航到 sdk\tools\proguard\lib 文件夹 -> 使用以下命令运行 proguard:

    java -jar proguard.jar @analytics-settings.txt
    

    第 4 步:使用本文中介绍的第一种方法将优化的 google-play-services-analytics.jar 添加到您的项目中。 (别忘了第一种方法的第三步!)


    优化结果

    Before + proguard = 1827 KB
    Method 1 = 1206 KB
    Method 2 = 1115 KB
    

    【讨论】:

    • 嗨@Rolf,你的回答太棒了。我也解决了 dex 文件大小超出的问题,但是 上的问题,如果我没有在清单上放置该行,然后它会遇到错误消息,如果放置则显示未找到资源。请帮帮我。
    • @SatyakiMukherjee 嗨,我也收到版本错误,请告诉我如何解决。
    • 您可以将库项目的/res/values文件夹中的version.xml文件复制到自己项目的/res/values文件夹中来解决。但是,将整个库项目复制到我的工作区并在那里简单地交换 google-play-services.jar(在尚未移动到 Android Studio 的 eclipse 项目上)对我来说效果更好。
    【解决方案2】:

    android-studio中,你可以选择喜欢使用哪个库:

    2017 年 6 月 13 日更新

    你可以使用这个版本的播放服务:

    • 2017 年 6 月 - 版本 11.0.0
    • 2017 年 5 月 - 10.2.6 版
    • 2017 年 4 月 - 版本 10.2.4
    • 2017 年 3 月 - 版本 10.2.1
    • 2017 年 2 月 - 版本 10.2
    • 2016 年 11 月 - 10.0 版
    • 2016 年 10 月 - 9.8 版
    • 2016 年 9 月 - 9.6 版
    • 2016 年 8 月 - 9.4 版
    • 2016 年 6 月 - 9.2 版
    • 2016 年 5 月 - 9.0 版
    • 2015 年 12 月 - 版本 8.4
    • 2015 年 11 月 - 版本 8.3
    • 2015 年 9 月 - 版本 8.1
    • 2015 年 8 月 - 7.8 版
    • 2015 年 5 月 - 7.5 版

    谷歌+

    com.google.android.gms:play-services-plus:11.0.0
    

    谷歌账户登录

    com.google.android.gms:play-services-auth:11.0.0
    

    Google Actions,基本客户端库

    com.google.android.gms:play-services-base:11.0.0
    

    谷歌地址 API

    com.google.android.gms:play-services-identity:11.0.0
    

    谷歌应用索引

    com.google.android.gms:play-services-appindexing:11.0.0
    

    Google 应用邀请

    com.google.android.gms:play-services-appinvite:11.0.0
    

    谷歌分析

    com.google.android.gms:play-services-analytics:11.0.0
    

    谷歌演员

    com.google.android.gms:play-services-cast:11.0.0
    

    谷歌云消息传递

    com.google.android.gms:play-services-gcm:11.0.0
    

    谷歌云端硬盘

    com.google.android.gms:play-services-drive:11.0.0
    

    谷歌健身

    com.google.android.gms:play-services-fitness:11.0.0
    

    Google 位置、活动识别和地点

    com.google.android.gms:play-services-location:11.0.0
    

    谷歌地图

    com.google.android.gms:play-services-maps:11.0.0
    

    谷歌移动广告

    com.google.android.gms:play-services-ads:11.0.0
    

    移动视觉

    com.google.android.gms:play-services-vision:11.0.0
    

    Google 附近

    com.google.android.gms:play-services-nearby:11.0.0
    

    谷歌全景查看器

    com.google.android.gms:play-services-panorama:11.0.0
    

    Google Play 游戏服务

    com.google.android.gms:play-services-games:11.0.0
    

    安全网

    com.google.android.gms:play-services-safetynet:11.0.0
    

    谷歌钱包

    com.google.android.gms:play-services-wallet:11.0.0
    

    安卓穿戴

    com.google.android.gms:play-services-wearable:11.0.0
    

    【讨论】:

    【解决方案3】:

    Google Play Services 6.5+ 更新(仅适用于 gradle)

    在 Google Play Services 6.5 版本中,现在可以只将库的一部分包含到您的应用项目中。目前这只适用于基于 gradle 的构建。

    通常您会将 Play 服务作为依赖项添加到您的 gradle 文件中,如下所示:

    compile 'com.google.android.gms:play-services:9.4.0'
    

    从 6.5 版开始,您可以指定不添加的确切模块。如下面的游戏和分析模块示例所示。

    Google+
    com.google.android.gms:play-services-plus:9.4.0
    
    Google Account Login
    com.google.android.gms:play-services-auth:9.4.0
    
    Google Actions, Base Client Library
    com.google.android.gms:play-services-base:9.4.0
    
    Google Address API
    com.google.android.gms:play-services-identity:9.4.0
    
    Google App Indexing
    com.google.android.gms:play-services-appindexing:9.4.0
    
    Google App Invites
    com.google.android.gms:play-services-appinvite:9.4.0
    
    Google Analytics
    com.google.android.gms:play-services-analytics:9.4.0
    
    Google Awareness
    com.google.android.gms:play-services-contextmanager:9.4.0
    
    Google Cast
    com.google.android.gms:play-services-cast:9.4.0
    Google Cloud Messaging
    com.google.android.gms:play-services-gcm:9.4.0
    
    Google Drive
    com.google.android.gms:play-services-drive:9.4.0
    
    Google Fit
    com.google.android.gms:play-services-fitness:9.4.0
    
    Google Location and Activity Recognition
    com.google.android.gms:play-services-location:9.4.0
    
    Google Maps
    com.google.android.gms:play-services-maps:9.4.0
    
    Google Mobile Ads
    com.google.android.gms:play-services-ads:9.4.0
    
    Google Places
    com.google.android.gms:play-services-places:9.4.0
    
    Mobile Vision
    com.google.android.gms:play-services-vision:9.4.0
    
    Google Nearby
    com.google.android.gms:play-services-nearby:9.4.0
    
    Google Panorama Viewer
    com.google.android.gms:play-services-panorama:9.4.0
    
    Google Play Game services
    com.google.android.gms:play-services-games:9.4.0
    
    SafetyNet
    com.google.android.gms:play-services-safetynet:9.4.0
    
    Android Pay
    com.google.android.gms:play-services-wallet:9.4.0
    
    Android Wear
    com.google.android.gms:play-services-wearable:9.4.0
    

    更多信息和所有模块的完整列表可以在这里找到:Setting Up Google Play Services

    【讨论】:

      【解决方案4】:

      不错的罗尔夫!!

      这是我的 GCM 设置文件

      -injars google-play-services.jar
      -outjars google-play-services-gcm.jar
      
      -libraryjars [add your path to sdk]/sdk/extras/android/support/v4/android-support-v4.jar
      -libraryjars [add your path to sdk]/sdk/platforms/android-21/android.jar
      -libraryjars [add your path to sdk]/sdk/extras/android/support/v7/mediarouter/libs/android-support-v7-mediarouter.jar
      
      -dontoptimize
      -dontobfuscate
      -dontwarn com.google.**.R
      -dontwarn com.google.**.R$*
      -dontnote
      
      -keep public class com.google.android.gms.gcm.**, com.google.android.gms.common.**, com.google.android.gms.iid.** {
          public protected *;
      }
      
      -keep class com.google.android.gms.common.internal.safeparcel.SafeParcelable {
          java.lang.String NULL;
      }
      

      【讨论】:

        猜你喜欢
        • 2017-03-29
        • 1970-01-01
        • 2012-09-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多