Using F-Droid for app distribution: A product experiment

Medic has been exploring different options for distributing Android Apps to end users such as community health workers (CHWs) and supervisors. We sometimes encounter situations and projects where using the Google Play Store is not a viable option to distribute an app – like apps based on medic-collect which was built for older versions of Android. For these projects, we usually resort to sideloading the applications onto users’ devices. Sideloading refers to installing applications without using the Google Play Store.

File:F-Droid Logo 4.svg - Wikimedia Commons
F-Droid: A free and open source Android app repository

To do this, we employ various methods to get an APK file (a format used by the Android operating system and a number of other Android-based operating systems for distribution and installation of mobile apps) to users. The most common of which is using WhatsApp to send the APK to users. This method – while effective in getting users to install the application – has a few drawbacks. The main issue: When the application needs to be upgraded, it is impossible to know which version of the app is installed on which device.

We started exploring F-Droid as a more streamlined alternative to the various sideloading options. F-Droid is an open source application that allows Android users to install applications in a similar way to the Google Play Store. Additionally, it allows us to host our own app repository on our servers, allowing us to distribute apps in a convenient way that is also familiar to users who have experience using the Google play store. In order to ascertain if this is a viable app distribution channel, we needed to answer the following questions:

  • How easy is it to set up an F-Droid app repository?
  • How easy is it for users to setup F-Droid on their devices and get the relevant app?
  • How easy is it to update to the latest version of an application?

The documentation provided for setting up an F-Droid app repo is quite good and it was fairly straightforward to set up a server to be our app repo.

Experiment

With the first question answered, we sought to answer the two remaining questions on the device-side of things. We set up an experiment with actual users who were using an application that they had to sideload onto their devices. The users were mostly County Health Assistants (CHAs) based in Kenya’s Siaya County, and the application is an event-based monitoring system called mDharura. The experiment had a control group that installed the app via an APK sent via WhatsApp while another group set up and installed the app via F-Droid.

From the experiment, we found that while all users who installed the app via F-Droid managed to do so, 45% of them required some assistance to do so. The main challenge for users was the number of steps required to set up F-Droid on their device and to install the medic-collect-based app – a smaller Android application offered within the Community Health Toolkit (CHT). Setting up the F-Droid client to point to a custom app repository led to a few extra steps, but we found in the course of the experiment that minimizing the amount of typing required resulted in better conversion.

Upgrading the app on the device was found to be easy, and all users who attempted to do so in the experiment were successful without any assistance.

Conclusion

Using F-Droid for app distribution carries an initial setup burden for each user/device. This is offset by the ease with which users are able to upgrade to newer versions of an app when needed. With this in mind, if an application is unlikely to change in the course of a project or deployment then we do not recommend F-Droid since simply sending an APK to users is much easier as a one-time operation. Therefore, there would be no benefit to using F-Droid.

Most apps, however, require updates to deliver enhancements over time. These would benefit from F-Droid as the upgrade process would be managed smoothly, assuring all users would be able to get the latest version of your app.