2013-02-15 10 views
19

Ich frage mich, wie man Android OS Quellcode bearbeiten kann, um eine neue Erlaubnis aufzuerlegen. Zum Beispiel, wie wir BLUETOOTH Erlaubnis, wenn das Gerät einen neuen Sensor bietet, dann, wie entsprechende Berechtigung erstellt werden kann, damit Anwendungen den neuen Sensor verwenden, auf Anwendungsebene mit Manifest-Eintrag für die neue Berechtigung in Android ROM verfügbar.Android: Erstellen Sie eine neue Systemberechtigung im AOSP-Quellcode.

Weiß jemand, wie neue Berechtigungen auf Betriebssystemebene im AOSP-Quellcode erstellt werden?

Und ich denke, wenn wir die Android-Quelle geändert haben, um die neue Berechtigung hinzuzufügen, müssen wir unser benutzerdefiniertes SDK für die Verwendung von Berechtigungen in der Anwendungsentwicklung kompilieren, sonst wird das vorhandene SDK Kompilierzeit Fehler geben, da es unsere benutzerdefinierte Erlaubnis nicht erkennt ...

Alle Ideen, Gedanken sehr geschätzt.

Antwort

22

Im Rahmen/base/data/etc/platform.xml

Sie können Ihre neu erstellte Erlaubnis mit einem entsprechenden gid definieren.

<permissions> 

    <!-- ================================================================== --> 
    <!-- ================================================================== --> 
    <!-- ================================================================== --> 

    <!-- The following tags are associating low-level group IDs with 
     permission names. By specifying such a mapping, you are saying 
     that any application process granted the given permission will 
     also be running with the given group ID attached to its process, 
     so it can perform any filesystem (read, write, execute) operations 
     allowed for that group. --> 

    <permission name="android.permission.BLUETOOTH_ADMIN" > 
     <group gid="net_bt_admin" /> 
    </permission> 

    <permission name="android.permission.BLUETOOTH" > 
     <group gid="net_bt" /> 
    </permission> 

    <permission name="android.permission.BLUETOOTH_STACK" > 
     <group gid="net_bt_stack" /> 
    </permission> 

    <permission name="android.permission.NET_TUNNELING" > 
     <group gid="vpn" /> 
    </permission> 

    <permission name="android.permission.INTERNET" > 
     <group gid="inet" /> 
    </permission> 

    <permission name="android.permission.CAMERA" > 
     <group gid="camera" /> 
    </permission> 

    <permission name="android.permission.READ_LOGS" > 
     <group gid="log" /> 
    </permission> 

    ... 
</permission> 

Andere Berechtigungsdefinitionen sind nicht in der obigen Datei, denn es gibt eigentlich zwei Arten von Erlaubnis in Android sind, wie in der folgenden Abbildung dargestellt. In dieser Datei sind nur Berechtigungen definiert, die vom Linux-Kernel erzwungen werden.

Permission Enforcement in Android

Andere Berechtigungen wie ACCESS_FINE_LOCATION, READ_CONTACTS, etc. sind definiert, in dem AndroidManifest.xml in Systemanwendungen (packages /.../ AndroidManifest.xml) und Rahmen (Rahmen/Basis/Kern/res/AndroidManifest .xml).

Nachdem Sie Ihre Erlaubnis und zugehörige Code hinzufügen, kompilieren und erstellen Sie das Projekt nach Building Instruction

+1

+1 Für die Darstellung IPC, haben Sie ziehen, dass man sich selbst oder Sie es irgendwo gefunden? –

+3

Ich zeichnete es selbst. @ BjarkeFreund-Hansen – StarPinkER

+0

@StarPinkER Können Sie mehr Informationen darüber geben, wie IPC in Android-Apps stattfindet. Wenn eine App tatsächlich nach dem Standort fragt, wie validiert das Betriebssystem, ob die App die entsprechende Berechtigung hat, wenn keine Ausnahme ausgelöst wird. –

Verwandte Themen