Here you can find the steps needed to replicate our study reliazed in our paper An Empirical Study on Quality of Android Applications written in Kotlin language published on https://link.springer.com/article/10.1007%2Fs10664-019-09727-4.
If you want use this information, please cite this paper:
@Article{GóisMateus2019,
author="G{\'o}is Mateus, Bruno
and Martinez, Matias",
title="An empirical study on quality of Android applications written in Kotlin language",
journal="Empirical Software Engineering",
year="2019",
month="Jun",
day="25",
abstract="During the last years, developers of mobile applications have the possibility to use new paradigms and tools for developing mobile applications. For instance, since 2017, Android developers have the official support to write Android applications using Kotlin language. Kotlin is programming language fully interoperable with Java that combines object-oriented and functional features.",
issn="1573-7616",
doi="10.1007/s10664-019-09727-4",
url="https://doi.org/10.1007/s10664-019-09727-4"
}
- Creation of a dataset of Kotlin applications
- Building our study dataset
- Code evolution of Android applications
- Analyzing the difference between Kotlin and Java applications in terms of presence of code smells
- Detecting changes in the quality evolution trends after introducing Kotlin
As the goal of our experiment is to study the use and quality of Kotlin code in Android applications, we decided to study mobile applications that have at least one version released on 2017 or later. As Kotlin was announced as an official language for Android development in 2017, before that date Android developers did not have support from Google for developing Android applications using Kotlin language. Therefore, we considered that applications whose last versions date from 2016 or earlier could not give us much information about the use of Kotlin language in the Android domain.
Moreover, we need that our dataset of Android applications includes, for each application:
- its source code hosted in a code repository (e.g., GitHub), and
- binary files (apk) of the released versions.
We created our dataset of mobile applications by combining three already defined datasets: F-droid, AndroidTimeMachine, and AndroZoo. To our knowledge those are the three largest publicly available datasets of Android applications that contain applications recently released.
Let us now to introduce each dataset and to explain the reasons of choosing them.
F-droid is a directory of open-source Android applications. All apps listed in this directory are compiled from source and code repositories are publicly linked. In total, F-droid has 1509 applications on 06/04/2018.
F-droid provides all information we need, i.e, access to a code repository and apks of the different released versions of the applications. However, the number of applications 1509 is low compared with other datasets. For this reason, we decided to mine other Android datasets with the goal of including more applications in our study.
The table below shows some of these applications. To see the complete list click here.
App Name | Summary | Source-code Repo |
---|---|---|
1. Aard | Offline dictionary | https://github.com/aarddict/android |
2. A2DP Volume | Manage Bluetooth functions | https://github.com/jroal/a2dpvolume |
3. A Time Tracker | Time Tracker | https://github.com/netmackan/ATimeTracker |
4. A Photo Manager | Manage local photos: Find/Copy/Edit-Exif and show in Gallery or Map. | https://github.com/k3b/androFotoFinder |
5. 34C3 Schedule | Schedule (aka FahrPlan) of the 34C3 | https://github.com/EventFahrplan/EventFahrplan |
6. 33c3 Wifi Setup | Create secure Wifi connection entry for 33c3 | https://github.com/eqvinox/wifisetup |
7. 33c3 SCR | Resolve Schedule conflicts | https://github.com/ligi/SCR |
8. 33C3 Schedule | Schedule (aka FahrPlan) of the 33C3 | https://github.com/ligi/CampFahrplan |
F-droid provides on the main page of each application a link to download its last three versions and a link for another page with some technical information that contains all versions. Our crawler is able to visit both pages for each application and retrieve the link to the apk for every version available.
AndroidTimeMachine is a graph database of Android apps which are both accessible on GitHub and Google.
In total, AndroidTimeMachine has 8431 applications and it is based on publicly-available GitHub mirror available in BigQuery dated on 18th October 2018. Using the Neo4j database is possible to retrieve for each application its source-code repository link and the application's package name. However, this dataset does not provide any apks from its applications. For this reason, we decided to mine the missing apks on AndroZoo dataset.
The table below shows some of these applications. To see the complete visit the official website.
Source-code repo | Package name |
---|---|
1. https://github.com/learn-mobile-16/QuakeBuddy | com.gumgoose.app.quakebuddy |
2. https://github.com/bigeyessolution/FestivalEdesio | com.bigeyessolution.FestivalEdesio |
3. https://github.com/tarek360/PlayPauseDrawable | com.tarek360.playpausedrawable |
4. https://github.com/gwhiteside/abstract-art | net.georgewhiteside.android.abstractart |
5. https://github.com/shaun2029/ClockControl | uk.co.immutablefix.ClockControl |
6. https://github.com/eziosoft/MultiWii_EZ_GUI | com.ezio.multiwii |
7. https://github.com/jakemoritz/Tasking | me.jakemoritz.tasking_new |
8. https://github.com/meghalagrawal/NightSight | meghal.developer.nightsight.project |
9. https://github.com/abbott221/WebsiteAndApp | com.MichaelAbbott.hexagonalgame |
This dataset is available in two different dockers: (i) first, containing the Neo4j database and (ii) second, containing a snapshot of all GitHub repositories in the dataset cloned to a local Gitlab.
AndroZoo is dataset of millions of Android apps collected from various data sources using different web crawlers. The sources from which AndroZoo draws include major market places Google Play, Anzhi, and AppChine, as well as smaller directories mobile, AnGeeks, Slideme, ProAndroid, HiApk, and F-Droid.
In total, AndroZoo has 4390288 applications and 7795372 apks on 16/10/2018. The list of available APKs is regularly updated on the AndroZoo website, along with metadata for each app as, the main package name, the size of the APK, the version, and the market where the app was downloaded from, etc . However, AndroZoo does not provide a link for the source-code repository of an application, even if an application is open-source.
The table below shows some of these applications. Each line corresponds to one apk file
Package name | Version code | Markets | Apk size in bytes |
---|---|---|---|
com.zte.bamachaye | 121 | anzhi | 10386469 |
com.deperu.sitiosarequipa | 10000 | play.google.com | 4300370 |
bmthx.god102409paperi | 6 | appchina | 1044597 |
kr.ac.snjc.library | 3 | play.google.com | 1375862 |
com.rbsoftware.pfm.personalfinancemanager | 48 | play.google.com | 5345848 |
com.indoorway.android.fluctus | 14 | play.google.com | 12798854 |
com.fearless.teengirl | 3 | play.google.com | 4727630 |
com.appautomatic.ankulua.trial | 39 | play.google.com | 16004883 |
com.kbf.app27730661 | 70101 | play.google.com | 1882706 |
Furthermore, the AndroZoo's HTTP API allows to download full and unaltered APKs.
Now, we present the different steps to build the dataset used in this study.
In this work, we are interested in a subset of mobile applications from F-droid, AndroidTimeMachine and AndroZoo: those that contain Kotlin code.
As Kotlin was announced as an official language for Android development in 2017, before that date, Android developers did not have support from Google for developing Android apps using Kotlin language.
Therefore, we consider that apps which the last versions date from 2016 or earlier could not give us much information about the use of Kotlin language in the Android domain. Consequently, the criterion we used for building our dataset of mobile apps is to select every application whose last version was released in 2017 or later.
Using the upload version provided by F-Droid, total number of applications retrieved from F-Droid by the date of June 4th, 2018 that fulfill our selection criterion is 928
The table below shows some of these applications. To see the complete list click here.
App name | Pakcage Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
1.A Photo Manager | de.k3b.android.androFotoFinder | Manage local photos: Find/Copy/Edit-Exif and show in Gallery or Map. | 2018-03-23 | https://github.com/k3b/androFotoFinder |
2.34C3 Schedule | info.metadude.android.congress.schedule | Schedule (aka FahrPlan) of the 34C3 | 2018-01-03 | https://github.com/EventFahrplan/EventFahrplan |
3.1010! Klooni | io.github.lonamiwebs.klooni | libGDX game based on 1010 | 2018-02-06 | https://github.com/LonamiWebs/Klooni1010 |
4.Additional Security Settings | com.davidshewitt.admincontrol | Additional security settings | 2018-03-23 | https://github.com/linux-colonel/AdminControl |
5.AnySoftKeyboard - French Language Pack | com.anysoftkeyboard.languagepack.french | AnySoftKeyboard French Language pack | 2018-03-23 | https://github.com/AnySoftKeyboard/LanguagePack/tree/French |
6.AnySoftKeyboard | com.menny.android.anysoftkeyboard | Alternative keyboard | 2018-03-05 | https://github.com/AnySoftKeyboard/AnySoftKeyboard |
7.AntennaPod | de.danoeh.antennapod | Advanced podcast manager and player | 2018-04-16 | https://github.com/antennapod/AntennaPod |
8.Another RSS | de.digisocken.anotherrss | reader for multiple RSS feeds in a single, searchable list | 2018-05-23 | https://github.com/no-go/AnotherRSS |
However, we retrieved 926 applications, since we could not download apks from two applications (app1 app2), because for these applications F-Droid provides only zip files. Moreover, the total number of versions (i.e., apks) found corresponding to those applications was 13094. We could download 11675 apks (89%). The rest of apks files (11%) were not available.
The version of AndroidTimeMachine presented by its authors contains 8431 applications and it has been executed in October 2017. As their infrastructure is publicly available,dataset and tool, we re-executed it on October 2018 with the goal of including more recent applications.
Once we retrieved the list of applications, as difference of the original work we carried out a new step to keep applications whose code repository that have only one Android manifest file.
We discovered that their technique for linking code repositories of a mobile application with the corresponding Google Play page can fail if the app repository has more than one manifest.
The table below shows the comparison between the numbers found by us resulting of the re-execution of each step and the numbers of the original dataset by Geiger2018:data. In conclusion, we retained 2156 applications from AndroidTimeMachine, all of them fulfill our selection criterion.
Steps | AndroidTimeMachine | |
Original | Updated | |
1. Finding Android Manifest Files | 378610 | 358518 |
2. Extracting package Names | 112153 | 114152 |
3. Discarding repositories with more than one manifest file | - | 49570 |
4. Filtering applications on Google Play | 9478 | 3664 |
5. Matching of Google Play pages to GitHub repositories | 8431 | 3664 |
6. Filtering applications from 2017 or later | - | 2156 |
The table below shows some of these applications that fullfil our criterion. To see the complete list click here.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
1. 10,000 sentences | info.puzz.a10000sentences | 10,000 sentences will help you learn new words in languages you are learning. | Jan 27, 2018 | https://github.com/tkrajina/10000sentences |
2. 10-bit Clock Widget | com.github.ashutoshgngwr.tenbitclockwidget | View your home screen clock in bits. | Oct 22, 2017 | https://github.com/ashutoshgngwr/10-bitClockWidget |
3. 104 Birds Quiz | net.project104.civyshkbirds | Game to identify birds from their picture or their singings | Jun 3, 2017 | https://github.com/civyshk/104birds |
4. 104 RPN Calc | net.project104.civyshkrpncalc | Calc that successfully merges the Reverse Polish Notation and the Infix Notation | Jun 19, 2018 | https://github.com/CIVYSH/rpncalc104k |
5. 106/109ハードウェアキーボード配列変更(+親指Ctrl) | jp.kcm.thumbctrl | 日本語ハードウェアキーボード用に日本語配列を追加. ([半/全]と[ESC]入替、[変換]/[無変換]→[Ctrl]、[Caps]→[半/全]も追加されます) | Jun 13, 2018 | https://github.com/shiftrot/ThumbCtrl |
6. 10Sel | com.app.android.tensel | peer to peer mobile commerce. Sell and request stuff with peers around you | Sep 7, 2017 | https://github.com/Nguedia-Adele/J_Trok |
7. 15 Puzzle Game - Photo Edition | de.fintasys.the_15_puzzle_game | Use your photos from Instagram or from your device to play the 15-Puzzle-Game! | Mar 30, 2017 | https://github.com/Fintasys/15-Puzzle-Game |
8. 2048 (Ads Free) | com.tpcstld.twozerogame | Port of Gabriele Cirulli's 2048 to Android.\n\n+No Ads!\n+No permissions! | Jun 10, 2018 | https://github.com/BuddyBuild/2048-Android |
9. 5 Calls | org.a5calls.android.a5calls | Make your voice heard: Spend 5 minutes, make 5 calls. | Jul 18, 2018 | https://github.com/bryansills/5calls-android |
10. 5 Pin Bowling Companion | ca.josephroque.bowlingcompanion | Track 5 pin bowling scores frame-by-frame, along with a medley of statistics! | Sep 29, 2018 | https://github.com/sunndog/bowling-companion |
The table below shows the false/positive avoided by our incluision of a new step, step 3.
Repo URL | Package | App on Google Play |
---|---|---|
FinalHerramientas-2014-2 | com.google.android.apps.googlevoice | Google Voice |
FinalHerramientas-2014-2 | com.google.android.gm | Gmail |
MIUI-XML-6.0-Indonesian | com.google.android.music | Google Music |
react-native-navigation | com.airbnb.android | Airbnb |
foursquared.eclair | com.joelapenna.foursquared | Foursquare |
Using the packages names of each app, we queried the csv file provided by AndroZoo to identify which applications we could download the apks. Then, we found 236 applications present on F-Droid as well, remaining 1295 applications to download. Then, we checked manually for each of 1295 applications, its pages on GooglePlay and its source-code link, to avoid applications liked with wrong repositories, including applications not open-source, because this would result on downloading wrong apks. We found and removed 54 applications, including some not open-source apps, as Facebook Mensseger and Twitter. The complete list of apps removed is available here.
The table below shows some of these applications. To see the complete list click here and to see the intersection between the datasets click here.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
1. 10,000 sentences | info.puzz.a10000sentences | 10,000 sentences will help you learn new words in languages you are learning. | Jan 27, 2018 | https://github.com/tkrajina/10000sentences |
2. 104 RPN Calc | net.project104.civyshkrpncalc | Calc that successfully merges the Reverse Polish Notation and the Infix Notation | Jun 19, 2018 | https://github.com/CIVYSH/rpncalc104k |
3. 106/109ハードウェアキーボード配列変更(+親指Ctrl) | jp.kcm.thumbctrl | 日本語ハードウェアキーボード用に日本語配列を追加. ([半/全]と[ESC]入替、[変換]/[無変換]→[Ctrl]、[Caps]→[半/全]も追加されます) | Jun 13, 2018 | https://github.com/shiftrot/ThumbCtrl |
4. 2048 (Ads Free) | com.tpcstld.twozerogame | Port of Gabriele Cirulli's 2048 to Android.\n\n+No Ads!\n+No permissions! | Jun 10, 2018 | https://github.com/BuddyBuild/2048-Android |
5. 5 Calls | org.a5calls.android.a5calls | Make your voice heard: Spend 5 minutes, make 5 calls. | Jul 18, 2018 | https://github.com/bryansills/5calls-android |
6. 5 Pin Bowling Companion | ca.josephroque.bowlingcompanion | Track 5 pin bowling scores frame-by-frame, along with a medley of statistics! | Sep 29, 2018 | https://github.com/sunndog/bowling-companion |
7. A Mohammed Khaleel’s Invitation | com.slbdev.demo | A Mohammed Khaleel’s Invitation | Aug 9, 2018 | https://github.com/alexrainman/CarouselView |
8. A.scribe | com.laaidback.ascribe | open-source, minimalist note-taking app | Aug 3, 2017 | https://github.com/Laaidback/A.scribe |
Our final dataset, named FAMAZOA - F-droid AndroidtimeMachine AndroZoo Open-source Applications) corresponds to:
F-droid ∪ ( AndroZoo ∩ AndroidTimeMachine)
In total, our dataset should have 2169 (928 + 1241) applications, but we could not download any apks from two applications, then our final dataset has 2167 apps and 19838 apks.
The table below shows some of these applications. To see the complete list click here.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
1. 10,000 sentences | info.puzz.a10000sentences | 10,000 sentences will help you learn new words in languages you are learning. | Jan 27, 2018 | https://github.com/tkrajina/10000sentences |
2. 104 RPN Calc | net.project104.civyshkrpncalc | Calc that successfully merges the Reverse Polish Notation and the Infix Notation | Jun 19, 2018 | https://github.com/CIVYSH/rpncalc104k |
3. 106/109ハードウェアキーボード配列変更(+親指Ctrl) | jp.kcm.thumbctrl | 日本語ハードウェアキーボード用に日本語配列を追加. ([半/全]と[ESC]入替、[変換]/[無変換]→[Ctrl]、[Caps]→[半/全]も追加されます) | Jun 13, 2018 | https://github.com/shiftrot/ThumbCtrl |
4. 2048 (Ads Free) | com.tpcstld.twozerogame | Port of Gabriele Cirulli's 2048 to Android.\n\n+No Ads!\n+No permissions! | Jun 10, 2018 | https://github.com/BuddyBuild/2048-Android |
5. 5 Calls | org.a5calls.android.a5calls | Make your voice heard: Spend 5 minutes, make 5 calls. | Jul 18, 2018 | https://github.com/bryansills/5calls-android |
6. 5 Pin Bowling Companion | ca.josephroque.bowlingcompanion | Track 5 pin bowling scores frame-by-frame, along with a medley of statistics! | Sep 29, 2018 | https://github.com/sunndog/bowling-companion |
7. A.scribe | com.laaidback.ascribe | open-source, minimalist note-taking app | Aug 3, 2017 | https://github.com/Laaidback/A.scribe |
8. AES Crypto | com.evgenii.aescrypto | Encrypt your message with one tap. | Sep 21, 2018 | https://github.com/evgenyneu/aes-crypto-android |
9. APC UPS Countdown | net.formula97.android.apcupscountdown | APC by Schneider ElectricのUPSで表示される時間情報の計算を補助する | Aug 10, 2018 | https://github.com/f97one/ApcUpsCountdown |
10. APK Downloader | ca.barraco.carlo.apkdownloader | Save apps installed on your device to an APK file in your Download folder. | Jun 28, 2018 | https://github.com/cbarox/APK-Downloader |
The figure below shows the distribution of apks (released versions) per applications. From F-droid we downloaded in median 6 apks, and from AndroidZoo we downloaded in media 3 apk per application.
We build a process to classify both applications and apks retrieved in two categories of applications: (1) written (partially or totally) with Kotlin, and (2) written with Java (not include any line of Kotlin code).
The Figure below shows the process for classifying applications between Kotlin and Java based, which has 3 main steps.
We first applied an heuristics H_apk, that consists of looking for a folder called kotlin inside the apk file. Having such folder is an evidence of having Kotlin code inside the application.
To automatize this task, a tool named apkanalyzer included in the Android SDK. Using this heuristic, we first classified each version (apk) of an application.Then, if at least one apk of an application is classified as Kotlin, the heuristic classified the application as Kotlin. Otherwise, it classifies as Java.
The H_apk provides a cheap and fast approach to get an initial guess about the presence of Kotlin code.
At the same time, we applied our second heuristic H_gh, which relies on the GitHub API: for each application hosted on GitHub, we queried the GitHub API to retrieve the amount of code (expressed in bytes) from the most recent version (i.e., the HEAD) grouped by programming language. We classified the app as `Kotlin' if Kotlin language is present in the response of the API. The input of this heuristic is a URL to a GitHub repository.
Finally, once we retrieved a set of candidate Kotlin applications using H_apk and H_gh, i.e, H_apk ∪ H_gh, we checked manually the applications repositories to avoid duplicated repositories, i.e, repositories that contain more than one application, we applied the heuristic H_sc over them, to assert the presence of Kotlin code and to measure how much Kotlin an application has. The heuristic H_sc inspected every commit of the source code repository of an application.An application was classified as Kotlin if the heuristic found at least one commit that had Kotlin code, and as `Pure Kotlin' if all commits contained only Kotlin code.
The Table below summarizes the classification of applications done using the methodology presented before.
Information | Total | Kotlin | Java |
---|---|---|---|
Unique apps | 2167 | 244 | 1923 |
Versions | 19838 | 1590 | 18248 |
FAMAZOA has 2167 applications using our heuristics we classified 244 (11.26%) as Kotlin applications. Consequently, the remaining applications, 1923 (88.74%), were classified as Java.
The figure below shows these percentages.
Considering the number of versions (apk), we found
1590 apks (8.01%) with Kotlin code and
18248 (91.28%) without Kotlin code.
Now, let us to explain how we arrived to detect 244 Kotlin applications from FAMAZOA.
First, the heuristic H_apk classified 265 applications as Kotlin. Those applications have, at least, one apk classified as Kotlin. For 76 of them, all apks are classified as Kotlin.
The table below shows some of these applications. To see the complete list click here.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
6. 5 Pin Bowling Companion | ca.josephroque.bowlingcompanion | Track 5 pin bowling scores frame-by-frame, along with a medley of statistics! | Sep 29, 2018 | https://github.com/sunndog/bowling-companion |
9. APC UPS Countdown | net.formula97.android.apcupscountdown | APC by Schneider ElectricのUPSで表示される時間情報の計算を補助する | Aug 10, 2018 | https://github.com/f97one/ApcUpsCountdown |
14. Accounting Fantozzi | com.eusecom.samfantozzi | Android mobil accounting Fantozzi complete accounting for smartphone and tablet. | Jun 21, 2018 | https://github.com/eurosecom/samfantozzi |
18. Adblock Fast | com.rocketshipapps.adblockfast | Adblock Fast is a free, open-source ad blocker for Samsung Internet 4.0 and up! | May 17, 2017 | https://github.com/rocketshipapps/adblockfast |
45. Ad-Free | ch.abertschi.adfree | AdBlocker for Spotify | 2018-02-16 | https://github.com/abertschi/ad-free |
59. Always On AMOLED - BETA | com.tomer.alwayson | Get an always on display on your device! | May 20, 2018 | https://github.com/rosenpin/AlwaysOnDisplayAmoled |
79. Android Playground | com.esafirm.androidplayground | Android Playground | Jan 3, 2018 | https://github.com/esafirm/android-playground |
85. AnkiEditor for AnkiDroid | com.jkcarino.ankieditor | An advanced note editor plug-in for AnkiDroid | Sep 29, 2018 | https://github.com/jkennethcarino/AnkiEditor |
Then, H_gh classified 234 applications as Kotlin. 193 of them, were also classified as Kotlin by H_apk. Up to here, both heuristics have classified 297 unique applications as Kotlin.
The table below shows some of these applications. To see the complete list click here.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
28. 34C3 Schedule | info.metadude.android.congress.schedule | Schedule (aka FahrPlan) of the 34C3 | 2018-01-03 | https://github.com/EventFahrplan/EventFahrplan |
45. Ad-Free | ch.abertschi.adfree | AdBlocker for Spotify | 2018-02-16 | https://github.com/abertschi/ad-free |
69. And Bible | net.bible.android.activity | Offline Bible reader | 2017-04-13 | https://github.com/mjdenham/and-bible |
79. Android Playground | com.esafirm.androidplayground | Android Playground | Jan 3, 2018 | https://github.com/esafirm/android-playground |
85. AnkiEditor for AnkiDroid | com.jkcarino.ankieditor | An advanced note editor plug-in for AnkiDroid | Sep 29, 2018 | https://github.com/jkennethcarino/AnkiEditor |
119. Apk Analyzer | sk.styk.martin.apkanalyzer | Take a look under the hood of your applications! | Oct 16, 2018 | https://github.com/MartinStyk/AndroidApkAnalyzer |
125. Apolline | science.apolline | Application for air pollution monitoring | May 27, 2018 | https://github.com/Apolline-Lille/apolline-android |
127. App Launcher | com.simplemobiletools.applauncher | A simple holder for your favourite app launchers. | 2018-05-23 | https://github.com/SimpleMobileTools/Simple-App-Launcher |
We found two repositories linked with two apps each. We manually checked these repositories and as consequence we removed two apps. For the apps linked with the repo1, we realized that the authors used different packages names in two different stores, F-Droid and GooglePlay, for the same app. For the apps linked with repo2, we found that one of them is a plugin for the main app and this plugin does not have Kotlin code.
Finally, We tried to apply H_sc on 304 repositories (H_apk ∪ H_gh) but 7 repositories were not available. Then we analyzed 297 repositories and we found 244 repositories that contains Kotlin code. To see the complete list click here. It is important to mentioned that two repositories appear twice.
App name | Package Name | Description | Upload Date | Source-code repo |
---|---|---|---|---|
6. 5 Pin Bowling Companion | ca.josephroque.bowlingcompanion | Track 5 pin bowling scores frame-by-frame, along with a medley of statistics! | Sep 29, 2018 | https://github.com/sunndog/bowling-companion |
9. APC UPS Countdown | net.formula97.android.apcupscountdown | APC by Schneider ElectricのUPSで表示される時間情報の計算を補助する | Aug 10, 2018 | https://github.com/f97one/ApcUpsCountdown |
14. Accounting Fantozzi | com.eusecom.samfantozzi | Android mobil accounting Fantozzi complete accounting for smartphone and tablet. | Jun 21, 2018 | https://github.com/eurosecom/samfantozzi |
18. Adblock Fast | com.rocketshipapps.adblockfast | Adblock Fast is a free, open-source ad blocker for Samsung Internet 4.0 and up! | May 17, 2017 | https://github.com/rocketshipapps/adblockfast |
28. 34C3 Schedule | info.metadude.android.congress.schedule | Schedule (aka FahrPlan) of the 34C3 | 2018-01-03 | https://github.com/EventFahrplan/EventFahrplan |
45. Ad-Free | ch.abertschi.adfree | AdBlocker for Spotify | 2018-02-16 | https://github.com/abertschi/ad-free |
59. Always On AMOLED - BETA | com.tomer.alwayson | Get an always on display on your device! | May 20, 2018 | https://github.com/rosenpin/AlwaysOnDisplayAmoled |
We classified each Kotlin application according to the code evolution trends presented on the following table:
Source-code evolution |
---|
ET 1. Kotlin is the initial language and the amount of Kotlin grows |
ET 2. Kotlin code replaces all Java code |
ET 3. Kotlin code replaces some Java then Java continues growing |
ET 4. Kotlin increase together with Java |
ET 5. Kotlin grows and Java decreases (but never is zero) |
ET 6. Kotlin grows and Java decreases until the Java code is 0 |
ET 7. Kotlin grows and Java remains constant |
ET 8. Kotlin is constant and Java changes |
ET 9. Kotlin and Java remain constant |
ET 10. Kotlin introduced but lately disappears |
ET 11. Java replaces Kotlin code |
ET 12. Other |
The following table shows the results.
Source-code evolution | # Apps | % |
---|---|---|
ET 1. Kotlin is the initial language and the amount of Kotlin grows | 19 | 7.8 |
ET 2. Kotlin code replaces all Java code | 15 | 6.1 |
ET 3. Kotlin code replaces some Java then Java continues growing | 4 | 1.6 |
ET 4. Kotlin increase together with Java | 8 | 3.3 |
ET 5. Kotlin grows and Java decreases (but never is zero) | 52 | 21.3 |
ET 6. Kotlin grows and Java decreases until the Java code is 0 | 48 | 19.7 |
ET 7. Kotlin grows and Java remains constant | 41 | 16.8 |
ET 8. Kotlin is constant and Java changes | 43 | 17.6 |
ET 9. Kotlin and Java remain constant | 7 | 2.9 |
ET 10. Kotlin introduced but lately disappears | 3 | 1.2 |
ET 11. Java replaces Kotlin code | 2 | 0.8 |
ET 12. Other | 2 | 0.8 |
Total of applications | 244 | 100% |
Application | Code evolution Trend | Plot link |
---|---|---|
Abertschi-Ad-Free | ET7 | plot |
Agusyc-Daycounter | ET6 | plot |
Aidea775-Uncmorfi | ET6 | plot |
Akshaychordiya-Gofun-Android | ET7 | plot |
Alessio-B-Zak-Myrivers | ET6 | plot |
Amarjitvs-Notedirector | ET9 | plot |
Anthonycr-Lightning-Browser | ET5 | plot |
Apiote-Bimba | ET7 | plot |
Apoi-Quickbeer-Android | ET5 | plot |
Apolline-Lille-Apolline-Android | ET2 | plot |
Arcao-Geocaching4Locus | ET8 | plot |
Avram-Zandy | ET8 | plot |
Bassph-Bassph-App-Android | ET1 | plot |
Baz8080-Folkets_Android | ET4 | plot |
Bbindreiter-Pushnotificationtester_App | ET5 | plot |
Benalderfer-Hand-And-Foot-Scores | ET6 | plot |
Bijoysingh-Material-Notes-Android-App | ET5 | plot |
Bitfireat-Davdroid | ET6 | plot |
Bitfireat-Icsdroid | ET6 | plot |
Blastrock-Kaqui | ET1 | plot |
Blokadaorg-Blokada | ET7 | plot |
Bnlrnz-Mandelgl | ET7 | plot |
Bottiger-Soundwaves | ET8 | plot |
Bubelov-Coins-Android | ET6 | plot |
Buntata-Buntata-App | ET8 | plot |
Caarmen-Frcandroidwidget | ET2 | plot |
Caarmen-Poet-Assistant | ET5 | plot |
Caarmen-Youreawinner | ET6 | plot |
Calintat-Sensors | ET1 | plot |
Calintat-Units | ET1 | plot |
Camsteffen-Polite | ET1 | plot |
Carlphilipp-Chicago-Commutes | ET5 | plot |
Ccomeaux-Boardgamegeek4Android | ET5 | plot |
Charlesmadere-Smash-Ranks-Android | ET5 | plot |
Chrsep-Kingfish | ET7 | plot |
Citiususc-Calendula | ET8 | plot |
Codeforgreenville-Trolley-Tracker-Android-Client | ET8 | plot |
Colesadam-Hill-Lists | ET8 | plot |
Commit451-Labcoat | ET5 | plot |
Commons-App-Apps-Android-Commons | ET8 | plot |
Corenting-Edcompanion | ET8 | plot |
Corphish-Nightlight | ET6 | plot |
Czbix-V2Ex-Android | ET5 | plot |
Danirod-Rectball | ET5 | plot |
Darshanparajuli-Logcatreader | ET7 | plot |
Dbrant-Unitconverter-Android | ET5 | plot |
Devmil-Muzei-Bingimageoftheday | ET6 | plot |
Devmil-Paperlaunch | ET5 | plot |
Die-Tageszeitung-Tazapp-Android | ET8 | plot |
Dimagi-Commcare-Android | ET8 | plot |
Dkrivoruchko-Screenstream | ET6 | plot |
Doctoror-Particleconstellationslivewallpaper | ET7 | plot |
Dsteve595-Put.Io | ET5 | plot |
Duckduckgo-Android | ET2 | plot |
Enjoyingfoss-Om | ET7 | plot |
Equeim-Tremotesf-Android | ET11 | plot |
Erickok-Borefts2015 | ET5 | plot |
Esafirm-Android-Playground | ET7 | plot |
Eurofurence-Ef-App_Android | ET4 | plot |
Eventfahrplan-Eventfahrplan | ET4 | plot |
Exviva-Stew | ET6 | plot |
Fedepaol-Bikesharing | ET4 | plot |
Felipexmitz-Psychotest | ET5 | plot |
Fossasia-Open-Event-Android | ET7 | plot |
Freedombox-Team-Android-App | ET6 | plot |
Fvasco-Pinpoi | ET6 | plot |
Gark-Bassblog_Kotlin | ET7 | plot |
Garmax1-Material-Flashlight | ET11 | plot |
Glodanif-Bluetoothchat | ET7 | plot |
Greenlionsoft-Madrid-Pollution-Android-App | ET8 | plot |
Grote-Transportr | ET5 | plot |
Helloworld1-Freeotpplus | ET10 | plot |
Herbeth1U-Vndb-Android | ET6 | plot |
Hidroh-Materialistic | ET8 | plot |
Howard-E-Just-Quotes-Kt | ET1 | plot |
Hsson-Card-Balance-App | ET5 | plot |
Hypeapps-Episodie | ET2 | plot |
Ianhanniballake-Localstorage | ET6 | plot |
Ianmcxa-Vortaro | ET7 | plot |
Ids1024-Lsdict-Android | ET1 | plot |
Ids1024-Whitakers-Words-Android | ET6 | plot |
Imilas-Tm | ET8 | plot |
Includex-Lineagewatcher | ET1 | plot |
Inorichi-Tachiyomi | ET5 | plot |
Ipoli-Ipoli-Android | ET2 | plot |
Ironjan-Mensaupb | ET8 | plot |
Iskandergaba-Botanist | ET8 | plot |
Isoron-Uhabits | ET8 | plot |
Janyostudio-Whatanime | ET5 | plot |
Jeeb-Mpv-Android | ET5 | plot |
Jereksel-Bucket | ET7 | plot |
Jidogoon-Roundedscreen | ET7 | plot |
Jkennethcarino-Ankieditor | ET6 | plot |
Joan-Domingo-Podcasts-Rac1-Android | ET6 | plot |
Joaomneto-Titancompanion | ET5 | plot |
Johnjohndoe-Umweltzone | ET8 | plot |
Johnperry-Math-Chinese-Remainder-Clock | ET5 | plot |
Jpeddicord-Speedofsound | ET2 | plot |
Jqno-Remindermail | ET2 | plot |
K9Mail-K-9 | ET8 | plot |
Kaeptmblaubaer1000-Android-Torchlight | ET6 | plot |
Kamgurgul-Cpu-Info | ET7 | plot |
Kirimin-Mitsumine | ET5 | plot |
Klassm-Andfhem | ET5 | plot |
Laurenttreguier-Deck | ET7 | plot |
Lawnchairlauncher-Lawnchair | ET8 | plot |
Lenchan139-Ncbookmark | ET5 | plot |
Ligi-Fast | ET8 | plot |
Ligi-Gobandroid | ET5 | plot |
Ligi-Ipfsdroid | ET7 | plot |
Ligi-Materialteatimer | ET7 | plot |
Ligi-Passandroid | ET5 | plot |
Ligi-Survivalmanual | ET7 | plot |
Listen-Moe-Android-App | ET6 | plot |
Littlelightcz-Sheepsgohome | ET6 | plot |
Loloof64-Basicchessendgamestrainer | ET7 | plot |
Lomza-Screenlookcount | ET5 | plot |
Maks-Mgit | ET8 | plot |
Manojmadanmohan-Dlt | ET5 | plot |
Martinstyk-Androidapkanalyzer | ET5 | plot |
Mastizada-Focus-Android | ET4 | plot |
Maxr1998-Home-Assistant-Android | ET3 | plot |
Maxr1998-Maxlock | ET5 | plot |
Mbarta-Scr-Redesign | ET7 | plot |
Mecid-Bakubus | ET9 | plot |
Mgaetan89-Showsrage | ET6 | plot |
Michaelkourlas-Voipms-Sms-Client | ET2 | plot |
Midhunhk-Random-Contact | ET8 | plot |
Milosmns-Timecrypt | ET7 | plot |
Mjdenham-And-Bible | ET8 | plot |
Moko256-Twitlatte | ET5 | plot |
Mozilla-Mobile-Focus-Android | ET5 | plot |
Mpcjanssen-Simpletask-Android | ET5 | plot |
Mrbimc-Runinbackgroundpermissionsetter | ET1 | plot |
Mrbimc-Selinuxmodechanger | ET6 | plot |
Mygod-Vpnhotspot | ET1 | plot |
Myigel-Eh17Fahrplan | ET8 | plot |
Mystery00-Janyoshare | ET2 | plot |
Nao20010128Nao-Droidcomplex | ET7 | plot |
Nathanj-Ogsdroid | ET3 | plot |
Nbehary-Retribution | ET9 | plot |
Nextcloud-Talk-Android | ET8 | plot |
Nhmoedev-Nhentai-Android | ET5 | plot |
Nibarius-Opera-Park-Android | ET7 | plot |
Nicorsm-S3-16-Simone | ET4 | plot |
Niusounds-2Chmatome | ET6 | plot |
Nonylene-Photolinkviewer | ET5 | plot |
Nvllsvm-Audinaut | ET8 | plot |
Nyaapantsu-Nyaapantsu-Android-App | ET7 | plot |
Ofalvai-Bpinfo | ET5 | plot |
Ohmae-Dmsexplorer | ET9 | plot |
Ohmae-Voice-Message-Board | ET6 | plot |
Olivierg13-Ethertracker | ET5 | plot |
Ontherunvaro-Adb-Awake | ET1 | plot |
Openium-Auvergne-Webcams-Droid | ET7 | plot |
Openlauncherteam-Openlauncher | ET10 | plot |
Orgzly-Orgzly-Android | ET7 | plot |
Osmandapp-Osmand | ET8 | plot |
Pacien-Tincapp | ET2 | plot |
Paulwoitaschek-Voice | ET6 | plot |
Pennlabs-Penn-Mobile-Android | ET8 | plot |
Peppercarrot-E-Reader | ET7 | plot |
Peterlaurence-Trekadvisor | ET7 | plot |
Pflammertsma-Cryptogram | ET6 | plot |
Physphil-Unitconverterultimate | ET8 | plot |
Pistatium-Mahougen | ET7 | plot |
Pluscubed-Velociraptor | ET8 | plot |
Premnirmal-Stockticker | ET6 | plot |
Project-Travel-Mate-Travel-Mate | ET8 | plot |
Proxer-Proxerandroid | ET6 | plot |
Pyamsoft-Home-Button | ET2 | plot |
Qklabs-Qksms | ET7 | plot |
Quarck-Calendarnotification | ET1 | plot |
Raatmarien-Red-Moon | ET2 | plot |
Rectangle-Dbmi-Realtime-Port-Authority | ET8 | plot |
Richsmith-Sexytopo | ET8 | plot |
Ritwickverma-Shutup | ET8 | plot |
Rlac-Unitconverter | ET1 | plot |
Robnixon-Computingtutorandroidapp | ET8 | plot |
Romannurik-Muzei | ET5 | plot |
Ronocod-Bus | ET7 | plot |
Rosenpin-Quickdraweverywhere | ET12 | plot |
Rosenpin-Screenshot-Sharer | ET5 | plot |
Rubenwardy-Mtmods4Android | ET8 | plot |
Sampullman-Android-Puzzledroid | ET9 | plot |
Sandy-8925-Checklist | ET5 | plot |
Saschpe-Planningpoker | ET6 | plot |
Scoutant-Rpn | ET9 | plot |
Screaminghawk-Phone-Saver | ET1 | plot |
Shymmq-Librus-Client-Kotlin | ET1 | plot |
Siketyan-Silicagel-For-Cloudplayer | ET10 | plot |
Simplemobiletools-Simple-App-Launcher | ET7 | plot |
Simplemobiletools-Simple-Calculator | ET5 | plot |
Simplemobiletools-Simple-Calendar | ET6 | plot |
Simplemobiletools-Simple-Camera | ET6 | plot |
Simplemobiletools-Simple-Clock | ET1 | plot |
Simplemobiletools-Simple-Contacts | ET1 | plot |
Simplemobiletools-Simple-Draw | ET6 | plot |
Simplemobiletools-Simple-File-Manager | ET6 | plot |
Simplemobiletools-Simple-Flashlight | ET2 | plot |
Simplemobiletools-Simple-Gallery | ET6 | plot |
Simplemobiletools-Simple-Music-Player | ET6 | plot |
Simplemobiletools-Simple-Notes | ET6 | plot |
Simplemobiletools-Simple-Thank-You | ET6 | plot |
Sjnyag-Stamp | ET6 | plot |
Skydoves-Waterdrink | ET5 | plot |
Spacecowboy-Feeder | ET5 | plot |
Spacepandas-Cineaste-Android | ET6 | plot |
Sreich-Android-Count-The-Days | ET7 | plot |
Sriharshaarangi-Batterychargelimit | ET6 | plot |
Stinsonga-Geoquake | ET8 | plot |
Streetwalrus-Android_Usb_Msd | ET4 | plot |
Syncthing-Syncthing-Lite | ET6 | plot |
Syrop-Wiktor-Navigator | ET6 | plot |
Systemallica-Valenbisi | ET6 | plot |
Takke-Cpustats | ET5 | plot |
Tasomaniac-Openlinkwith | ET3 | plot |
Teamblueridge-Pasteit | ET12 | plot |
Temomuko-Autostoprace-Android | ET8 | plot |
Thaapasa-Jalkametri-Android | ET5 | plot |
Thalvadzhi-Sofia-Traffic | ET8 | plot |
Thanksmister-Androidthings-Mqtt-Alarm-Panel | ET5 | plot |
Thermatk-Fasthub-Libre | ET4 | plot |
Tuskyapp-Tusky | ET7 | plot |
Twidereproject-Twidere-Android | ET5 | plot |
Ultrasonic-Ultrasonic | ET5 | plot |
Umren-Watcher | ET1 | plot |
Vector-Im-Riot-Android | ET7 | plot |
Veniosg-Justsearch | ET1 | plot |
Waboodoo-Http-Shortcuts | ET5 | plot |
Waboodoo-Status-Bar-Tachometer | ET6 | plot |
Walleth-Walleth | ET7 | plot |
Wanbok-Monger-Android | ET6 | plot |
Wilderpereira-Lmgtfygen | ET7 | plot |
Wseemann-Romote | ET8 | plot |
Wuan-Bo-Android | ET2 | plot |
Wykcode-Wyk-Android | ET9 | plot |
Xgouchet-Stanley | ET6 | plot |
Yakushevvladimir-Biblequote-For-Android | ET8 | plot |
Ykrank-S1-Next | ET5 | plot |
Yshrsmz-Monotweety | ET7 | plot |
Yubico-Yubioath-Android | ET2 | plot |
Zacharee-Systemuituner2 | ET8 | plot |
The following figures display, for each code evolution trend, the code evolution of one particular application as example.
ET 1: Kotlin is the initial language.
ET 2: Kotlin code replaces all Java code.
ET 3: Kotlin code replaces some Java then Java continues growing.
ET 4: Kotlin increase together with Java.
ET 5: Kotlin grows and Java decreases. Example 1.
ET 5: Kotlin grows and Java decreases. Example 2.
ET 6: Kotlin grows and Java decrease until the Java code is 0.
ET 7: Kotlin grows and Java remains constant.
ET 8: Kotlin is constant and Java grows.
ET 9: Kotlin and Java remain constant.
ET 10: Kotlin introduced but lately disappears.
ET 11:Java replaces Kotlin code.
To see all graphs click here
4. Analyzing the difference between Kotlin and Java applications in terms of presence of code smells
We removed from our analysis 72 (0.004%) apks from 13 different applications since Paprika's analysis identified 0 classes and 0 methods. As consequence, 9 applications were removed since the analyses from all apk resulted in 0 classes and 0 methods. We checked manually the repositories of these applications and we found that 3 out of 9 applications are Android Theme, used to customize the interface of Android phones, and did not contain Java or Kotlin files. Moreover, 2 out of 9 are applications not written in Java or Kotlin according the GitHub API. However, 4 out of 9 are regular applications, but only 5 apks were removed. Regarding the 4 applications partially removed, we found one Android Theme that contains Java code, one applications mostly written in C++ and Objective-C and two regular applications, in total 16 apks from these applications were removed.
Lang | % Affected applications by smells | |||||||||
---|---|---|---|---|---|---|---|---|---|---|
Object-oriented smells | Android Smells | |||||||||
Long Method | Complex Class | Blob class | Swiss Army Knife | No Low Memory Resolver | UI Overdraw | Heavy Broadcast Receiver | Heavy Service Start | Heavy Async Task | Init OnDraw | |
LM | CC | BLOB | SAK | NLMR | UIO | HBR | HSS | HAS | IOD | |
Pure Kotlin | 99.80 | 98.50 | 95.12 | 65.67 | 99.30 | 54.02 | 35.72 | 17.31 | 09.55 | 09.55 |
Java | 99.62 | 96.89 | 93.53 | 66.51 | 98.84 | 45.33 | 39.98 | 19.92 | 22.61 | 06.50 |
K - J | 0.18 | 1.61 | 1.59 | -0.84 | 0.46 | 8.69 | -4.26 | -2.61 | -13.06 | 3.05 |
Smell | Lang | Median | Cliff's δ | Significance of |
---|---|---|---|---|
Ratio | difference | |||
LM | Kotlin | 0.0563 | -0.3873 | Medium |
Java | 0.0736 | |||
CC | Kotlin | 0.0593 | -0.3168 | Small |
Java | 0.0781 | |||
BLOB | Kotlin | 0.0163 | -0.4338 | Medium |
Java | 0.0278 | |||
SAK | Kotlin | 0.0008 | -0.2433 | Small |
Java | 0.0040 | |||
NLMR | Kotlin | 0.3750 | -0.2915 | Small |
Java | 1.0000 | |||
UIO | Kotlin | 0.0769 | 0.1156 | Insignificant |
Java | 0.0000 | |||
HBR | Kotlin | 0.0000 | -0.0699 | Insignificant |
Java | 0.0000 | |||
HSS | Kotlin | 0.0000 | -0.0240 | Insignificant |
Java | 0.0000 | |||
HAS | Kotlin | 0.0000 | -0.1306 | Insignificant |
Java | 0.0000 | |||
IOD | Kotlin | 0.0000 | 0.0341 | Insignificant |
Java | 0.0000 |
Code Smell | # Apps Kotlin Improves Quality Score | Positive Change on Evolution Trend | |
First Kotlin | Last Kotlin | ||
LM | 28(50%) | 28(50%) | 10/28(35.71%) |
CC | 35(62.5%) | 36(64.29%) | 13/36(36.11%) |
BLOB | 43(76.79%) | 42(75%) | 18/42(42.86%) |
SAK | 44(78.57%) | 45(80.36%) | 17/45(37.78%) |
HBR | 45(80.36%) | 40(71.43%) | 7/40(17.5%) |
HAS | 37(66.07%) | 30(53.57%) | 2/30(6.67%) |
HSS | 45(80.36%) | 42(75%) | 6/42(14.29%) |
IOD | 36(64.29%) | 36(64.29%) | 5/36(13.89%) |
NLMR | 33(58.93%) | 31(55.36%) | 6/31(19.35%) |
UIO | 36(64.29%) | 36(64.29%) | 8/36(22.22%) |