Skip to content

UPCArtifacts/kotlinandroid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

10 Commits
 
 
 
 
 
 

Repository files navigation

An Empirical Study on Quality of Android Applications written in Kotlin language

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"
}

Table of contents

  1. Creation of a dataset of Kotlin applications
  2. Building our study dataset
  3. Code evolution of Android applications
  4. Analyzing the difference between Kotlin and Java applications in terms of presence of code smells
  5. Detecting changes in the quality evolution trends after introducing Kotlin

1. Creation of a dataset of Kotlin applications

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:

  1. its source code hosted in a code repository (e.g., GitHub), and
  2. binary files (apk) of the released versions.

Selecting dataset of Android applications

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

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.

back to the top

AndroidTimeMachine

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.

back to the top

AndroZoo

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.

back to the top


2. Building our study dataset

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.

Getting applications from 2017 and 2018

Step 1: Mining F-Droid

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.

Step 2: Mining AndrodTimeMachine

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
Step 3: Combining AndrodTimeMachine with AndroZoo and F-Droid

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

The resulting dataset

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

back to the top

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.

Median of versions by dataset

Detecting Kotlin applications

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.

Pipeline to classify android applications

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.

Final dataset

Results

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.

Unique apps Unique apps

All versions Unique apps

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

3. Code evolution of Android applications

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 indivual classification

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 1: Kotlin is the initial language.

ET 2: Kotlin code replaces all Java code. ET 2: Kotlin code replaces all Java code.

ET 3:  Kotlin code replaces some Java then Java continues growing. ET 3: Kotlin code replaces some Java then Java continues growing.

ET 4: Kotlin increase together with Java. ET 4: Kotlin increase together with Java.

ET 5: Kotlin grows and Java decreases. ET 5: Kotlin grows and Java decreases. Example 1.

ET 5: Kotlin grows and Java decreases. ET 5: Kotlin grows and Java decreases. Example 2.

ET 6: Kotlin grows and Java decrease until the Java code is 0. ET 6: Kotlin grows and Java decrease until the Java code is 0.

ET 7: Kotlin grows and Java remains constant. ET 7: Kotlin grows and Java remains constant.

ET 8: Kotlin is constant and Java grows. ET 8: Kotlin is constant and Java grows.

ET 9: Kotlin and Java remain constant. ET 9: Kotlin and Java remain constant.

ET 10: Kotlin introduced but lately disappears. ET 10: Kotlin introduced but lately disappears.

ET 11:Java replaces Kotlin code. ET 11:Java replaces Kotlin code.

ET 12: Other. ET 12: Other.

To see all graphs click here

4. Analyzing the difference between Kotlin and Java applications in terms of presence of code smells

Analyzing Apps with Priprika

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

5. Detecting changes in the quality evolution trends after introducing Kotlin

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%)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published