2013-02-15 13 views
19

Zastanawiam się, jak można edytować kod źródłowy Androida OS, aby nałożyć nowe pozwolenie. Na przykład, tak jak mamy uprawnienie BLUETOOTH, jeśli urządzenie oferuje nowy czujnik, to w jaki sposób można uzyskać odpowiednie uprawnienia, aby aplikacje mogły korzystać z nowego czujnika, na poziomie aplikacji za pomocą wpisu manifestu dla nowego uprawnienia dostępnego w systemie Android ROM.Android: Utwórz nowe uprawnienie systemowe za pośrednictwem kodu źródłowego AOSP.

Czy ktoś wie jak nowe uprawnienia są tworzone na poziomie systemu operacyjnego w kodzie źródłowym AOSP ??

Myślę, że jeśli zmieniliśmy źródło Androida, aby dodać nowe pozwolenie, musimy skompilować nasz niestandardowy pakiet SDK, aby użyć uprawnień w tworzeniu aplikacji. W przeciwnym razie istniejący pakiet SDK da błąd podczas kompilacji, ponieważ nie rozpoznaje on naszego niestandardowego uprawnienia. ...

Wszelkie pomysły, myśli wysoko cenione.

Odpowiedz

22

W ramowej/Base/data/etc/platform.xml

Można zdefiniować swoją nowo utworzoną z odpowiedniego pozwolenia 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> 

Inne definicje uprawnienie nie jest w powyższym pliku, ponieważ nie są w rzeczywistości dwa rodzaje zgody na Androida, jak pokazano na poniższym rysunku. W tym pliku zdefiniowane są tylko uprawnienia wymuszane przez jądro Linux.

Permission Enforcement in Android

inne uprawnienia, jak ACCESS_FINE_LOCATION READ_CONTACTS, etc definiuje w AndroidManifest.xml w zastosowaniach systemu (pakiety /.../ AndroidManifest.xml) i ramy (ramki/zasada/Rdzeń/RES/AndroidManifest .xml).

Po dodaniu swoją zgodę i związanej kod, skompilować i zbudować projekt według Building Instruction

+1

+1 Dla ilustracji IPC, czy narysować że samemu lub znaleźliście go gdzieś? –

+3

Sam go narysowałem. @ BjarkeFreund-Hansen – StarPinkER

+0

@StarPinkER Czy możesz podać więcej informacji o tym, jak IPC ma miejsce w aplikacjach na Androida. Kiedy aplikacja prosi o lokalizację, w jaki sposób system operacyjny sprawdza, czy aplikacja ma odpowiednie uprawnienia, jeśli nie wyrzuci wyjątku. –

Powiązane problemy