Instrumentation von Android Anwendungen mit ExplorViz Jan Witzany 28. September 2016 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 1 / 19
Gliederung 1. Motivation 2. Ziele 3. Grundlagen 4. Entwurf 5. Implementierung 6. Evaluation 7. Ausblick Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 2 / 19
Motivation Monitoring Android Motivation Android Marktanteil: >85% Viele Applikationen Mangelhafte o. fehlende Dokumentation Programmiersprache: Java 2,000 1,500 1,000 500 2012 2013 2014 2015 2016 Abbildung: Anzahl von Apps im Play Store https://www.statista.com/statistics/266210/ Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 3 / 19
Ziele Ziele Instrumentierung von Android Anwendungen Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 4 / 19
Ziele Ziele Instrumentierung von Android Anwendungen Sourcecode Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 4 / 19
Ziele Ziele Instrumentierung von Android Anwendungen Sourcecode APK Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 4 / 19
Ziele Ziele Instrumentierung von Android Anwendungen Sourcecode APK Monitoring mit ExplorViz Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 4 / 19
Ziele Ziele Instrumentierung von Android Anwendungen Sourcecode APK Monitoring mit ExplorViz Android Apps in Java kein JavaScript/HTML kein C/C++ Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 4 / 19
Grundlagen ExplorViz Grundlagen Live Trace Visualisierung von Programmen Packages und Klassen in einer 3D-Softwarestadtmetapher Java Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 5 / 19
Grundlagen ExplorViz II Grundlagen Abbildung: Live Trace Visualization for System and Program Comprehension in Large Software Landscapes, Fittkau, F. (2015) Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 6 / 19
Grundlagen ExplorViz III Grundlagen Abbildung: Live Trace Visualization for System and Program Comprehension in Large Software Landscapes, Fittkau, F. (2015) Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 7 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Dalvik VM/ART Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Dalvik VM/ART Anroid Versionen Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Dalvik VM/ART Anroid Versionen Berechtigungen Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Dalvik VM/ART Anroid Versionen Berechtigungen kein Netzwerkverbindung im Main Thread Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Android Grundlagen Java als Programmiersprache Dalvik VM/ART Anroid Versionen Berechtigungen kein Netzwerkverbindung im Main Thread ProGuard Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 8 / 19
Grundlagen Aspektorientierte Programmierung Grundlagen @Aspect public class Aspect { @Pointcut ( " execution ( * * (.. ) &&! w i t h i n ( e x p l o r v i z. * * ) " ) public void methodexecution ( ) { } @Around ( " p o i n t c u t ( ) " ) public Object aroundadvice ( ProceedingJoinPoint jp ) throws Throwable { / / code before execution of method jp. proceed ( ) } } / / code a f t e r execution of method Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz 28. September 2016 9 / 19
Entwurf Instrumentierung Entwurf Build-Prozess Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 10 / 19
Entwurf ExplorViz Entwurf Android Flag Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 11 / 19
Entwurf ExplorViz Entwurf Android Flag TCP im separaten Thread Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 11 / 19
Entwurf ExplorViz Entwurf Android Flag TCP im separaten Thread Überprüfen der Module auf Kompatibilität Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 11 / 19
Implementierung Instrumentierung Implementierung APK: jadx, APK-Tool Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 12 / 19
Implementierung Instrumentierung Implementierung APK: jadx, APK-Tool Post-Compile-Weaving Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 12 / 19
Implementierung Instrumentierung Implementierung APK: jadx, APK-Tool Post-Compile-Weaving Gradle-Plugin für AspectJ Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 12 / 19
Implementierung ExplorViz: Aspekt Implementierung Length Id ObjectId Classname Implemented Interface Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 13 / 19
Implementierung ExplorViz: Aspekt Implementierung Length Id ObjectId Classname Implemented Interface dynamische Pointcuts Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 13 / 19
Implementierung ExplorViz: System-Monitoring Implementierung Aktueller Ansatz nicht in Android möglich Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 14 / 19
Implementierung ExplorViz: System-Monitoring Implementierung Aktueller Ansatz nicht in Android möglich CPU-Auslastung: /proc/stat Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 14 / 19
Implementierung ExplorViz: BuildProzess Implementierung Java Version 1.7 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 15 / 19
Implementierung ExplorViz: BuildProzess Implementierung Java Version 1.7 AspectJ Compiler Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 15 / 19
Implementierung ExplorViz: BuildProzess Implementierung Java Version 1.7 AspectJ Compiler Entfernen nicht kompatibler Programmbibliotheken Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 15 / 19
Evaluation Live Demo Evaluation "Babsi", 2013 Applikation zur Aufnahme von Patientendaten API Level 19 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 16 / 19
Ausblick Ausblick Erweiterung für dynamische Pointcuts Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 17 / 19
Ausblick Ausblick Erweiterung für dynamische Pointcuts Optimierung für APK-Instrumentierung Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 17 / 19
Ausblick Ausblick Erweiterung für dynamische Pointcuts Optimierung für APK-Instrumentierung Performance von Datenbankoperationen Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 17 / 19
Ausblick Ausblick Erweiterung für dynamische Pointcuts Optimierung für APK-Instrumentierung Performance von Datenbankoperationen Anpassung an zukünftige Android Versionen Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 17 / 19
Zusammenfassung Fazit Android Instrumentierung Sourcecode: PCW mit AspectJ APK: Dekompilieren ExplorViz Keine Netzwerkkommunikation im Main-Thread Anpassen des Build-Skriptes Anpassen des System-Monitorings Dynamische Pointcuts Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 18 / 19
Referenzen https://www.explorviz.net/, 27.09.2016 F. Fittkau, Live Trace Visualization for System and Program Comprehension in Large Software Landscapes (Doktorarbeit/PhD), Faculty of Engineering, Kiel University, Kiel,(2015). https://github.com/hujiangtechnology/ gradle_plugin_android_aspectjx, 27.09.2016 https://gradle.org/, 27.09.2016 Kiczales, Gregor, et al. Aspect-oriented programming. European conference on object-oriented programming. Springer Berlin Heidelberg, 1997. https://github.com/skylot/jadx, 27.09.2016 Jan Witzany Instrumentation von Android Anwendungen mit ExplorViz28. September 2016 19 / 19