2014-06-18 12 views
5

Eksperymentując z nowszymi API Androida z AOSP, znalazłem niektóre, które wymagają uprawnienia Android.permission.BLUETOOTH_PRIVILEGED. Zgodnie z docs, uprawnienie "nie jest dostępne dla aplikacji innych firm".Uzyskaj uprawnienia systemu Android, umieszczając aplikację w/system/app?

Przeczytałem gdzie indziej, że można uzyskać uprawnienia na poziomie systemu na urządzeniu zrootowanym, instalując aplikację w katalogu/system/app. Próbowałem tego na moim zrootowanym Nexusie 5, ale moja aplikacja nadal nie otrzymuje pożądanego przywileju. (Zobacz kod i dane wyjściowe LogCat poniżej.)

An alternative I have heard polega na utworzeniu własnej niestandardowej pamięci ROM z systemem Android, a następnie podpisaniu aplikacji za pomocą tego samego klucza. Mógłbym to zrobić, ale zdecydowanie wolałbym móc wykorzystać obraz zapasowy, jeśli jest to możliwe.

Więc co to jest? Czy możliwe jest uzyskanie uprawnień na poziomie systemu na zrootowanym telefonie za pomocą obrazu giełdowego? Jeśli tak, czy robię coś nie tak?

aktywny:

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

} 

wyjście 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 

Oczywista:

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

Odpowiedz

12

jako Androida 4.4 Uprzywilejowane aplikacje muszą być umieszczone w/System/priv app zamiast z/system/app. Po przeniesieniu aplikacji otrzymałem przywilej zgodnie z oczekiwaniami.

Zobacz tutaj: AOSP Privileged vs System app

Powiązane problemy