  Inter-component communication (ICC) is a widely used mechanism in mobile
apps, which enables message-based control flow transferring and data passing
between Android components. Effective ICC resolution requires precisely
identifying entry points, analyzing data values of ICC fields, modeling related
framework APIs, etc. Due to various control-flow- and data-flow-related
characteristics involved and the lack of oracles for real-world apps, the
comprehensive evaluation of ICC resolution techniques is challenging.
  To fill this gap, we collect multiple-type benchmark suites with 4,104 apps,
covering hand-made apps, open-source, and commercial ones. Considering their
differences, various evaluation metrics, e.g., number count, graph structure,
and reliable oracle based metrics, are adopted on-demand. As the oracle for
real-world apps is unavailable, we design a dynamic analysis approach to
extract the real ICC links triggered during GUI exploration. By auditing the
code implementations, we carefully check the extracted ICCs and confirm 1,680
ones to form a reliable oracle set, in which each ICC is labeled with 25 code
characteristic tags. The evaluation performed on six state-of-the-art ICC
resolution tools shows that 1) the completeness of static ICC resolution
results on real-world apps is not satisfactory, as up to 38%-85% ICCs are
missed by tools; 2) many wrongly reported ICCs are sent from or received by
only a few components and the graph structure information can help the
identification; 3) the efficiency of fundamental tools, like ICC resolution
ones, should be optimized in both engineering and research aspects. By
investigating both the missed and wrongly reported ICCs, we discuss the
strengths of different tools for users and summarize eight common FN/FP
patterns in ICC resolution for tool developers.
