Mining Energy-Greedy API Usage Patterns in Android Apps: an Empirical Study - MSR 2014 Online Appendix
This web page is a companion to our MSR 2014 paper entitled "Mining Energy-Greedy API Usage Patterns in Android Apps: an Empirical Study".
1. Data
Android apps
The list is available here in html version or as a CSV file
Name | Id | Category | Version |
Wifi Radar | girsas.wifiradar | TOOLS | 1.06 |
AndRecorder Free | com.andrconstruction.andrecord | MUSIC_AND_AUDIO | 3 |
Livo Recorder Lite | com.mp1.livolite | MEDIA_AND_VIDEO | 3.7.0.a |
news|swipe | com.segvic.news_swipe | NEWS_AND_MAGAZINES | 1.0.0 |
SimpleNews | com.prss.simplenews | NEWS_AND_MAGAZINES | 1.4 |
Android Music Player | com.jrtstudio.music | MUSIC_AND_AUDIO | 4.0.4b3 |
AudioPlayer | com.bytemystery.audioplayer | MUSIC_AND_AUDIO | 1.2 |
Meridian Media Player Revolute | org.iii.romulus.meridian | MEDIA_AND_VIDEO | 2.4.5 |
10,000 Quotes DB (FREE!) | com.hmobile.quotesmegacollection | BOOKS_AND_REFERENCE | 3.0.4 |
Inspiring Quotes | com.xstudio.inspiringquotes | LIFESTYLE | 1.2 |
25000 Best Quotes | com.puissantapps.quotesapp.free | ENTERTAINMENT | 1.0.7 |
Anime Radio Online | free.animeradioonline.gutisoft | MUSIC_AND_AUDIO | 1.06 |
Classical Music Radio Lite | com.rslclasslite | MUSIC_AND_AUDIO | 1.0.3 |
Write Now Notepad | com.aerodroid.writenow | PRODUCTIVITY | 1.1.5 |
Better Notepad | org.strive.notes | BUSINESS | 0.0.5 |
Droid Notepad | com.williamkingdom.droidnotepad | PRODUCTIVITY | 1.11 |
Battery Info Always | jp.dip.sys1.android.battery | TOOLS | 1.2.0 |
Battery HD | ch.smalltech.battery.free | TOOLS | 1.16 |
Battery Info | com.zgame.batteryinfo | TOOLS | 1.6 |
Simple Weather | com.netthreads.android.weather | NEWS_AND_MAGAZINES | 1.1.3 |
Dr.Web Antivirus Light | com.drweb | TOOLS | Varies with device |
Android Antivirus | com.lab4apps.antivirus | TOOLS | 2.0.1 |
Antivirus Free | com.antivirus | COMMUNICATION | Varies with device |
Better Browser | com.browser.sogood.ui | TOOLS | 2.3 |
Opera Mini web browser | com.opera.mini.android | COMMUNICATION | 7.5.3 |
Easy Birthday Reminders | com.tencentapps.bdays | TOOLS | 1.2.1 |
gReminders | com.diegoyarza.greminders | TOOLS | 0.9.7 |
Droid Wifi Analyzer | com.kastorsoft.wifidroid | TOOLS | 1.3 |
Battery Drainer | com.batterydrainer | TOOLS | 1.4.0 |
Icey Slot | com.jbiz.iceyslotz | CARDS | 2.9 |
Activity Express Task Manager | com.sayhello2theworld.te | TOOLS | 1.22 |
Advanced Task Manager | mobi.infolife.taskmanager | PRODUCTIVITY | 2.1.2 |
5001 Amazing Facts Free | com.ximad.wff_lite | BOOKS_AND_REFERENCE | 3.2.0 |
Oxford AZ of English Usage | com.mobisystems.msdict.embedded.wireless.oxford.azenglishusage | BOOKS_AND_REFERENCE | 4.3.059 |
Botanica | me.botanica | BOOKS_AND_REFERENCE | 1 |
Sleep Sound Aid | com.arcdroid.sleep | HEALTH_AND_FITNESS | 20121007 |
Anti Mosquito Sonic Repellent | com.zodinplex.antimosquito | HEALTH_AND_FITNESS | |
Anti dog mosquito whistle | mz.anti.dog.cat.mosquito.insect.repellent.whistle | TOOLS | 1.3 |
Punjab Radio | com.leadapps.android.radio.punjabradio | MEDIA_AND_VIDEO | 1.0.4 |
Galaxy Torch | com.swijaya.galaxytorch | TOOLS | 1.4 |
World Travel Guide by Triposo | com.triposo.droidguide.world | TRAVEL_AND_LOCAL | 2.1 |
Rome | hu.pocketguide.bundle.Rome_lite | TRAVEL_AND_LOCAL | 10-Jul-13 |
Video Poker | com.sg.js.VidPoker | CARDS | 1.2.1 |
8,500+ Drink Recipes | com.webworks.drinkscocktails | ENTERTAINMENT | 1.0.6 |
MasterCard ATM Hunter | com.orbiscom.ATMHunter | FINANCE | 1.4 |
AnEq Equalizer Free | de.ebbert.audioeq.free | MUSIC_AND_AUDIO | 1.0.9 |
aTimer | com.r4ph4.timer | TOOLS | 1.3 |
Textgram | codeadore.textgram | PRODUCTIVITY | 2.3.15 |
Bubble blast 2 | com.magmamobile.game.BubbleBlast2 | BRAIN | 1.0.34 |
Despicable me (minion rush) | com.gameloft.android.ANMP.GloftDMHM | CASUAL | 1.1.0 |
Star Wars Angry birds | com.rovio.angrybirdsstarwars.ads.iap | ARCADE | 1.3.0 |
Map quest | com.mapquest.android.ace | TRAVEL_AND_LOCAL | 1.8.1 |
Sniper shooter | com.fungamesforfree.snipershooter.free | ARCADE | 1.6.0 |
Arcane legends | sts.al | ARCADE | 1.0.7.0 |
TED | com.ted.android | EDUCATION | 2.0.1 |
Scenarios and Scripts:
The scenarios we defined for testing the apps are here, and the corresponding monkey-player scripts can be downloaded here. For more
details about how to used monkey-recorder and monkey-player for Android apps visit this link
2. Patterns Identification

