2014-12-21 6 views
12

Spielen mit der Wenn Sie sich eine große Android-Anwendung finden zu schreiben, die auf vielen verschiedenen Bibliotheken hängt es (was ich würde statt das Rad neu erfinden empfehlen) sehr wahrscheinlich ist, dass Sie bereits über gekommen sind die 65k method limit der Dalvik ausführbare Datei classes.dex. Wenn Sie außerdem auf große Bibliotheken wie das Google Play Services SDK angewiesen sind, die sich bereits in more than 20k methods in version 5.0 befinden, werden Sie gezwungen, use tricks like stripping packages oder multidex support zu vermeiden, um Fehler beim Packen zu vermeiden. Mit Androids neuer Laufzeitumgebung ART, die seit Android Lollipop öffentlich zugänglich ist, sind mehrere dex-Dateien zwar einfacher zu handhaben, aber Entwickler sind derzeit noch gezwungen, Methoden zu zählen.Wie 65k Methode Grenze zu vermeiden, während Google-Services

Was ist der einfachste Weg, um Ihre application`s Methode Zahl zu reduzieren, während die Verwendung von Google Play-Dienste?

Antwort

14

Die größte Änderung für Entwickler, die mit der 6.5 release of the Google Play Services kam, war wahrscheinlich die Granular Dependency Management. Google hat es geschafft, seine Bibliothek aufzuteilen, damit Entwickler nur auf bestimmte Komponenten angewiesen sind, die sie wirklich für ihre Apps benötigen.

Seit Version 6.5 Entwickler sind nicht mehr die komplette Google Play Services-Bibliothek in ihre App zu implementieren gezwungen, sondern auf Komponenten wie diese selektiv verlassen können:

compile 'com.google.android.gms:play-services-fitness:6.5.+' 
compile 'com.google.android.gms:play-services-wearable:6.5.+' 
compile 'com.gogole.android.gms:play-services-maps:6.5.+' 
... 

Wenn Sie die komplette Bibliothek in Ihre kompilieren wollen App können Sie immer noch so tun:

compile 'com.google.android.gms:play-services:6.5.+' 

Eine vollständige Liste der verfügbaren Pakete können on the Android Developers site finden.

+0

Was ADT/Eclipse? Auf der Android-Entwickler-Website wird lediglich die build.gradle für Nutzer bereitgestellt, die mit Android Studio arbeiten. –

+1

Da Google Unterstützung fallen gelassen (z keine weitere Entwicklung) für Eclipse für Android Studio, würde ich ich denke, Eclipse-Projekte (wenn überhaupt möglich) –

2

Ich weiß, diese Frage ist alt, aber für diejenigen, die dieses Problem konfrontiert, während auf Eclipse arbeiten und können nicht die oben genannte Antwort

bitte die Schritte

folgen, wenn Sie nicht wollen, Android herunterladen Studio die lib Projekte zu bekommen Sie lib-Dateien von hier herunterladen können https://www.dropbox.com/s/1pf73czcn7pyqgi/com.google.android.gms.rar?dl=0 und überspringen 4

Schritt 1 - vor allem Sie noch android Studio benötigen Abhängigkeiten yo herunterladen u kann es von hier herunterladen

https://developer.android.com/sdk/index.html

2 - dann in Ihrer Build.gradle in Ihrer App die folgenden Zeilen

dependencies { 
    compile 'com.google.android.gms:play-services-maps:7.5.0' 
//map , gcm or any specific api for a hole list visit the below link 
//https://developers.google.com/android/guides/setup 
} 

und dann traf Sync Projekt mit gradle Datei

danach fügen Sie lib Projekte

Play-Dienste-Basis Play-Dienste-Karten bekommen

direkt darauf klicken ihren Weg

4 zu erhalten - innerhalb von eclipse löschen die In generieren Datei erstellen Projekt ide src Ordner res Ordner und manifestieren

5- Kopie res und Manifest aus dem Spiel-Services-Basis zu einem Projekt

6 - Kopie-Datei im Play-Dienste-base/Gläser auf den libs Ordner Ihrer Projekt normalerweise benannt classes.jar (bitte benennen Sie es in einen anderen Namen, so wird es nicht mit anderen Projekt kollidieren)

7- Fügen Sie diese jar, um Pfade zu bauen, dann mit der rechten Maustaste auf Projekt/Eigenschaften/Java Build Pfad/Reihenfolge und Export-Registerkarte überprüfen Sie das hinzugefügte Glas

8- rechte Maustaste auf Projekt/Eigenschaften/android/Check ist lib

9- die gleichen Schritte für

10 Play-Dienste-Karten machen - jetzt haben Sie lib Projekte ein Googlebase und das andere genannt wird googlemaps (oder jede andere genannt Name)

11 - fügen sie sie in Ihr Projekt als Bibliotheken

jetzt die folgenden Zeilen zu Ihrem Manifest

<!-- Include required permissions for Google Maps API to run--> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
    <uses-permission android:name="android.permission.INTERNET"/> 
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> 
    <uses-feature 
     android:glEsVersion="0x00020000" 
     android:required="true"/> 


<meta-data 
      android:name="com.google.android.gms.version" 
      android:value="@integer/google_play_services_version" /> 

<meta-data 
      android:name="com.google.android.maps.v2.API_KEY" 
      android:value="" /> 

für eine kompl hinzufügen ete Tutorial mit Bildern finden Sie unter Link http://androidninja.quora.com/Prevent-65-K-Methods-Count-When-Using-Google-Lib-on-Android-with-eclipse-adt

4

Für jemanden, der nicht Android Studio w/gradle verwenden oder nicht wollen, ProGuard zu implementieren, um Sie projizieren.

Es ist möglich, 65k zu vermeiden, während Sie google-play-services verwenden, indem Sie einige Pakete beibehalten, die Sie wirklich verwenden möchten, indem Sie jarjar verwenden. Zum Beispiel, in meinem Projekt möchte ich nur Google Map und Google Location implementieren Ich lehne meine Google-play-services.jar so.

  1. Herunterladen Jarjar HERE

  2. neue 'services.rules' Dateiaufruf erstellen

  3. bearbeiten sie wie folgt

com.google.android.gms halten .maps. *

halten Sie com.google.android.gms.location.*

  1. ursprünglichen Google-Play-services.jar Kopieren/Jarjar-1.4.jar/services.rules in den gleichen Ordner

  2. Starteingabeaufforderung und Typ ..

java -jar Jarjar-1.4.jar Prozess services.rules google-play-services.jar google-lean.jar

Das ist es, Sie werden ein neues .jar, dass die Größe wurde viel reduzieren (Methode auch)

verwenden Sie es instate von google-play-services.jar und dex über 56k wird weg.

Here ist .jar, dass schlanke bereits erwähnt oben war.

+0

Migration wird empfohlen, diese Antwort undervoted ist. Viele Leute (einschließlich mir) suchen eine ähnliche Methode und haben sie nie gefunden. Am Ende habe ich die Klassen manuell entfernt, aber es ist alles andere als perfekt – Krystian

Verwandte Themen