2014-06-18 13 views
5

Sperimentando con alcune API Android più recenti da AOSP, ho trovato alcune che richiedono l'autorizzazione android.permission.BLUETOOTH_PRIVILEGED. Secondo lo docs, l'autorizzazione "non è disponibile per le applicazioni di terze parti".Ottieni permessi di sistema Android inserendo app in/system/app?

Ho letto altrove che è possibile ottenere autorizzazioni a livello di sistema su un dispositivo rooted installando l'app nella directory/system/app. Ho provato questo sul mio rooted Nexus 5, ma la mia app non ha ancora il privilegio desiderato. (Vedi codice e uscita LogCat di seguito.)

An alternative I have heard è creare la propria ROM Android personalizzata, quindi firmare l'app con la stessa chiave. Potrei farlo, ma preferirei fortemente poter utilizzare un'immagine d'archivio se è possibile.

Quindi qual è? È possibile ottenere autorizzazioni a livello di sistema su un telefono rooted con un'immagine di riserva? Se sì, sto facendo qualcosa di sbagliato?

attività:

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

} 

uscita 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 

manifesto:

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

risposta

12

Come di Android 4.4, privilegiato applicazioni devono essere messi in/system/priv-app, invece di/system/app. Una volta trasferita la mia app, ha ottenuto il privilegio come previsto.

Vedere qui: AOSP Privileged vs System app