2016-05-06 12 views
2

Ich bin ein Java-Programmierer.
Ich habe eine Open-Source-C-Bibliothek, sagen wir A, in mein Android-Projekt aufgenommen, um etwas native Arbeit mit der Funktion F1 zu machen. Funktion F1 funktioniert gut, aber die gemeinsam von A kompilierte Bibliothek ist, sagen wir, 5M groß. Das bedeutet, dass meine finale APK um 5M erhöht wird, was sehr groß ist.
Meine Frage ist, wie kann ich die gemeinsame Bibliothek verkleinern, um nur Funktionen, die ich brauche, einzuschließen? Oder zumindest die meisten Funktionen entfernen, die ich nicht brauche? Gibt es irgendwelche Werkzeuge, die das erreichen können?Wie verkleinern Sie die Größe einer gemeinsam genutzten Bibliothek?

Update 1:
@Employed Russisch hat großen Teil der Frage oben beantwortet, die von ‚Streifen‘ Werkzeug ist.
Meine weitere Frage ist, gibt es irgendwelche Tools können Dinge wie das erreichen, was ProGuard tut, um Java, das ist vollständig entfernen Code, den ich nicht aufgerufen habe?

Antwort

0

Da Sie gesagt haben, die Bibliothek ist Open Source .. Verfolgen Sie einfach die Funktion Implementierung und zusammen mit Klassen hängt es ab und kompilieren Sie Ihre eigene kleinere Version der Bibliothek.

Vertrauen Sie mir diesen Sound hart, aber sparen Sie tatsächlich mehr Zeit als mit compiled c/C++ Code zu spielen.

+0

Es ist meine Schuld zu sagen, ich brauche nur eine Funktion F1. Die Wahrheit ist Bibliothek A bietet fast 100 Funktionen und ich brauche etwa 20. – free6om

+0

Ha ha ha .. jetzt ist das eine Herausforderung ... ich schlage vor, Sie finden ältere Versionen dieser Bibliothek, sie können überraschend klein sein, aber bieten die Funktionen, die Sie brauchen. .. solange sie stabil waren – konzo

2

Funktion F1 funktioniert gut, aber die gemeinsam von A kompilierte Bibliothek ist, sagen wir mal, 5M groß.

Es ist überaus wahrscheinlich, dass Ihre Shared Library Debug-Informationen enthält, die leicht 80% der Größe sein können und die Sie nicht wirklich benötigen. Die meisten Open-Source-Bibliotheken werden mit -O2 -g Flags erstellt, und die -g trägt zur Größe der endgültigen Bibliothek bei.

eine Bibliothek zu erhalten, ohne Informationen zu debuggen, führen Sie strip, etwa so:

cp libA.so libA.so.orig # keep original in case you need to debug it later 
strip -g libA.so 

Jetzt Größen von libA.so und libA.so.orig vergleichen. Die Chancen sind, libA.so wird deutlich kleiner sein.

Sie sollten libA.so noch mehr quetschen können, indem Sie strip libA.so ausführen. Dies entfernt alle Symbole, nicht nur Debugging-Symbole, aber macht es schwieriger, alle Abstürze im Zusammenhang mit libA.so zu debuggen. Da Sie jedoch die ursprüngliche vollständige Debugkopie behalten haben, sollte das kein großes Problem sein.

+0

Es funktioniert gut, 14,3M -> 7,4M nach 'strip -g', 7,4M -> 5,7M nach' strip'. Danke vielmals! – free6om

Verwandte Themen