一句话:提出 StoryDroid,通过静态分析抽取 Activity 转移图并渲染 UI 页面,自动为 Android 应用生成可视化故事板。
移动应用开发前,团队往往需要审阅大量同类应用以降低市场风险并获取灵感,但由产品经理、UI/UX 设计师与开发者分别手动探索成百上千个应用效率低下,短时间内难以完整覆盖其全部功能。受电影制作中故事板概念的启发,作者提出 StoryDroid 系统,自动为 Android 应用生成故事板以辅助不同角色高效审阅应用。具体而言,StoryDroid 抽取应用的 Activity 转移图,并借助静态分析技术渲染 UI 页面,从而以渲染出的页面可视化整个故事板;同时向用户提供 UI 页面与对应实现代码(布局代码、Activity 代码与方法层级)之间的映射关系。实验结果表明 StoryDroid 有效且确实有助于应用开发,其输出还可支持 UI 设计与布局代码推荐等潜在应用。
Mobile apps are now ubiquitous. Before developing a new app, the development team usually endeavors painstaking efforts to review many existing apps with similar purposes. The review process is crucial in the sense that it reduces market risks and provides inspiration for app development. However, manual exploration of hundreds of existing apps by different roles (e.g., product manager, UI/UX designer, developer) in a development team can be ineffective. For example, it is difficult to completely explore all the functionalities of the app in a short period of time. Inspired by the conception of storyboard in movie production, we propose a system, StoryDroid, to automatically generate the storyboard for Android apps, and assist different roles to review apps efficiently. Specifically, StoryDroid extracts the activity transition graph and leverages static analysis techniques to render UI pages to visualize the storyboard with the rendered pages. The mapping relations between UI pages and the corresponding implementation code (e.g., layout code, activity code, and method hierarchy) are also provided to users. Our comprehensive experiments unveil that StoryDroid is effective and indeed useful to assist app development. The outputs of StoryDroid enable several potential applications, such as the recommendation of UI design and layout code.
DOI 原文 · arXiv · PDF(开放获取) · DBLP
@inproceedings{ChenFCSLLX19,
title = {StoryDroid: Automated Generation of Storyboard for Android Apps},
author = {Sen Chen and Lingling Fan and Chunyang Chen and Ting Su and Wenhe Li and Yang Liu and Lihua Xu},
booktitle = {ICSE},
year = {2019},
doi = {10.1109/icse.2019.00070}
}