Is it possible to remove unnecessary packages from the Google Play Services library so that the library will only contain everything needed for Google Analytics?
I'm asking this because the Google Play Services library is bloated with extra packages, images and resources of which I think are unused by Google Analytics.
Proguard removes unused code from jar files by default also from the Google Play Services library. But proguard cant be used to remove (unused) resources, but I have found that there are other options to further optimize the library.
I was able using method two to shrink an app from 1827 KB
down to 1115 KB
. I tested the app and it works fine and Google Analytics statics are appearing on the online dashboard as expected.
The first method is probably the most easy.
Step 1: Copy the google-play-services.jar file from the library project to your own project and past it in the libs folder.
Step 2: Remove the library reference to the original google-play-services_lib project from your project.
Right click on your project -> Properties -> Android -> Select library -> Remove
Step 3: Add dontwarn flags to your progruard settings file.
-dontwarn com.google.**.R
-dontwarn com.google.**.R$*
Explanation: The google-play-services-jar contains references to generated Java files (R.java). These files are normally generated when the google-play-services_lib project is being build. Proguard will normally warn you (By exiting with an error) that these files are missing when optimizing the google-play-services.jar file. By adding the dontwarn flags proguard will just ignore the fact that these files are missing and won't exit with an error.
Method two is an more optimized version of method one. The difference is that instead of copying the google-play-services.jar file from the library project to your own project you first optimize the library using proguard.
So what you want to do is manually run proguard on just the google-play-services.jar file. For keeping just Google Analytics I used this proguard settings file.
-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;
}
Step 1: Copy the google-play-services.jar file from the library project to the sdk\\tools\\proguard\\lib
folder.
Step 2: Copy your proguard settings file to the sdk\\tools\\proguard\\lib
folder.
Step 3: Run progaurd with your settings file:
On windows: Open command window -> Navigate to the sdk\\tools\\proguard\\lib
folder -> Run proguard using:
java -jar proguard.jar @analytics-settings.txt
Step 4: Use the first method explained in this post to add the optimized google-play-services-analytics.jar to your project. (Don't forget Step 3 in the first method!)
Before + proguard = 1827 KB
Method 1 = 1206 KB
Method 2 = 1115 KB
in android-studio , you can choose which library like to use :
UPDATE 13 JUNE , 2017
u can use this release of play-services :
Google+
com.google.android.gms:play-services-plus:11.0.0
Google Account Login
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 Invites
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 Drive
com.google.android.gms:play-services-drive:11.0.0
Google Fit
com.google.android.gms:play-services-fitness:11.0.0
Google Location, Activity Recognition, and Places
com.google.android.gms:play-services-location:11.0.0
Google Maps
com.google.android.gms:play-services-maps:11.0.0
Google Mobile Ads
com.google.android.gms:play-services-ads:11.0.0
Mobile Vision
com.google.android.gms:play-services-vision:11.0.0
Google Nearby
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 Game services
com.google.android.gms:play-services-games:11.0.0
SafetyNet
com.google.android.gms:play-services-safetynet:11.0.0
Google Wallet
com.google.android.gms:play-services-wallet:11.0.0
Android Wear
com.google.android.gms:play-services-wearable:11.0.0
Update for Google Play Services 6.5+ (only for gradle)
With the Google Play Services 6.5 release it's now possible to just include a part of the library to your app project. At the moment this only works for gradle based builds.
Normally you would add Play services as a dependency to your gradle file like this:
compile 'com.google.android.gms:play-services:9.4.0'
Since version 6.5 you can specify which exact module you wan't to add. As shown in the example below for the Games and Analytics modules.
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
More information and a complete list of all the modules can be found right here: Setting Up Google Play Services
Nice Rolf!!
here is my settings file for 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;
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.