2014-06-18 27 views
5

Thử nghiệm với một số API Android mới hơn từ AOSP, tôi đã tìm thấy một số yêu cầu quyền android.permission.BLUETOOTH_PRIVILEGED. Theo số docs, quyền "không khả dụng cho các ứng dụng của bên thứ ba".Nhận quyền của hệ thống Android bằng cách đặt ứng dụng vào/hệ thống/ứng dụng?

Tôi đã đọc ở nơi khác mà bạn có thể nhận quyền cấp hệ thống trên thiết bị gốc bằng cách cài đặt ứng dụng của bạn trong thư mục/system/app. Tôi đã thử điều này trên Nexus 5 bắt nguồn từ tôi, nhưng ứng dụng của tôi vẫn không nhận được đặc quyền mong muốn. (Xem mã và đầu ra LogCat bên dưới.)

An alternative I have heard là tạo ROM Android tùy chỉnh của riêng bạn, sau đó ký ứng dụng bằng cùng một khóa. Tôi có thể làm điều này, nhưng rất muốn có thể sử dụng một hình ảnh cổ phiếu nếu có thể.

Vậy đó là gì? Có thể nhận quyền cấp hệ thống trên điện thoại được root bằng hình ảnh cổ phiếu không? Nếu vậy, tôi có làm gì sai không?

Hoạt động:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if ((this.getApplicationInfo().flags & ApplicationInfo.FLAG_SYSTEM) != 0) { 
     Log.d(TAG, "This is a system application"); 
    } 
    else { 
     Log.d(TAG, "This is not a system application");   
    } 
    if (getApplicationContext().checkCallingOrSelfPermission("android.permission.BLUETOOTH_PRIVILEGED") == PackageManager.PERMISSION_GRANTED) { 
     Log.d(TAG, "I have android.permission.BLUETOOTH_PRIVILEGED"); 
    } 
    else { 
     Log.d(TAG, "I do not have android.permission.BLUETOOTH_PRIVILEGED");    
    }  
    ...  

} 

đầu ra LogCat:

W/PackageManager( 788): Not granting permission android.permission.BLUETOOTH_PRIVILEGED to package com.radiusnetworks.testapp (protectionLevel=18 flags=0x8be47) 
I/ActivityManager( 788): Start proc com.radiusnetworks.testapp for activity com.radiusnetworks.testapp/.MainActivity: pid=3124 uid=10075 gids={50075, 3002, 3001} 
D/MainActivity(3124): This is a system application 
D/MainActivity(3124): I do not have android.permission.BLUETOOTH_PRIVILEGED 

Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.radiusnetworks.testapp" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
    android:minSdkVersion="19" 
    android:targetSdkVersion="19" /> 
    <uses-permission android:name="android.permission.BLUETOOTH" /> 
    <uses-permission 
    android:name="android.permission.BLUETOOTH_PRIVILEGED"/>  
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />  

    <application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@style/AppTheme" > 
    <activity 
     android:name="com.radiusnetworks.testapp.MainActivity" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 

      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    </application> 

</manifest> 

Trả lời

12

Tính đến Android 4.4, Privileged Apps phải được đặt trong/system/priv ứng dụng thay vì của/system/app. Khi tôi chuyển ứng dụng của mình ở đó, nó có đặc quyền như mong đợi.

Xem tại đây: AOSP Privileged vs System app

Các vấn đề liên quan