2013-02-15 7 views
19

Мне было интересно, как можно редактировать исходный код ОС Android, чтобы навязать новое разрешение. Например, если у нас есть разрешение BLUETOOTH, если устройство предлагает новый датчик, то как можно создать соответствующее разрешение, чтобы приложения могли использовать новый датчик на уровне приложения, используя манифестную запись для нового разрешения, доступного в android rom.Android: создайте новое системное разрешение через исходный код AOSP.

Кто-нибудь знает, как создаются новые разрешения на уровне ОС в исходном коде AOSP?

И я думаю, что если мы изменили источник андроида, чтобы добавить новое разрешение, мы должны скомпилировать наш пользовательский SDK для использования разрешения в разработке приложения, иначе существующий SDK даст ошибку времени компиляции, поскольку он не распознает наше пользовательское разрешение ...

Любые идеи, мысли, высоко оцененные.

ответ

22

В рамочном/базы/данных/и т.д./platform.xml

Вы можете определить вновь созданный разрешение с соответствующим 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> 

Другие определения разрешения не в указанном файле, потому что есть на самом деле два вида разрешения на Android, как показано на следующем рисунке. В этом файле определяются только разрешения, выполняемые ядром Linux.

Permission Enforcement in Android

Другие права, такие как ACCESS_FINE_LOCATION, READ_CONTACTS, и т.д., определяет в AndroidManifest.xml в системных приложений (пакеты /.../ AndroidManifest.xml) и рамки (рамки/база/ядро ​​/ RES/AndroidManifest .xml).

После добавления вашего разрешения и связанных с ними кода, компиляции и сборки проекта в соответствии с Building Instruction

+1

+1 Для иллюстрации IPC, вы сделать что один сам или вы нашли его где-нибудь? –

+3

Я сам нарисовал. @ BjarkeFreund-Hansen – StarPinkER

+0

@StarPinkER Можете ли вы дать больше информации о том, как IPC имеет место в приложениях для Android. Когда приложение действительно запрашивает местоположение, как ОС проверяет, имеет ли приложение соответствующее разрешение, если не выбрасывает исключение. –

Смежные вопросы