I am trying to get rid of unused classes from the Google Play Services library. I created a new android project with the only empty activity. The project does not use anything from the Google Play Services library. Therefore, I expect that when I create the release (which includes running proguard in my configuration), I do not see the difference in binary size, comparing the build with the / without play-services dependency. But in fact, I see ~ 700 KB apk size difference.
I found a relatively complicated solution using a gradle script , which includes repackaging the play-services.jar file. In addition, this solution requires explicitly specifying each package that will not be used. But I do not understand why proguard does not work in my case?
build.gradle:
apply plugin: 'com.android.application' android { compileSdkVersion 21 buildToolsVersion "21.1.1" defaultConfig { minSdkVersion 10 targetSdkVersion 21 } buildTypes { release { minifyEnabled true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } } dependencies { // !!! when I comment the line below, release APK is 700 KB smaller !!! // compile 'com.google.android.gms:play-services:6.5.87' }
proguard-rules.pro:
-assumenosideeffects class android.util.Log { public static *** d(...); }
AndroidManifest.xml:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.test.noplayservices"> <application android:allowBackup="true" android:label="@string/app_name" android:icon="@drawable/ic_launcher" android:theme="@style/AppTheme"> <activity android:name=".ui.activities.MainActivity" android:icon="@drawable/ic_launcher"> <intent-filter> <category android:name="android.intent.category.LAUNCHER"/> </intent-filter> </activity> </application> </manifest>
MainActivity.java:
package com.test.noplayservices.ui.activities; import android.app.Activity; import android.os.Bundle; import com.test.noplayservices.R; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstance) { super.onCreate(savedInstance); setContentView(R.layout.main_activity); } }
source share