收缩Google Play服务库仅用于Google Analytics

时间:2014-11-12 15:57:38

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

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

我之所以这样问,是因为Google Play服务库充斥着额外的软件包,图片和资源,我认为这些资源尚未被Google Analytics使用。

4 个答案:

答案 0 :(得分:14)

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将忽略这些文件丢失的事实,并且不会因错误而退出。


方法2:创建优化的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添加到您的项目中。 (不要忘记第一种方法中的第3步!)


优化结果

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

答案 1 :(得分:9)

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

Google+

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

Google帐户登录

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

Google Actions,Base Client Library

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

Google Address API

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

Google App Indexing

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

Google App邀请

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

Google Analytics

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

Google Cast

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

Google Cloud Messaging

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

Google云端硬盘

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

Google Fit

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

Google位置,活动识别和地点

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

Google地图

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

Google移动广告

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

Google Panorama Viewer

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

Google Play游戏服务

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

SafetyNet

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

Google电子钱包

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

Android Wear

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

答案 2 :(得分: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

答案 3 :(得分:2)

Nice Rolf !!

这是我的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;
}