  When developing mobile apps, programmers rely heavily on standard API
frameworks and libraries. However, learning and using those APIs is often
challenging due to the fast-changing nature of API frameworks for mobile
systems, the complexity of API usages, the insufficiency of documentation, and
the unavailability of source code examples. In this paper, we propose a novel
approach to learn API usages from bytecode of Android mobile apps. Our core
contributions include: i) ARUS, a graph-based representation of API usage
scenarios; ii) HAPI, a statistical, generative model of API usages; and iii)
three algorithms to extract ARUS from apps' bytecode, to train HAPI based on
method call sequences extracted from ARUS, and to recommend method calls in
code completion engines using the trained HAPI. Our empirical evaluation
suggests that our approach can learn useful API usage models which can provide
recommendations with higher levels of accuracy than the baseline n-gram model.
