Wie kann ich vermeiden, dass ungenutzte Ressourcen und Code von einem Android Library-Projekt in meine APK gelangen?

9

Ich habe ein Android-Bibliotheksprojekt in meinem Eclipse-Arbeitsbereich, das ich als einzigartige Toolbox verwende. Durch Zufall (1) habe ich gerade festgestellt, dass Ressourcen aus der Bibliothek (XML-Animationen, XML-Layouts, sogar Zeichenvorlagen !!!) in die APKs der Projekte gepackt werden, die die Bibliothek verwenden, auch wenn ich sie nicht verwende / p>

Nach dem Lesen von Verpackt Android immer ungenutzte Ressourcen? Ich frage mich, ob das normal ist. Wie kann ich das vermeiden? Ist der einzige Weg, verschiedene Bibliotheksprojekte zu haben?

BEARBEITEN : Ich habe festgestellt, dass der .ex-Code dekompiliert wird, dass auch nicht verwendeter Code in die apk übergeht.

(1) Ich habe versucht, ein neues Symbol für meine App " /res/drawable/icon.png " zu testen, aber das Standardsymbol wird weiterhin angezeigt. Ich entfernte das Bild und es zeigte weiterhin das Standard-Icon! Es musste die /res/drawable-mdpi/icon.png aus der Bibliothek sein.

    
bigstones 06.04.2011, 00:59
quelle

3 Antworten

2

Das neue Android-Build-System verfügt über einen Mechanismus zum Entfernen von Ressourcen kann als letzter Schritt im Build-Prozess ausgeführt werden. Verwenden Sie sie zusätzlich zum Entfernen von Ressourcen, die von Flusen identifiziert werden.

Beachten Sie, dass der Resource-Stripping-Mechanismus besonders nützlich ist in Verbindung mit Proguard (auch im Build-System enthalten) und wenn Sie es sind Verwenden von Bibliotheken in Ihrem Projekt. Die Idee ist:

  • Proguard entfernt Klassen, die Sie nicht verwenden, einschließlich solcher, die aus Bibliotheken stammen.
  • Der obige Prozess kann Codeverweise auf Ressourcen löschen, die in diesen Bibliotheken enthalten sind.
  • Diese nicht referenzierten Ressourcen können somit aus dem APK entfernt werden, da es keinen Code mehr gibt, der sie verwendet.

Das Entfernen nicht verwendeter Ressourcen, die von lint identifiziert werden, ist immer noch nützlich, da sie entfernt werden:

  • Beschleunigt Ihren Build
  • Reduziert den Wartungsaufwand Ihres Projekts.
Fabian Tamp 15.07.2015, 22:15
quelle
2

Proguard kann nicht verwendeten Code entfernen.

Aber es wird nichts über ungenutzte Ressourcen tun und es wird auch Ihren Code verschleiern. Du musst darüber nachdenken, bevor du es verwendest.

    
f4. 06.04.2011 12:11
quelle
1

Wie jemand schon einmal gesagt hat, Proguard kann ungenutzten Code entfernen.

Um ungenutzte Ressourcen zu entfernen, können Sie Android Lint von ADT 16 verwenden. Es hilft Ihnen nicht nur unbenutzte zu entfernen Ressourcen, sondern auch, um mögliche Fehler zu finden. Dieses Zitat stammt von seiner offiziellen Seite:

  

Hier sind einige Beispiele für die Arten von Fehlern, nach denen gesucht wird:

     
  • Fehlende Übersetzungen (und nicht verwendete Übersetzungen)
  •   
  • Layout-Performance-Probleme (alle Probleme, die das alte layoutopt-Tool verwendet hat, und mehr)
  •   
  • Unbenutzte Ressourcen
  •   
  • Inkonsistente Array-Größen (wenn Arrays in mehreren Konfigurationen definiert sind)
  •   
  • Probleme mit der Zugänglichkeit und Internationalisierung (fest codierte Strings, fehlende contentDescription usw.)
  •   
  • Icon-Probleme (wie fehlende Dichten, doppelte Icons, falsche Größen, etc.)
  •   
  • Usability-Probleme (z. B. keine Angabe eines Eingabetyps in einem Textfeld)
  •   
  • Offensichtliche Fehler und vieles mehr.
  •   
    
Andrei Buneyeu 14.12.2011 17:04
quelle