2016-01-25 16 views
15

Rozważ proste narzędzie, używając BroadcastReceiver, aby osiągnąć prosty cel. Ponieważ ten nie powinien być używany przez inne aplikacje, definiuje się jako gość z ProtectionLevel z signature lub signatureOrSystem:BroadcastOdpowiedźReceiver dla powłoki adb

<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="any.test"> 

    <permission 
     android:name="any.test.PERMISSION" 
     android:protectionLevel="signatureOrSystem" /> 

    <application android:label="AnyTest"> 
     <receiver 
      android:name=".Receiver" 
      android:exported="true" 
      android:permission="any.test.PERMISSION" /> 
    </application> 
</manifest> 

teraz chciałbym to sprawdzić wysyłając transmisje poprzez

adb shell am broadcast -n any.test/.Receiver 

z moim komputer. Chociaż działa to doskonale na emulatorze, nie działa on w ogóle na prawdziwym urządzeniu, gdy ustawiono to uprawnienie. Jeśli uprawnienia nie są ustawione, wszystko działa zgodnie z przeznaczeniem.

Jak mogę zdefiniować lub udzielić pozwolenia, aby przetestować to wszystko na prawdziwym urządzeniu z ADB?

Chcę, aby ten eksportowany odbiornik trochę bardziej bezpieczny w trybie debugowania, więc jeśli tam jest specjalne pozwolenie na ADB użytkowania lub test run-time do tylko pozwalają na połączenia z ADB mogę wdrożyć w Receiver.onReceive(Context, Intent), to pomogłoby zbyt . Odbiornik nie musi pracować dla ADB i innych aplikacji w tym samym czasie.

+1

Nie rozumiem tego stwierdzenia: "... nie działa ... tak długo jak pozwolenie jest ustawione Bez tego wszystko działa dobrze ..." czy mówisz, że to działa ** bez ** pozwolenie i chcesz, żeby nie działało? – muratgu

Odpowiedz

3

Powłoka główna może wysyłać każdą transmisję chronioną przez dowolne uprawnienia.
Normalna powłoka uzyskała również wiele uprawnień, sprawdź ten plik w kodzie źródłowym AOSP: frameworks\base\packages\Shell\AndroidManifest.xml.

Zastąp swój any.test.PERMISSION jednym zezwoleniem w tym pliku, że poziom ochrony to signatureOrSystem, taki jak android.permission.REAL_GET_TASKS. Następnie możesz wysłać transmisję do tego odbiornika w powłoce, ale inna trzecia aplikacja nie może.

+0

Zastąp swój plik 'any.test.PERMISSION' za pomocą jednego zezwolenia w tym pliku, że parametr protectionLevel to" signatureOrSystem ", na przykład' android.permission.REAL_GET_TASKS'. Następnie możesz wysłać transmisję do tego odbiornika w powłoce, ale inna trzecia aplikacja nie może. – Swing

+0

Pakiet 'Shell' został wprowadzony z systemem Android 4.3. – tynn

+0

@tynn: czy możesz podać dokładną komendę powłoki, z której skorzystałeś, która rozwiązała twój problem? –

Powiązane problemy