Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 收缩谷歌播放服务库,仅用于谷歌分析_Android_Google Analytics_Google Play Services_Proguard - Fatal编程技术网

Android 收缩谷歌播放服务库,仅用于谷歌分析

Android 收缩谷歌播放服务库,仅用于谷歌分析,android,google-analytics,google-play-services,proguard,Android,Google Analytics,Google Play Services,Proguard,是否可以从Google Play Services库中删除不必要的包,以便该库只包含Google分析所需的所有内容 我这样问是因为Google Play Services库中塞满了我认为Google Analytics未使用的额外软件包、图像和资源。Proguard默认情况下也会从Google Play Services库中删除jar文件中未使用的代码。但是proguard不能用于删除(未使用的)资源,但我发现还有其他选项可以进一步优化库 我能够使用方法二将一个应用程序从1827kb压缩到111

是否可以从Google Play Services库中删除不必要的包,以便该库只包含Google分析所需的所有内容


我这样问是因为Google Play Services库中塞满了我认为Google Analytics未使用的额外软件包、图像和资源。

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

我能够使用方法二将一个应用程序从
1827kb
压缩到
1115kb
。我测试了这个应用程序,它运行得很好,谷歌分析静态数据如预期的那样出现在在线仪表板上


方法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标志添加到程序设置文件中

-dontwarn com.google.**.R
-dontwarn com.google.**.R$*
-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;
}
说明:GooglePlayServicesJAR包含对生成的Java文件(R.Java)的引用。这些文件通常是在构建google-play-services_lib项目时生成的。Proguard通常会在优化google-play-services.jar文件时警告您(退出时出错),这些文件丢失。通过添加dontwarn标志,proguard将忽略这些文件丢失的事实,并且不会以错误退出


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

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

-dontwarn com.google.**.R
-dontwarn com.google.**.R$*
-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步:使用设置文件运行Progord:

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

java -jar proguard.jar @analytics-settings.txt
第4步:使用本文介绍的第一种方法将优化后的google-play-services-analytics.jar添加到您的项目中。(不要忘记第一种方法中的步骤3!)


优化结果
Google Play Services 6.5+的更新(仅适用于gradle)

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

通常,您会将播放服务作为依赖项添加到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
更多信息和所有模块的完整列表可在此处找到:

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;
}

在android studio中,您可以选择要使用的库:

2017年6月13日更新

您可以使用此版本的play services:

  • 2017年6月-11.0.0版
  • 2017年5月-verson 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
谷歌行动,基本客户端库

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
谷歌应用邀请

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
谷歌位置、活动识别和地点

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
谷歌附近

com.google.android.gms:play-services-nearby:11.0.0
谷歌全景查看器

com.google.android.gms:play-services-panorama:11.0.0
谷歌游戏服务

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

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