21

どうすれば Android OS のソース コードを編集して、新しいアクセス許可を課すことができるのだろうと思っていました。たとえば、BLUETOOTH アクセス許可があるように、デバイスが新しいセンサーを提供する場合、アプリケーションが新しいセンサーを使用するために適切なアクセス許可を作成するには、Android ROM で利用可能な新しいアクセス許可のマニフェスト エントリを使用して、アプリケーション レベルで行います。

AOSP ソース コードの OS レベルで新しいアクセス許可がどのように作成されるか知っている人はいますか??

そして、Android ソースを変更して新しいアクセス許可を追加した場合、アプリケーション開発でアクセス許可を使用するためにカスタム SDK をコンパイルする必要があると思います。そうしないと、既存の SDK がカスタム アクセス許可を認識しないため、コンパイル時にエラーが発生します...

どんなアイデア、考えでも大歓迎です。

4

1 に答える 1

25

フレームワーク/ベース/データ/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 には次の図に示すように 2 種類のパーミッションが存在するためです。そのファイルでは、Linux カーネルによって適用される権限のみが定義されています。

Android でのパーミッションの適用

ACCESS_FINE_LOCATION、READ_CONTACTS などのその他のアクセス許可は、システム アプリケーション (packages/.../AndroidManifest.xml) およびフレームワーク (frameworks/base/core/res/AndroidManifest.xml) の AndroidManifest.xml で定義されます。

アクセス許可と関連コードを追加したら、Building Instructionに従ってプロジェクトをコンパイルおよびビルドします。

于 2013-02-15T03:49:22.043 に答える