To analyze and test Android apps, we need to know program paths, i.e., the control flow of callbacks implemented in the apps. One of the challenges to identify such information is the extensive use of the Android API methods in the apps. These methods can invoke multiple callbacks, and the control flow of these callbacks is context-sensitive in that different callback sequences may be invoked at different API call sites. To address the challenge, in this paper, we design a summary representation for an Android API method that aims to capture the control flow of callbacks in the API methods as well as the conditions under which the callbacks are invoked. We developed a static demand-driven analysis to automatically generate such summaries. To show the usefulness of the summaries, we construct the apps' control flow graphs (CFGs) and apply infeasible path detection on the CFGs. Our experiments show that we are able to generate the API summaries that are compact and reusable, and by replacing the API calls with the summaries we generated, we obtained the apps' CFGs with paths up to 10 callbacks for a set of Android apps under study.


Examples of Summary Graphs
Example of App ICFG


Generated Summary Graphs and Readme

Tools to work with Summary Graphs

Description Link
API and parser for Summary Graphs in XML format lithium-parser-1.0.jar
API Documentation for parser of Summary Graphs
Example of a project using Summary Graphs' API
Tool to build Inter-callback Control Flow Graphs

App ICFG Construction (Readme)

Note: for apps, a2dp.Vol, org.connectbot, org.openintents.filemanager we present a sample of 2000 paths. For complete set of paths contact danilo0 at

App No. Classes No. Methods No. Callbacks Callback Graph Paths (No. of paths) Callback Traces (No. of traces) 41 129 21 com.blippex.app_paths.tsv (4) (11)
net.sourceforge.andsys 29 95 22 net.sourceforge.andsys_paths.tsv (17) (6)
com.darknessmap 28 999 25 com.darknessmap_paths.tsv (30) (6) 37 174 41 (194) (6)
de.onyxbits.remotekeyboard 29 116 44 de.onyxbits.remotekeyboard_paths.tsv (16) (6)
info.staticfree.SuperGenPass 54 208 50 info.staticfree.SuperGenPass_paths.tsv (120) (6) 37 237 65 (27) (6) 84 351 66 aarddict.android_paths.tsv (2598) (6) 90 533 75 (79) (6) 123 611 83 (2000) (6)
a2dp.Vol 113 585 173 a2dp.Vol_paths.tsv (2000) (10)
org.connectbot 199 1046 176 org.connectbot_paths.tsv (2000) (6)
org.openintents.filemanager 159 855 180 org.openintents.filemanager_paths.tsv (2000) (10)
com.evancharlton.mileage 221 1223 241 com.evancharlton.mileage_paths.tsv (71) (6)