CONAN
Automatically detecting CONnectivity issues in ANdroid
Automatically detecting CONnectivity issues in ANdroid
CONAN is a static analysis tool built on top of Android Lint and aimed at identifying connectivity issues in Android apps. CONAN is able to detect these issues for apps that use the libraries described here. The list of connectivity issues that CONAN supports has been defined based on: (i) official resources for Android developers (i.e., Google developer guidelines); (ii) library-specific documentation; and (iii) research articles on this topic.
Besides ensuring that an app meets its functional requirements, it is also important to guarantee its quality (e.g., the absence of bugs). Therefore, the Android SDK provides a tool named Android Lint that it is able to identify code quality issues via static analysis of the app’s code. Android Lint is capable of identifying over 400 issue types corresponding to a variety of quality attributes such as accessibility, correctness, internationalization, performance, security, and usability. Android Lint follows the open-closed principle, allowing to add custom rules that can detect quality issues of interest.
Android Lint supports the official programming languages used in Android, i.e., Kotlin and Java. While Java has been historically the official programming language for creating Android apps, Kotlin is currently the recommended language for native Android apps. By exploiting an universal abstract syntax tree (UAST), Android Lint can analyze source code written both in Java and Kotlin, since both of them are represented using the UAST while running the static analysis. Thus, it is sufficient to write the detection rule for a specific quality issue and Lint provides support for both languages. Additionally, the Android Lint is also IDE-independent, meaning that it can be run through the command line either as a standalone tool or by employing the Gradle wrapper present in Gradle-based Android projects. Given these characteristics, we integrated the detection of connectivity issues in Android Lint.