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);
}
}
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
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
'shrinkResources true' da eklemek isteyebilirsiniz - bkz. [Buraya] (https://plus.google.com/u/0/+TorNorbye/posts/eHsStybrrBf) – natario