ClassyShark verrät, was sich im APK versteckt

Android-Apps funktionieren so lange problemlos, bis man auf Größenbeschränkungen der Runtime trifft. Das vom Google Developer Advocate Boris Farber entwickelte Analysetool ClassyShark hilft – nicht nur in diesem Fall – bei der Suche nach Problemstellen.

In Pocket speichern vorlesen Druckansicht 1 Kommentar lesen
ClassyShark verrät, was sich im APK versteckt
Lesezeit: 8 Min.
Von
  • Tam Hanna
Inhaltsverzeichnis

ClassyShark entstand aus der Frustration heraus, an sich einfach zu lösende Probleme im Code nicht finden zu können. Laut Farber geht es hier um die folgenden vier Aufgabengebiete:

  • Obfuscation
  • Dependencies
  • MultiDex
  • Native Code

Alle vier Problemgattungen lassen sich in der IDE nur schwer nachvollziehen. Arbeitet man mit dem Endergebnis, ist die Situation wesentlich einfacher – leider gab es bisher kein Werkzeug, das auf die Analyse von Android-Kompilaten spezialisiert war.

ClassyShark ist eine komplett in Java vorliegende Applikation. Wer unter Ubuntu 14.04 arbeitet, besucht die Download-Webseite und lädt die aktuellste Version herunter (der Artikel basiert auf einem Pre-Release der Version 6.2). Nach dem Herunterladen ist die .jar-Datei als ausführbar zu kennzeichnen:

tamhan@tamhan-elitebook:~/Downloads$ chmod +x ClassyShark.jar 
tamhan@tamhan-elitebook:~/Downloads$ ./ClassyShark.jar

ClassyShark ist ein komplett portables Produkt, das auch unter anderen Betriebssystemen funktioniert. Mit Windows und OS X arbeitende Entwickler führen die .jar-Datei wie jedes beliebige andere Programm aus.

ClassyShark bearbeitet sowohl .dex- als auch .apk-Dateien: Die folgenden Schritte basieren auf einer APK-Datei mit einer kostenlosen Version von SoftMaker Office. Nach Klick auf das Öffnen-Symbol wählt man das File in der Common-Dialog-Box aus, um den Ladeprozess anzustoßen.

Nach dem Laden der Datei präsentiert ClassyShark zwei Ansichten: Abbildung 1 zeigt die für die Analyse des Programminhalts vorgesehene Baumansicht, während Abbildung 2 das interaktive Tortendiagramm veranschaulicht. Doppelklicks auf Tortenteile zeigen ihre Inhalte in vergrößerter Darstellung.

Der Baum verrät mehr über den Aufbau der App ... (Abb. 1)

... während die Torte beim Jagen von Methoden-Slot-Fressern hilft (Abb. 2).

Neben dem Tortendiagramm findet sich eine spezielle Form des Klassenbaumes, die die Inhalte der APK-Datei anhand des Method Count sortiert. Wer nach einem bestimmten Teil des Programms sucht, muss hier auf die kontextsensitive Suche setzen: Durch Anklicken des Baums und nach Eingabe des Namens der gesuchten Klasse lässt sich die Anzeige einschränken.

Mehr Infos

Tortenbäcker

Das in ClassyShark verwendete Tortendiagramm isteine Eigenentwicklung: Wer ein ähnliches Diagramm in seinen Produkten benötigt, sollte den Quellcode studieren.

Das Anklicken einer .dex-Datei liefert einen Überblick über die Anzahl der darin enthaltenen Elemente: Besonders wichtig ist die Anzahl der Methoden, deren Überschreiten die Nutzung von MultiDex voraussetzt. ClassyShark rechnet dabei wie die JVM von Android: Im Rahmen von Kompilierung und Optimierung können sich die von der IDE berechneten Method Counts um mehr als 25 Prozent ändern.

Klassen lassen sich in der Baumansicht markieren: Der Lohn der Mühen ist eine detaillierte Disassemblage, die Methodenkörper, Felder, Konstruktoren und die Vererbungshierarchie in Form einer "reduzierten Codedatei" zeigt.