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.
- Tam Hanna
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.
Let's go!
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.
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.
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.