Choreas

Original poster
Beta Tester
11 Januar 2021
424
Hamburg, DE
Moin,
ich frag mich das schon ne Weile und jetzt auch euch :p Was steckt hinter dem Zugriff der vorinstallierten App FM-Radio auf Mikrofon, Storage und Telefon, von dem sich nichts deaktivieren lässt? Auch die App selbst lässt sich nicht deaktivieren, im Gegensatz zu anderen Systemapps wie Firefox Klar oder dem AOSP-Board (letzteres sollte man aber wohl lieber nicht deaktivieren, wobei ich schon neugierig bin, ob man das Device damit bricked, back to topic^^). Und wenn man die Datenberechtigungen (Internet) anklickt, bekommt man ne Liste mit Systemapps, in deren Gruppe die App scheinbar liegt.
Gibts ne technische Notwendigkeit, dass die App so privilegiert ist, tut sie vielleicht mehr, als nur ein Radio sein?
 
Lösung
Android hat keine APIs für FM Radio, deswegen müssen das die SoC Hersteller (Qualcomm, MediaTek) bzw die Hersteller extra bereitstellen.

Dazu muss die App auf interne APIs zugreifen, die für normale Apps nicht verfügbar sind.
Das heißt sie braucht "priviligierte Systemrechte" um zu funktionieren.

