2013-02-15 21 views
19

Tôi đã tự hỏi làm thế nào người ta có thể chỉnh sửa mã nguồn của hệ điều hành Android để áp đặt một quyền mới. Ví dụ như chúng tôi có quyền BLUETOOTH, nếu thiết bị cung cấp cảm biến mới thì có thể tạo quyền thích hợp để ứng dụng sử dụng cảm biến mới ở cấp ứng dụng bằng cách sử dụng mục kê khai cho quyền mới có trong rom android.Android: Tạo quyền hệ thống mới thông qua mã nguồn AOSP.

Có ai biết quyền mới được tạo ra ở cấp hệ điều hành trong mã nguồn AOSP không ?? Và tôi nghĩ rằng nếu chúng tôi đã sửa đổi nguồn Android để thêm quyền mới, chúng tôi phải biên dịch SDK tùy chỉnh của chúng tôi để sử dụng quyền trong phát triển ứng dụng, nếu không SDK hiện tại sẽ cung cấp lỗi thời gian biên dịch, vì nó không nhận ra quyền tùy chỉnh của chúng tôi ...

Bất kỳ ý tưởng, suy nghĩ nào được đánh giá cao.

Trả lời

22

Trong khung/cơ sở/dữ liệu/etc/platform.xml

Bạn có thể xác định quyền mới được tạo bằng gid tương ứng.

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

Các định nghĩa quyền khác không có trong tệp trên, bởi vì thực sự có hai loại quyền trong Android như được hiển thị trong hình sau. Chỉ các quyền được thực thi bởi Linux Kernel mới được định nghĩa trong tệp đó.

quyền

Permission Enforcement in Android

khác như ACCESS_FINE_LOCATION, READ_CONTACTS, vv là định nghĩa trong AndroidManifest.xml trong các ứng dụng hệ thống (gói /.../ AndroidManifest.xml) và khung (framework/cơ sở/lõi/res/AndroidManifest .xml).

Sau khi bạn thêm sự cho phép của bạn và mã liên quan, biên dịch và xây dựng dự án theo Building Instruction

+1

1 Đối với hình minh họa IPC, bạn đã rút ra rằng một mình hoặc bạn đã tìm thấy nó ở đâu đó? –

+3

Tôi đã tự vẽ nó. @ BjarkeFreund-Hansen – StarPinkER

+0

@StarPinkER Bạn có thể cung cấp thêm thông tin về cách IPC diễn ra trong các ứng dụng Android hay không. Khi ứng dụng thực sự yêu cầu vị trí, hệ điều hành xác thực như thế nào nếu ứng dụng có quyền tương ứng nếu không ném ngoại lệ. –