Android No-root debloat

Recentelijk ben ik van mijn OnePlus 7 Pro overgestapt omdat ik mijn OP had laten stuiteren. Ik wilde niet wéér zo'n dure telefoon, maar een goedkopere. Het nadeel van goedkopere Android telefoons is dat de specificaties vaak tegenvallen, óf dat ze vol zitten met bloatware. De enige manier om van bloatware af te komen is om je toestel te rooten en dan de privileged app uit je OS te knikkeren. Het nadeel is dat dit nogal wat voeten in aarde heeft en zo ver wil ik niet gaan. Het kan ook makkelijker, je kunt de privileged app ook uitschakelen. Echter, sommige leveranciers (zoals OPPO, die ik nu gebruik) laten apps ook niet uitschakelen en die draaien dus altijd. Echter, zonder root kun je daar ook iets aan doen! Je hebt wel een PC of laptop nodig en een USB-kabel om je telefoon te koppelen.

Developermode inschakelen

Allereerst moet je Android developer mode inschakelen, dit geeft meer je toegang tot meer (en potentieel gevaarlijke) instellingen. Wees dus voorzichtig hiermee. De instelling die wij nodig hebben is 'USB-debugging'. Per leverancier kan de instelling ergens verstopt zitten, maar de basis komt neer op het volgende.

USB-debugging inschakelen

  1. Ga in je telefoon naar 'Instellingen'
  2. Ga vervolgens naar "Over"
  3. Zoek 'Buildnummer'
  4. Klik nu 5x achter elkaar op buildnummer en daarna krijg je de melding dat je nu 'ontwikkelaar' bent
  5. Ga vervolgens terug naar 'Instellingen'
  6. Even zoeken en uiteindelijk vind je 'Ontwikkelaarsinstellingen', open deze
  7. Zoek in deze lange lijst naar 'USB-debugging' en zet deze aan. Accepteer een eventuele melding die je krijgt

Laptop (of PC) voorbereiden

Sluit je telefoon nog niet aan op je laptop!

  1. Ongeacht of je een Linux, Mac of Windows machine hebt, moet zult de 'ADB-tools' moeten downloaden. Hoe dat werkt lees je hier: https://www.xda-developers.com/install-adb-windows-macos-linux/
  2. Download de zip en pak hem uit en zet hem ergens neer dat je er makkelijk bij kunt
  3. Open een terminal/console/cmd en navigeer naar die map
  4. Typ nu: adb devices
    Je krijgt een melding over het feit dat de service nog niet gestart is en dat hij dit eerst zelf doet, dat is prima. Het resultaat is dat je een paar lege regels ziet en dan weer je prompt. Met andere woorden: er zijn geen 'adb devices' gevonden. Dat klopt, want je telefoon was als het goed is nog niet aangesloten
  5. Sluit nu je telefoon aan en wacht even. Als je op Windows zit moet deze eerst een stuurprogramma installeren, dit gaat (in ieder geval op Windows 10) helemaal vanzelf en duurt een paar tellen
  6. Typ nu nogmaals: adb devices
    Je ziet nu als het goed is wel een device. Zo niet, zorg dat je telefoon aan staat, aan de kabel hangt, dat USB-debugging goed aan staat, dat je telefoon niet op het lockscherm staat te wachten op pin of fingerprint en dat je telefoon niet op 'alleen opladen'-modus staat

Conservatief of destructief debloaten

Nu heb je alle tools in handen om privileged apps aan te pakken, wat rest is de vraag HOE je wilt debloaten. Je hebt twee opties:

  1. conservatief
  2. iets minder conservatief, maar nog steeds conservatief
