Integration of static analysis results with ProGuard optimizer for Android applications

Abstract

Στην εποχή της ευρείας χρήσης των κινητών συσκευών, η ανάγκη για ελαφρύτερες και ταχύτερες εφαρμογές εξακολουθεί να υπάρχει, με σκοπό την καλύτερη αξιοποίηση των πόρων του συστήματος. Προκειμένου να επιτευχθεί αυτό, έχουν αναπτυχθεί διάφορα ερ- γαλεία για τη βελτιστοποίηση των εφαρμογών όσο το δυνατόν περισσότερο, μέσω της ανάλυσης προγραμμάτων. Στην περίπτωση των Android εφαρμογών, το κύριο εργαλείο που χρησιμοποιείται είναι ο βελτιστοποιητής ProGuard. Με βάση είτε κάποια προεπιλεγ- μένα αρχεία ρυθμίσεων, είτε κάποια που ορίζονται από τον προγραμματιστή, το ProGuard εκτελεί βελτιστοποιήσεις σε επίπεδο bytecode. Οι προεπιλεγμένες ρυθμίσεις, είναι αρκετά απλές και συντηρητικές, με αποτέλεσμα να χάνονται κάποιες ευκαιρίες για περαιτέρω βελτιστοποιήσεις. Επιπλέον, πολλές εφαρμογές συχνά εμπεριέχουν κώδικα βιβλιοθηκών, ή κάνουν χρήση δυναμικών χαρακτηριστικών της γλώσσας, όπως η ανάκλαση, για τα οποία πιθανώς χρειάζονται περαιτέρω ρυθμίσεις, απο τον προγραμματιστή. Παρουσιάζουμε μια προσπάθεια αυτοματοποίησης της παραγωγής των ρυθμίσεων του ProGuard, χρησιμοποιώντας το Doop: ένα framework στατικής ανάλυσης προγραμμάτων Java. Συμπεριλαμβάνουμε μια πειραματική σύγκριση των διαφόρων ρυθμίσεων που πα- ράγονται από το Doop, έναντι των προτεινόμενων προεπιλεγμένων ρυθμίσεων.In the era of the widespread usage of mobile devices, the requirement for more lightweight and faster applications continues to exist, aiming for better system resources utilization. In order to achieve this, many tools have been developed for optimizing applications as much as possible, with the aid of program analysis. In the case of Android applications, the main tool used is the ProGuard optimizer. Given configuration files, either default or defined by the programmer, ProGuard performs optimizations at the bytecode level. The default configurations are quite simple and conservative, thus leading to missing chances for further optimizations. Moreover, many applications usually come with library code, or use dynamic language features, such as reflection, for which further configuration may be required by the developer. We present an attempt to automate the generation of ProGuard configurations, using Doop framework: a Java static analysis framework. We include an experimental evaluation of the various configurations produced by the Doop framework, against the default suggested configurations

    Similar works