Android Build Dependency Analysis

INTRODUCTION While normal source code (also as known as production code) implement the behavior of a software, its build system (including build tools and build code such as makefiles) derives the executable software from its production source code. In development of large software systems, the complexity of source code often make the build system also complex, and the building process can be time-consuming (in some cases over one hour) even using a high-performance and multi-core computer. This is absolutely not acceptable in large development projects with a high number of code revisions and builds per day. Moreover, the study of McIntosh et al. [7] shows that the build code accounts actually changes in a comparable frequency along the evolution of source code. Among these changes, even a subtle error in the build code may cause serious defects in the built software or even build failures. Therefore, McIntosh claimed that source code development and testing are significantly influenced by build maintenance although build code usually accounts for a small proportion of a software project. In order to maintain and optimize the build system, a critical step is to extract and understand the build dependency structure in the build process. Theoretically, the build dependency structure contains two dimensions as illustrated in Fig. 1. On the one hand, the root build command triggers a flow of build actions that can further run atomic build jobs (e.g., compiling and linking). These build actions and jobs are invoked and executed in a tree structure (vertical in Fig. 1). On the other hand, the build jobs with different build tools indicate dependencies between input build artefacts and output build artefacts, which further constitute a dependency graph (horizontal in Fig. 1). In the recent years, the Android operation system has been widely used in both mobile consumer electronics as well as other industrial devices (e.g., in automotive and medical care). However, the Android code complexity has been increasing along its evolution history, which makes the building process more and more time-consuming [8] and sometimes also errorprone during development and maintenance. Although there was some endeavor in build dependency extraction and optimization [1][4], a generic and automated build analysis approach with tool support is still lacking. In this paper, we provide the following contributions: • Investigation of the source code and the build system of the Android operation system (i.e., Android 5 and 6). • An automated approach to extracting and visualizing the build dependency structure based on monitoring the build process, and then comparing the extracted build dependencies of one system with that of another system. • A case study of the build dependency analysis on both the Android 5 and Android 6 respectively as well as their comparison. This paper is presented in the following structure. Section II presents the example Android system and its characteristics. Section III introduces the build dependency analysis approach and its analysis results on the Android system. While Section IV discusses related work, Section V presents conclusions and future work at the end.

(vertical in Fig. 1). On the other hand, the build jobs with different build tools indicate dependencies between input build artefacts and output build artefacts, which further constitute a dependency graph (horizontal in Fig. 1). In the recent years, the Android operation system has been widely used in both mobile consumer electronics as well as other industrial devices (e.g., in automotive and medical care). However, the Android code complexity has been increasing along its evolution history, which makes the building process more and more time-consuming [8] and sometimes also errorprone during development and maintenance. Although there was some endeavor in build dependency extraction and optimization [1][4], a generic and automated build analysis approach with tool support is still lacking. In this paper, we provide the following contributions: • Investigation of the source code and the build system of the Android operation system (i.e., Android 5 and 6). • An automated approach to extracting and visualizing the build dependency structure based on monitoring the build process, and then comparing the extracted build dependencies of one system with that of another system. • A case study of the build dependency analysis on both the Android 5 and Android 6 respectively as well as their comparison. This paper is presented in the following structure. Section II presents the example Android system and its characteristics. Section III introduces the build dependency analysis approach and its analysis results on the Android system. While Section IV discusses related work, Section V presents conclusions and future work at the end.