  Despite being one of the largest and most popular projects, the official
Android framework has only provided test cases for less than 30% of its APIs.
Such a poor test case coverage rate has led to many compatibility issues that
can cause apps to crash at runtime on specific Android devices, resulting in
poor user experiences for both apps and the Android ecosystem. To mitigate this
impact, various approaches have been proposed to automatically detect such
compatibility issues. Unfortunately, these approaches have only focused on
detecting signature-induced compatibility issues (i.e., a certain API does not
exist in certain Android versions), leaving other equally important types of
compatibility issues unresolved. In this work, we propose a novel prototype
tool, JUnitTestGen, to fill this gap by mining existing Android API usage to
generate unit test cases. After locating Android API usage in given real-world
Android apps, JUnitTestGen performs inter-procedural backward data-flow
analysis to generate a minimal executable code snippet (i.e., test case).
Experimental results on thousands of real-world Android apps show that
JUnitTestGen is effective in generating valid unit test cases for Android APIs.
We show that these generated test cases are indeed helpful for pinpointing
compatibility issues, including ones involving semantic code changes.