Wil je een app disablen, dan gebruik je adb shell pm disable-user --user0 'appNaamHier'
Wil je een app verwijderen, dan gebruik je: adb shell pm uninstall -k --user 0 'appNaamHier'
Let op dat deze syntaxen niet helemaal overeenkomen! Het probleem is dat er maar 1 manier is om een app definitief weg te halen, dat is door root access te hebben op je telefoon. Maar goed, een stock ROM heeft dat by-design niet. Het deel 'user0' of 'user 0' disabled of verwijdert een app alleen voor de huidige gebruiker, maar niet uit system. Voor die laatste heb je root rechten nodig.

  1. Je moet alleen nog de precieze naam van de app(s) hebben. Deze kun je moeilijk terugvinden, maar een app als 'Application Inspector' kan je daarbij helpen. Deze is gratis en staat in de Play Store: https://play.google.com/store/apps/details?id=com.ubqsoft.sec01&hl=nl&gl=US. Als je enig idee hebt hoe de app heet, kun je ook adb hiervoor gebruiken. Gebruik hiervoor:
    adb shell pm list packages | grep 'GedeeltelijkeNaamHier'
  2. Open deze app op je telefoon, klik een app aan die je niet wilt en dan staat er op de details pagina van de app, helemaal bovenin onder de titel van de app, de appnaam. Stel je zou de Youtube willen uitschakelen of verwijderen, omdat je zoveel reclame krijgt, daar gek van wordt en een beter alternatief hebt gevonden *kuch* VANCED *kuch* dan is de naam 'Youtube' en de appnaam 'com.google.android.youtube'.
  3. Ga nu terug naar je ADB-tools en typ daar je debloat actie:
    adb shell pm uninstall -k --user 0 'com.google.android.youtube'
  4. Als het werkt zie je nu 'Success' en is de app definitief van je telefoon verdwenen (of disabled, afhankelijk van wat je hierboven hebt gedaan)
  5. Herhaal de bovenstaande stap voor alle apps die je wilt uitschakelen of verwijderen
  6. Als je klaar bent verwijder je de Application Inspector, als je wilt en schakel je USB-debugging weer uit
  7. Wat je ook kunt doen is heel de ontwikkelaarsinstellingen uit te schakelen, door de slider daarin bovenaan ook weer uit te zetten

App terugzetten

Omdat de app voor de huidige gebruiker is verwijderd, kun je hem ook weer terugzetten (vanuit system). Hiervoor gebruik je: db shell cmd package install-existing 'appNaamHier'

OTA

Over-The-Air updates van je telefoon kunnen deze apps ook weer terugzetten. Dan moet je deze procedure nogmaals doorlopen.

Telefoon integriteit

Deze manier van apps uitschakelen is echter nog steeds zinvol, want met dit proces behoud je Android integriteits seal, wat je nodig hebt als je je telefoon zakelijk zou willen gaan gebruiken (en met een management platform te maken krijgt wat hier naar kijkt). Bij root (bijvoorbeeld bij Magisk met 'Magisk hide' lukt dit niet altijd.

Mijn shitlist

adb shell pm uninstall -k --user 0 com.android.chrome
adb shell pm uninstall -k --user 0 com.coloros.gamespaceui
adb shell pm uninstall -k --user 0 com.coloros.compass2
adb shell pm uninstall -k --user 0 com.coloros.video
adb shell pm uninstall -k --user 0 com.coloros.backuprestore
adb shell pm uninstall -k --user 0 com.coloros.soundrecorder
adb shell pm uninstall -k --user 0 com.coloros.weather2
adb shell pm uninstall -k --user 0 com.facebook.services
adb shell pm uninstall -k --user 0 com.google.ar.lens
adb shell pm uninstall -k --user 0 com.google.android.apps.nbu.files
adb shell pm uninstall -k --user 0 com.google.android.keep
adb shell pm uninstall -k --user 0 com.google.android.youtube
adb shell pm uninstall -k --user 0 com.google.android.gm
adb shell pm uninstall -k --user 0 com.google.android.apps.photos
adb shell pm uninstall -k --user 0 com.heytap.music
adb shell pm disable-user --user0 com.google.android.apps.googleassistant
adb shell pm disable-user --user 0 com.google.android.googlequicksearchbox
Let op: googleassistant en googlequicksearchbox zijn nodig voor Android Auto. Als je deze voor de gebruiker verwijdert, doet AA het niet meer. Wanneer je ze disabled heb je dit probleem niet.

Extra tip

APK van je telefoon kopieren om elders te gebruiken:
adb shell pm list packages
adb shell pm path com.oneshoe.yellowbrick
adb shell pull {hele APK pad}