2013-02-15 14 views
19

Mi chiedevo come si possa modificare il codice sorgente del SO Android per imporre una nuova autorizzazione. Ad esempio, se disponiamo dell'autorizzazione BLUETOOTH, se il dispositivo offre un nuovo sensore, è possibile creare l'autorizzazione appropriata affinché le applicazioni possano utilizzare il nuovo sensore, a livello di applicazione utilizzando la voce manifest per la nuova autorizzazione disponibile nella rom di Android.Android: crea una nuova autorizzazione di sistema tramite il codice sorgente AOSP.

Qualcuno sa come vengono create nuove autorizzazioni a livello di sistema operativo nel codice sorgente AOSP ??

E penso che se abbiamo modificato il sorgente Android per aggiungere la nuova autorizzazione, dobbiamo compilare il nostro SDK personalizzato per l'utilizzo dell'autorizzazione nello sviluppo di applicazioni, altrimenti l'SDK esistente darà errore in fase di compilazione, in quanto non riconoscerà il nostro permesso personalizzato ...

Tutte le idee, i pensieri molto apprezzati.

risposta

22

Nel quadro/base/dati/etc/platform.xml

È possibile definire il vostro permesso appena creato con un corrispondente gid.

<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> 

Altre definizioni autorizzazione non è nel file di cui sopra, perché ci sono in realtà due tipi di autorizzazione in Android, come mostrato nella figura seguente. Solo le autorizzazioni applicate da Linux Kernel sono definite in quel file.

Permission Enforcement in Android

Altri autorizzazioni come ACCESS_FINE_LOCATION, READ_CONTACTS, ecc sono definisce nel AndroidManifest.xml in applicazioni di sistema (pacchetti /.../ AndroidManifest.xml) e quadro (quadri/base/core/res/AndroidManifest .xml).

Dopo aver aggiunto il vostro permesso e il codice relativo, compila e genera il progetto in base al Building Instruction

+1

+1 Per l'illustrazione IPC, lo si disegna che uno voi stessi o l'hai trovato da qualche parte? –

+3

L'ho disegnato io stesso. @ BjarkeFreund-Hansen – StarPinkER

+0

@StarPinkER Puoi fornire maggiori informazioni su come l'IPC si svolge nelle app Android. Quando un'app richiede effettivamente la posizione, come convalida il sistema operativo se l'app dispone dell'autorizzazione corrispondente se non genera un'eccezione. –