Android:通过AOSP源代码创建新的系统权限。

时间:2013-02-15 03:44:52

标签: android permissions operating-system kernel android-source

我想知道如何编辑Android操作系统源代码来强加新的权限。例如,我们拥有BLUETOOTH权限,如果设备提供了新的传感器,那么在应用程序级别使用清单条目为android rom中提供的新权限创建权限以便应用程序使用新传感器。

是否有人知道在AOSP源代码中如何在操作系统级别创建新权限?

我认为如果我们修改了android源代码来添加新的权限,我们必须编译我们的自定义SDK以便在应用程序开发中使用权限,否则现有的SDK会给出编译时错误,因为它不会识别我们的自定义权限。 ..

任何想法,想法都高度赞赏。

1 个答案:

答案 0 :(得分:24)

在framework / base / data / etc / 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等其他权限在系统应用程序(packages /.../ AndroidManifest.xml)和framework(frameworks / base / core / res / AndroidManifest.xml)的AndroidManifest.xml中定义。

添加权限和相关代码后,根据Building Instruction

编译和构建项目