SELinux schränkt meine System-App ein, selbst wenn sie mit demselben Schlüssel wie die zuvor ausgelieferte signiert wurde!

Nun, ich habe etwas Seltsames vor. Ich dachte daran, mit Dotcase.apk von CyanogenMod 13 herumzuspielen, damit ich die apk neu erstellen konnte. Ich habe sogar darauf geachtet, es mit dem Plattform-Android-Testschlüssel zu signieren (ich habe überprüft, dass die ursprüngliche APK mit genau diesem Schlüssel signiert wurde! Ich habe die CERT.RSA extrahiert und die Zertifikate verglichen - sie sind gleich!).

Dann ersetzte ich die APKs in /system/priv-app/Dotcase und tauschte die Dotcase.apk gegen meine selbst erstellte aus - im Grunde die gleiche wie die gelieferte, kein Code geändert, nur von mir selbst erstellt.

Die Dotcase-App verwendet UEventObserver und öffnet ein „DEVPATH=/devices/virtual/switch/cover“

Und hier entsteht das Problem. SELinux bereitet mir Kopfschmerzen mit der Meldung:

07-29 01:07:56.918  4902  4902 W UEventObserver: type=1400 audit(0.0:1229): avc: denied { create } for scontext=u:r:platform_app:s0:c512,c768 tcontext=u:r:platform_app:s0:c512,c768 tclass=netlink_kobject_uevent_socket permissive=0

Danach stürzt die App ab und nimmt com.android.systemui mit, mit:

07-29 01:07:56.960  2558  4902 E AndroidRuntime: java.lang.RuntimeException: Unable to open socket for UEventObserver

während die gleiche App mit dem gleichen Code und dem gleichen Signaturschlüssel in Ordnung ist.

Ich habe einige Tricks ausprobiert, die die Verwendung von etwas wie Supolicy von SuperSU usw. ohne Erfolg beinhalten - es scheint, als ob die App (die als bootet android:sharedUserId="android.uid.systemui") gestartet wird, bevor irgendetwas anderes einsetzt.

Nun die Fragen:

  1. Was habe ich falsch gemacht?

  2. Wie man es repariert?

  3. Gibt es vielleicht eine Möglichkeit, SELinux komplett zu deaktivieren, indem ich etwas in /system patche - zumindest vorerst, während ich daran herumfummele?

  4. Oder besteht die einzige Möglichkeit darin, jedes Mal, wenn ich eine kleine Änderung testen muss, das gesamte Cyanogenmod-ROM-Image mit meinen Änderungen zu erstellen? :(

PS: Gerät ist HTC M9 GSM (himaul)

Antworten (1)

Nun, ich fand heraus, dass ich es vermasselt hatte. Ich habe es mit dem falschen Manifest erstellt. Es hätte statt sein android:sharedUserId="android.uid.system"sollen android:sharedUserId="android.uid.systemui". Als ich die Manifeste verglichen habe (danke apktool, dass Sie das Manifest für mich entschlüsselt haben!), wurde es offensichtlich. Das Ersetzen der zugehörigen Bits im Manifest hat das Problem behoben. Problem gelöst. Wahrscheinlich habe ich nur das falsche Repository verwendet.

Dies wird sogar hier vermerkt: github.com/CyanogenMod/android_device_htc_hima-common/commit/… - es erfordert tatsächlich eine zusätzliche SElinux-Regel, daher wurde es zurückgesetzt. Ich habe versehentlich ein anderes Repository verwendet, bei dem es nicht zurückgesetzt wurde.