
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