The Power of fdroidcl

2026.10.16 by Matthias Kirschner in #freeyourandroid #fsfe

Screen recording on mobile phone while running the fdroidcl script

Screen recording on mobile phone while running the fdroidcl script.

Over the last months my co-workers at the Free Software Foundation Europe conducted several tests of Android distributions, how they respect your freedom and support your daily life. I regret not having had more time to get involved there. But I still tried out some of them myself in order to help others around me.

At the FSFE 25 anniversary Florian Snow mentioned fdroidcl to me, which I started to love while testing distributions myself. During my summer holidays I started to use it more while helping others to install and upgrade existing Android distributions. Below are some notes what I did so as not to spend too much time on the migration / installation of the apps.

A precondition for this is that you have adb access to the phone, which you already had to get in order to flash another distribution.

First step was to do a backup of the data on the phone, including backing up app data with Seedvault, a great tool that Torsten Grote developed (always had to remember to go into the expert settings and disable the backup of the APKs there).

The first thing I did on those distributions which have a pre-installed F-Droid is run:

$fdroidcl list

To get a list of the pre-installed packages that are handled by F-Droid. I then usually first removed all apps (also with the script below) to ensure that I can in future quickly restore the setup again. Sometimes you want to keep some of the pre-installed apps, for example if the distributions ships with a tool to handle eSim or has microG already integrated.

Now you can run for the first time:

$bash fdroid-installer.sh install

Before you start any of the apps you should restore the data from Seedvault.

The GIF above is from me running

$bash fdroid-installer.sh uninstall

which I did to ensure that I would not forget to add apps in the default install script for family or the other one for myself for further testing of distributions.

If you are interested, also have a look at the analysis of my co-worker Florian Snow about the different Android distributions:

Below an example of one of the scripts:

#!/bin/bash

ACTION=$1

# Validate the input argument using a case statement
case "$ACTION" in
    "install")
        echo "Starting the installation process..."
        ;;

    "uninstall")
        echo "Starting the removal process..."
        ;;

    "")
        echo "Error: No argument provided."
        echo "Usage: $0 {install|uninstall}"
        exit 1
        ;;

    *)
        echo "Error: Invalid action '$1'."
        echo "Usage: $0 {install|uninstall}"
        exit 1
        ;;
esac

# Update Repositories
fdroidcl update

