2014-06-18 7 views
5

Experimentieren mit einigen neueren Android APIs von der AOSP, habe ich einige gefunden, die die android.permission.BLUETOOTH_PRIVILEGED Erlaubnis erfordern. Laut der docs ist die Berechtigung "für Anwendungen von Drittanbietern nicht verfügbar."Erhalten Sie Android-Systemberechtigungen, indem Sie App in/system/app?

Ich habe an anderer Stelle gelesen, dass Sie System-Level-Berechtigungen für ein gerootetes Gerät erhalten können, indem Sie Ihre App im Verzeichnis/system/app installieren. Ich habe dies auf meinem Nexus 5 versucht, aber meine App bekommt immer noch nicht das gewünschte Privileg. (Siehe Code und LogCat-Ausgabe unten.)

An alternative I have heard ist, um Ihre eigenen benutzerdefinierten Android-ROM zu bauen, dann die App mit dem gleichen Schlüssel zu unterzeichnen. Ich könnte das machen, würde es aber vorziehen, wenn möglich, ein Stock-Image zu verwenden.

Also was ist das? Ist es möglich, System-Level-Berechtigungen für ein gerootetes Telefon mit einem Aktienbild zu erhalten? Wenn ja, mache ich etwas falsch?

Aktivität:

@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");    
    }  
    ...  

} 

LogCat Ausgang:

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> 

Antwort

12

Ab Android 4.4 Privilegierte Apps stattdessen setzen in/System/priv-App werden müssen von/system/app. Sobald ich meine App dorthin verschoben habe, bekam sie das Privileg wie erwartet.

Siehe hier: AOSP Privileged vs System app