6

Google Play Services kitaplığından kullanılmayan sınıflardan kurtulmaya çalışıyorum. Tek boş aktivite ile yepyeni bir android proje oluşturdum. projesi, Google Play Services kitaplığından hiçbir şeyi kullanmaz. Bu yüzden, beklemeyi yaptığımda (konfigürasyonda proguard çalıştıran), play-services bağımlı/olmadan binaları karşılaştıran ikili boyutta bir fark görmeyeceğim. Ama aslında, ben apk boyutunda ~ 700 KB fark görüyorum.Kullanılmayan sınıfları Google Play Hizmetleri kitaplığında kaldırmak için Proguard'ı kullanma

play-services.jar dosyasını yeniden paketleyen relatively complex solution, using gradle script numaralı telefonu buldum. Ayrıca, bu çözüm, kullanılmayacak olan her paketi açıkça belirtmek zorundadır. Ama benim durumumda neden proguard yapmıyor anlamıyorum?

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: Bir Google

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); 
    } 
} 
+0

Proguard kullanılmayan sınıfları kaldırır, ancak 'public static' verilerini veya statik başlatıcılar ile olanları kaldıracağından emin değilim. Bahse girerim dersler kaldırılmaz. Google oyun hizmetleri tüm sınıfları birbiriyle ilişkili bir mammooth kütüphanesi olmakla birlikte, yaklaştığınız noktaya benzer bir yaklaşım olacağını tahmin ediyorum: Sadece ihtiyaç duyduğunuz dersleri kütüphane kavanozundan çıkarmaya çalışın. BTW-Mevcut olanlardan çok daha küçük olan eski bir kavanoz kullanıyorum, geçen sene 3 kat büyümüşler. – rupps

+0

da yapabileceğiniz şey, 700kb APK'nızı http://www.decompileandroid.com/ gibi bir web sitesine yüklemek, APK'nızın kaynak koduna dönüştürülmesini sağlamak ve GPS sınıflarının neler dahil edildiğini anlamak ve nedenini anlamaya çalışmaktır. . En azından bu sınıfları hariç tutmak için kurallar tanımlayabilirsiniz. İçerilen dersleri açıkça görmek için gizlemeyi devre dışı bırakmayı unutmayın! – rupps

+1

'shrinkResources true' da eklemek isteyebilirsiniz - bkz. [Buraya] (https://plus.google.com/u/0/+TorNorbye/posts/eHsStybrrBf) – natario

cevap

9

Hizmetler sürüm 6.5 Çal ve kullanmak istediğiniz bireysel hangi API'ler seçin ve ithalat sadece bu olanları olabilir ötesinde. Belki bu, APK boyutunu biraz azaltmanıza yardımcı olur.

Google+       com.google.android.gms:play-services-plus:6.5.+ 
Google Account Login   com.google.android.gms:play-services-identity:6.5.+ 
Google Activity Recognition  com.google.android.gms:play-services-location:6.5.+ 
Google App Indexing    com.google.android.gms:play-services-appindexing:6.5.+ 
Google Cast      com.google.android.gms:play-services-cast:6.5.+ 
Google Drive     com.google.android.gms:play-services-drive:6.5.+ 
Google Fit      com.google.android.gms:play-services-fitness:6.5.+ 
Google Maps      com.google.android.gms:play-services-maps:6.5.+ 
Google Mobile Ads    com.google.android.gms:play-services-ads:6.5.+ 
Google Panorama Viewer   com.google.android.gms:play-services-panorama:6.5.+ 
Google Play Game services  com.google.android.gms:play-services-games:6.5.+ 
Google Wallet     com.google.android.gms:play-services-wallet:6.5.+ 
Android Wear     com.google.android.gms:play-services-wearable:6.5.+ 
Google Actions 
Google Analytics 
Google Cloud Messaging   com.google.android.gms:play-services-base:6.5.+ 

Bu here hakkında daha fazla görebilirsiniz: İşte liste.

+0

Bu çözüm @m shrinkResources' ile çift olarak @miav tarafından önerilen işi yapmalı! Teşekkürler! –

İlgili konular