  Android OS is severely fragmented by API updates and device vendors' OS
customization, creating a market condition where vastly different OS versions
coexist. This gives rise to compatibility crash problems where Android apps
crash on certain Android versions but not on others. Although well-known, this
problem is extremely challenging for app developers to overcome due to the
sheer number of Android versions in the market that must be tested. We present
RecoFlow, a framework for enabling app developers to automatically recover an
app from a crash by programming user flows with our API and visual tools.
RecoFlow tracks app feature usage with the user flows on user devices and
recovers an app from a crash by replaying UI actions of the app feature
disrupted by the crash. To prevent recurring compatibility crashes, RecoFlow
executes a previously crashed app in compatibility mode that is enabled by our
novel Android OS virtualization technique. Our evaluation with professional
Android developers shows that our API and tools are easy to use and effective
in recovering from compatibility crashes.