(Wird jetzt bisschen technisch, Entschuldigung. Ich kann das nicht einfacher erklären :()

Um die zu bekommen, bekommt sie die gleiche User ID wie das System zugewiesen und Apps mit der selben User ID teilen sich die Berechtigungen.
Also auch wenn die App zb nicht explizit Zugriff auf das Telefon anfordert, bekommt sie die Berechtigung trotzdem zugewiesen wegen der shared User ID.

Code:
LOCAL_PACKAGE_NAME := FM2
LOCAL_CERTIFICATE :=...
Würde mich auch interessieren wieso ein Radio diese Berechtigungen braucht? Liegt vermutlich auch am seltsamen Berechtigungssystem von Android. Glaube ich nicht das Shift uns irgendwelche Spyware auf den Geräten installiert.

OT: Man kann jede App über adb deaktivieren. Allerdings hier sehr vorsichtig sein, da man viel kaputt machen kann.
Paketnamen der zu deaktivierenden App herausfinden mit adb shell pm list packages.
Danach am Besten mittels Suchmaschine überzeugen das der Paketname auch dem Paket entspricht das man entfernen will.
Paket mittels adb shell pm uninstall -k --user 0 <paketname> für den Benutzer entfernen bzw deaktivieren.

OT: Wenn man die Standard Tastatur deaktiviert brickt man das Gerät nicht, allerdings kann man sich unter Umständen dann nicht mehr mit PIN oder Passwort einloggen was auf das selbe hinausläuft! Man kann sich aber mit einer USB-OTG fähigen Hardware Tastatur behelfen. Bluetooth funktioniert auch nicht immer, vor allem wenn die Tastatur nicht schon mal gepairt wurde.
 
  • Like
Reaktionen: Martin S. und Choreas
Die Theorie mit dem Berechtigungssystem wär schon möglich, vielleicht ist die App ja Teil von Systemaufgaben, but I don't know. Ich glaub auch nicht, dass das aus böser Absicht so ist, deshalb hau ich auch nich mit adb drauf.
@OT2 ja, den möglichen Brick nachm Neustart beim Entsperren mein ich xD
 
  • Like
Reaktionen: danielp
Beim 6m, Android 8.0, braucht die App nur die Berechtigung zum Mikrofon. Speicher ist deaktiviert bei mir, aber die Berechtigung wird sicher verlangt wenn man etwas aufnehmen will.

Ich nutze das Radio sehr selten. Ich hatte bei der Nutzung noch nie ein Telefonat. Aber vielleicht hängt diese Berechtigung (Telefon) damit zusammen., dass wenn ein Anruf kommt das sich das Radio deaktivieren kann?
 
Zuletzt bearbeitet:
  • Like
Reaktionen: danielp
Android hat keine APIs für FM Radio, deswegen müssen das die SoC Hersteller (Qualcomm, MediaTek) bzw die Hersteller extra bereitstellen.

Dazu muss die App auf interne APIs zugreifen, die für normale Apps nicht verfügbar sind.
Das heißt sie braucht "priviligierte Systemrechte" um zu funktionieren.

(Wird jetzt bisschen technisch, Entschuldigung. Ich kann das nicht einfacher erklären :()

Um die zu bekommen, bekommt sie die gleiche User ID wie das System zugewiesen und Apps mit der selben User ID teilen sich die Berechtigungen.
Also auch wenn die App zb nicht explizit Zugriff auf das Telefon anfordert, bekommt sie die Berechtigung trotzdem zugewiesen wegen der shared User ID.

Code:
LOCAL_PACKAGE_NAME := FM2
LOCAL_CERTIFICATE := platform
LOCAL_JNI_SHARED_LIBRARIES := libqcomfm_jni
LOCAL_JAVA_LIBRARIES := qcom.fmradio
LOCAL_PRIVATE_PLATFORM_APIS := true

Code:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.caf.fmradio"
    android:sharedUserId="android.uid.system" >
 
Lösung
Hat sich das dann zwischen Android 8 und 10 geändert! @Jan B. sagt ja das bei Android 8 nur die Mikrofon Berechtigung angefordert wird.
 
  • Like
Reaktionen: Jan B.
Faszinierend, danke für die Erklärung. Verstehe ich das richtig: Die API ist von qualcomm, die App von shift oder einem Dritten und die Systemrechte sind nötig, um auf qualcomms API zuzugreifen?
 
Hat sich das dann zwischen Android 8 und 10 geändert! @Jan B. sagt ja das bei Android 8 nur die Mikrofon Berechtigung angefordert wird.
Das ist der Unterschied zwischen MediaTek und Qualcomm und wie sie es umgesetzt haben.

Und zb das FM Radio vom 6mq kann auch aufnehmen und braucht deswegen Speicher Berechtigungen.
Es wird auch überprüft, ob ein Anruf aktiv ist und dafür braucht es die Telefon Berechtigung.

Faszinierend, danke für die Erklärung. Verstehe ich das richtig: Die API ist von qualcomm, die App von shift oder einem Dritten und die Systemrechte sind nötig, um auf qualcomms API zuzugreifen?
Kurz zusammengefasst:

Qualcomm hat die Funktionen im System integriert, sie sind nicht öffentlich zugänglich und um auf nicht öffentliche Funktionen zuzugreifen, benötigt man Systemrechte.
 
Zuletzt bearbeitet:
  • Like
Reaktionen: danielp und Jan B.
Hallo zusammen,

bedeutet das, dass man aufrund der "Privilegien" die Radio App auch nicht deinstallieren darf?

Ich würde sie gerne von meinem Gerät runter schmeißen. Nicht nur weil ich sie nicht benutze, sondern auch, weil ich gerne die Kontrolle darüber hätte, welche App welche Berechtigtigungen hat.

Gibt es da einen Weg?
 
Keinen zur vollständigen Deinstallation. Dafür fehlen uns auf dem 6mq aktuell die Schreibrechte der System-Partition.

Du kannst lediglich mit Magisk-Root und dem Modul "Terminal-Deblioat" beim Systemstart den entsprechenden Ordner unter "system/app" oder "system/priv-app" als leer mounten.

Alternativ gibt es noch die Möglichkeit mit ADB Systemapps (für das aktuelle Nutzerkonto) zu deaktivieren, so dass sie nicht mehr verfügbar sind.

Sollte man aber nur tun, wenn man weiß, welchen Einfluss die entsprechende App auf das System hat. Das bootet ggfs nicht mehr richtig, stürzt ständig ab, etc.

Im ersten Fall kann man das Modul deaktivieren, dann ist alles wieder da.
Im zweiten Fall solltest du dir irgendwo die Name der "deaktivierten" Apps aufschreiben, du bekommst sie nämlich in der App-Liste nicht mehr angezeigt, falls du sie wieder aktivieren willst. Da kommst du, wenn du das nicht mehr tust, oder das System so vermurkst, dass kein ADB Zugang mehr besteht um nen Factory-Reset nicht mehr drum...

Alternativ: Systemapps mit ADB einfrieren, die kann man a) mit ADB wieder auftauen oder b) aus den App-Einstellungen wieder aktivieren.

Greetz
 
  • Like
Reaktionen: MrRobot und Martin S.
Ich würde mich aber vorher noch schlaumachen, ob es dabei Probleme geben kann, weil es nicht nur ne "Systemapp" wie z.B. Firefox Focus ist, sondern ne sharedUserId mit android.uid.system hat.