Wie vorgeschlagen, mit proguard sollte auch nicht verwendete Methoden und Felder entfernen eingebundenen Bibliotheken: https://developer.android.com/studio/build/shrink-code.html
-Code Schrumpfen ist mit ProGuard möglich , die unbenutzte Klassen, Felder, Methoden und Attribute aus Ihrer gepackten App erkennt und entfernt, einschließlich derer aus den enthaltenen Codebibliotheken (wodurch es ein wertvolles Tool zum Arbeiten an der 64K Referenzgrenze ist).
(Hervorhebung von mir)
Wenn Sie es möchten, manuell tun, dann unten ist mein Versuch Guave am Strippen nur zu verlassen, von HashBiMap benötigt Abhängigkeiten. Es sieht so aus, als ob es auf viele Klassen angewiesen ist. Denken Sie auch daran, dass Proguard auf der Byte-Ebene funktioniert, so dass das Entfernen von Klassen niemals so effizient funktioniert wie das Entfernen von nicht verwendetem Code mit Proguard.
Ich verwendete jdeps von Java 9 JDK, um alle von HashBiMap
verwendeten Abhängigkeiten zu finden, die BiMap
Schnittstelle implementiert. Dies zeigt, dass es rekursiv von 35% des gesamten Guava-Jar abhängt (eigentlich 666 Klassen von 1852 im Jar) - ganz zu schweigen von den java.base-Klassen. Die neu gepackte JAR-Datei hat 903 KB, während die ursprüngliche JAR-Datei 2,5 MB (guava-23.0-rc1-android.jar) hat.
Below Skript, das ich verwendet (Ich habe auch getestet resultierende Glas in Beispiel android app):
# cleanup
rm -rf guava_jar
rm -rf guava_jar_stripped
# unzip jar file
unzip -qq guava-23.0-rc1-android.jar -d guava_jar
# first lets see how many classes are in guava
find guava_jar -type f | wc -l
# now use jdeps to find recursively dependencies for HashBiMap class. Each
# dependency is a class name which after some string manipulations is used
# to copy to guava_jar_stripped folder
jdeps -R -verbose -cp ./guava-23.0-rc1-android.jar ./guava_jar/com/google/common/collect/HashBiMap.class \
| sed -En 's/(.*)->.*/\1/p' \
| sed -e 's/[[:space:]]*$//' \
| sed -En 's/\./\//pg' \
| uniq \
| xargs -n 1 -I file rsync -qavR ./guava_jar/file".class" ./guava_jar_stripped
# now lets see how many classes were copied
find guava_jar_stripped -type f | wc -l
# now copy back manifest files
rsync -qavR ./guava_jar/META-INF/* ./guava_jar_stripped
# and finally create new jar from stripped classes
cd ./guava_jar_stripped/guava_jar
jar cf ../guava_jar.jar *
und Beispieltestcode:
BiMap<String, String> myBimap = HashBiMap.create();
myBimap.put("Key", "value");
myBimap.get("key");
myBimap.inverse().get("value");
die entsprechenden Klassen extrahieren und sie zu Ihrem eigenen Projekt hinzufügen . Oder verwenden Sie sie als Inspiration für die Implementierung Ihrer eigenen Klasse. – CommonsWare
Wie würde ich die benötigten Klassen extrahieren? –
https://docs.oracle.com/javase/tutorial/deployment/jar/unpack.html –