The format of the files and the way to execute each one of the programs is detailed as in the following. All the files have a header. Also we considered the methods in the execution traces at the first two nesting levels.
Files and formats
- Aligned traces (.call): Each line is for an API call extracted from the execution traces. The call are ordered by entry time and then by thread id. The format is <method qualified name>,<thread id>,<entry time(usecs)>,<exit time(usecs)>,< energy(J)>. A zip file containing the aligned traces for each app execution can be downloaded here
- Patterns: Each line is for a sequence of API calls with a specific size. The format is <APIs sequence>,<# instances of the sequence>,<average (energy consumption)>,<median (energy consumption)>,<max (energy consumption)>,<min (energy consumption)>. A zip file containing sequences with length 1, 2, and 3 can be downloaded here
- Signatures (.sig): Each file represents a class in an application, and each line in a file is the fingerprint (More details on the paper) of each method declared in the class. The file format is <method qualified name>,< method fingerprint> *
- Patterns location (.loc): Each file contains the links from the patterns to the source code. The file format is the following: <pattern>,<app_path_folder>,<class_qualified_name>,<method_name>*
* We do not provide those files because the apps are not open source.
Programs
- PatternsIdentifier.jar: PatternsLocator.jar: A zip containing the jar and the libs can be downloaded here. The command line
for executing the program is:
java -Xmx20G -jar PatternsIdentifier.jar <path_to_aligned_traces_folder> <initial_length> <final_length>
- SignaturesGenerator.jar: It requires a set if libs for generating the AST from methods. A zip containing the jar and the libs can be downloaded here. The command line
for executing the program is:
java -Xmx20G -cp SignaturesGenerator.jar:<path_to_libs_folder>/* edu.wm.cs.semeru.apicex_fprint.Main <path_to_folder_with_apps_source_code> <path_to_libs> <output_folder>
- PatternsLocator.jar: A zip containing the jar and the libs can be downloaded here. The command line
for executing the program is:
java -Xmx20G -jar PatternsLocator.jar <path_to_patterns_folder> <path_to_fingerprints_folder> <output_folder> 1
*We used the -Xmx20G argument to avoid heap-memory exceptions.
3. Results
- RQ1-Which are the most energy-greedy Android API methods? Individual API calls and categorization according to the grounded theory process: CSV
- RQ2-Which sequences of Android API calls are the most energy-greedy? Patterns with length 2 and 3, and categorization according to the grounded theory process: CSV
4. Interesting patterns
1. Usage example of the pattern <Activity.setContentView(int); Activity.findViewById(int); View.setVisibility(int)> in a Tools app.
2. Example of Activity.findViewById(int) misuse in a birthday reminder app.
3. Multiple uses of SQLiteDatabase.execSQL(String) in an Education app.
4. Usage example of the pattern <SQLiteOpenHelper.getWritableDatabase(); SQLiteOpenHelper.getReadableDatabase()> in a Productivity app.
5. Usage example of <ConnectivityManager.getNetworkInfo(int); ConnectivityManager.getNetworkInfo(int);NetworkInfo.isConnected()> in a News and Magazines app.
6.Usage example of the pattern <ProgressBar.setProgress(int); ProgressBar.setProgress(int)> in a Casual app.
7. Usage example of the pattern <Toast.makeText(Context,CharSequence,int); Toast.show()> in a web browser.
5. Additional tools
- Android SDK: contains the Activity Manager Profiler, Android Debugger Bridge, and dmtracedump tools
- Monsoon Power monitor: for measuring energy consumption of battery-based devices. To disable the USB charging in the Nexus 4 during the energy measurement we modified the following file /sys/module/pm8921_charger/parameters/disabled, which is on the Nexus 4 filesystem.
- Apktool: required for modifying manifest files in APK files. We followed the procedure explained here
- Money recorder: for recording and executing test scripts
- Dex2jar: for getting jar files from APK files
- Procyon Java decompiler: for getting source code from JAR files
*Authors
- Mario Linares-Vásquez
- The College of William and Mary, VA, USA.
E-mail: mlinarev at cs dot wm dot edu - Gabriele Bavota -
University of Sannio, Benevento, Italy.
Email: gbavota at unisannio dot it - Carlos Bernal-Cárdenas - Universidad Nacional de Colombia, Bogotá, Colombia
Email: cebernalc at unal dot edu dot co - Rocco Oliveto - University of Molise, Pesche (IS), Italy.
E-mail: rocco.oliveto at unimol dot it - Massimiliano Di Penta - University of Sannio, Benevento, Italy.
Email: dipenta at unisannio dot it - Denys Poshyvanyk
- The College of William and Mary.
E-mail: denys at cs dot wm dot edu