15

Рассмотрите простой инструмент, используя BroadcastReceiver для достижения простой цели. Потому что это не должно использоваться другими приложениями, он определяет разрешение с ProtectionLevel из signature или signatureOrSystem:Разрешение BroadcastReceiver для оболочки 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> 

Теперь я хотел бы проверить это, посылая широковещательные через

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

из моего компьютер. Хотя это отлично работает на эмуляторе, оно не работает вообще на реальном устройстве, когда это разрешение установлено. Если разрешение не установлено, все работает по назначению.

Так как я могу определить или предоставить разрешение, чтобы я мог протестировать все это на реальном устройстве с помощью ADB?

Я хочу сделать этот экспортированный приемник немного более безопасным в режиме отладки, так что если есть специальное разрешение для ADB использования или тест времени выполнения, чтобы только звонки от ADB я могу реализовать в Receiver.onReceive(Context, Intent), это помогло бы слишком , Ресивер не должен работать в течение ADB и других приложений одновременно.

+1

Я не понимаю этого утверждения: «... не работает ... до тех пор, пока разрешение установлено. Без него все прекрасно работает ...» вы говорите, что это работает ** без ** разрешение, и вы хотите, чтобы он не работал? – muratgu

ответ

3

Корневая оболочка может отправлять любые широковещательные сообщения, защищенные любыми разрешениями.
Нормальная оболочка также получила множество разрешений, проверьте этот файл в коде AOSP: frameworks\base\packages\Shell\AndroidManifest.xml.

Замените ваш any.test.PERMISSION с разрешением в этом файле в том числе: signatureOrSystem, android.permission.REAL_GET_TASKS. После этого вы можете отправлять трансляцию этому приемнику в оболочку, но другое третье приложение не может.

+0

Замените свой 'any.test.PERMISSION' с одним разрешением в этом файле, что securityLevel является' signatureOrSystem', например 'android.permission.REAL_GET_TASKS'. После этого вы можете отправлять трансляцию этому приемнику в оболочку, но другое третье приложение не может. – Swing

+0

Пакет 'Shell' был представлен с Android 4.3. – tynn

+0

@tynn: можете ли вы предоставить точную команду оболочки, которую вы использовали, которая разрешила вашу проблему? –

Смежные вопросы