# App list
fdroidcl $ACTION org.fossify.calendar             # FOSSify Calendar
fdroidcl $ACTION org.fossify.contacts             # FOSSify Contacts
fdroidcl $ACTION org.fossify.phone                # FOSSify Phone
fdroidcl $ACTION org.fossify.gallery              # FOSSify Gallery
fdroidcl $ACTION org.fossify.messages             # FOSSify Messages
fdroidcl $ACTION org.unifiedpush.distributor.sunup # Sunup
fdroidcl $ACTION com.nextcloud.client             # Nextcloud
fdroidcl $ACTION net.gaast.giggity                # Giggity
fdroidcl $ACTION com.marktka.calculatorYou        # Calculator You: Math & Units
fdroidcl $ACTION ws.xsoh.etar                     # Etar - OpenSource Calendar
fdroidcl $ACTION com.kunzisoft.keepass.libre      # KeePassDX Passkey Vault
fdroidcl $ACTION com.nextcloud.talk2              # Nextcloud Talk
fdroidcl $ACTION org.dmfs.tasks                   # OpenTasks
fdroidcl $ACTION io.github.yamin8000.owl          # freeDictionaryApp
fdroidcl $ACTION us.spotco.maps                   # GMaps WV
fdroidcl $ACTION com.geeksville.mesh              # Meshtastic
fdroidcl $ACTION dev.cyberme0w.openbike           # OpenBike
fdroidcl $ACTION org.torproject.android           # Orbot: Proxy with Tor
fdroidcl $ACTION swati4star.createpdf             # PDF Converter
fdroidcl $ACTION de.rwth_aachen.phyphox           # phyphox
fdroidcl $ACTION de.reimardoeffinger.quickdic     # QuickDic
fdroidcl $ACTION org.secuso.privacyfriendlyruler  # Ruler (Privacy Friendly)
fdroidcl $ACTION com.carriez.flutter_hbb          # RustDesk
fdroidcl $ACTION chat.schildi.android             # SchildiChat Next
fdroidcl $ACTION com.jarsilio.android.scrambledeggsif # Scrambled Exif
fdroidcl $ACTION com.nishantboro.splititeasy      # Split It Easy
fdroidcl $ACTION com.best.deskclock               # Clock by BlackyHawky
fdroidcl $ACTION com.governikus.ausweisapp2       # AusweisApp
fdroidcl $ACTION com.aurora.store                 # Aurora Store
fdroidcl $ACTION me.zhanghai.android.files        # Material Files
fdroidcl $ACTION it.niedermann.nextcloud.deck     # Nextcloud Deck
fdroidcl $ACTION it.niedermann.owncloud.notes     # Nextcloud Notes
fdroidcl $ACTION de.tnmgl.ntodotxt                # ntodotxt
fdroidcl $ACTION at.bitfire.davdroid              # DAVx5
fdroidcl $ACTION at.bitfire.icsdroid              # ICSx5
fdroidcl $ACTION org.sufficientlysecure.ical      # Calendar Import-Export
fdroidcl $ACTION de.k3b.android.calef             # CalEF
fdroidcl $ACTION app.comaps                       # CoMaps
fdroidcl $ACTION net.osmand.plus                  # OsmAnd
fdroidcl $ACTION org.ligi.passandroid             # PassAndroid
fdroidcl $ACTION de.schildbach.oeffi              # Öffi
fdroidcl $ACTION eu.siacs.conversations           # Conversations
fdroidcl $ACTION net.sourceforge.opencamera       # OpenCamera
fdroidcl $ACTION com.beemdevelopment.aegis        # Aegis
fdroidcl $ACTION org.tasks                        # Tasks.org
fdroidcl $ACTION org.schabi.newpipe               # NewPipe (newpipe repo)
fdroidcl $ACTION me.hackerchick.catima            # Catima
fdroidcl $ACTION de.ph1b.audiobook                # Voice
fdroidcl $ACTION org.koreader.launcher.fdroid     # KOReader
fdroidcl $ACTION de.danoeh.antennapod             # AntennaPod
fdroidcl $ACTION com.mrsep.musicrecognizer        # Audile
fdroidcl $ACTION com.google.android.stardroid     # Sky Map
fdroidcl $ACTION org.fossify.voicerecorder        # Voicerecorder
fdroidcl $ACTION de.bahnvorhersage.app            # Bahn-Vorhersage
fdroidcl $ACTION org.blitzortung.android.app      # Blitzortung Lightning Monitor
fdroidcl $ACTION org.woheller69.omweather         # Cirrus Weather and rain radar
fdroidcl $ACTION nz.eloque.foss_wallet            # FossWallet
fdroidcl $ACTION de.kaffeemitkoffein.imagepipe    # Imagepipe
fdroidcl $ACTION rocks.poopjournal.morse          # Morse
fdroidcl $ACTION com.starry.myne                  # Myne: Download & Read eBooks
fdroidcl $ACTION org.onionshare.android.fdroid    # OnionShare
fdroidcl $ACTION openfoodfacts.github.scrachx.openfood # OpenFoodFacts
fdroidcl $ACTION de.westnordost.streetcomplete    # OpenStreetMap surveyor app
fdroidcl $ACTION org.sunsetware.phocid            # Phocid A modern offline music player with familiar designs
fdroidcl $ACTION io.github.deweyreed.timer.other  # TimeR Machine
fdroidcl $ACTION net.thunderbird.android          # Thunderbird: Free Your Inbox
fdroidcl $ACTION org.torproject.vpn               # Tor VPN Beta
fdroidcl $ACTION org.videolan.vlc                 # VLC
fdroidcl $ACTION org.woheller69.whobird           # whoBIRD
fdroidcl $ACTION fr.gaulupeau.apps.InThePoche     # wallabag
fdroidcl $ACTION de.moekadu.tuner                 # Tuner
fdroidcl $ACTION org.y20k.transistor              # Transistor - Simple Radio App
fdroidcl $ACTION org.torproject.torbrowser        # Tor Browser for Android
fdroidcl $ACTION net.taler.wallet.fdroid          # Taler Wallet
fdroidcl $ACTION net.typeblog.shelter             # Shelter
fdroidcl $ACTION org.ligi.survivalmanual          # Survival Manual
fdroidcl $ACTION org.breezyweather                # Breezy Weather

# Maybe in future

## Change of default apps

#adb shell cmd role add-role-holder android.app.role.DIALER  org.fossify.phone
#adb shell cmd role add-role-holder android.app.role.SMS     org.fossify.messages

## Potentially disable apps that came with the OS

#adb shell pm disable-user --user 0 org.lineageos.trebuchet
#adb shell pm disable-user --user 0 com.android.launcher3
#adb shell pm disable-user --user 0 org.dslul.openboard.inputmethod.latin
#adb shell pm disable-user --user 0 com.google.android.apps.googlecamera.fishfood
#adb shell pm disable-user --user 0 org.lineageos.backgrounds
#adb shell pm disable-user --user 0 org.lineageos.flipflap
#adb shell pm disable-user --user 0 com.android.egg