내 보낸 서비스에는 권한이 필요하지 않습니다. 무슨 의미입니까? android:name=”org.example.android.myservicedemo.IService” />

AIDL을 통해 다른 응용 프로그램에 바인딩 된 서비스를 만들고 다음과 같이 매니페스트에 추가합니다.

<service android:name=".MyService">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

여기서 IService는 AIDL 인터페이스입니다.

이런 식으로 Eclipse는 Exported service does not require permission 이라는 경고 메시지를 표시합니다 . 를 제거하면 intent-filter경고가 사라지지만 분명히 응용 프로그램이 서비스에 바인딩 할 수 없습니다.

이 경고는 무엇을 의미합니까?



답변

SDK 를 버전 20으로 업데이트 할 때도 같은 문제가있었습니다 . android : exported 속성을 추가하여 제거했습니다 android:exported="false".

<service android:name=".MyService"
    android:exported="false">
    <intent-filter>
        <action android:name="org.example.android.myservicedemo.IService" />
    </intent-filter>
</service>

문서를 참조하십시오


답변

활동 사용을 자신의 애플리케이션으로 제한하려면 exported=false활동의 매니페스트 문에 추가 해야합니다.

다른 응용 프로그램에서 명시 적으로 클래스 이름을 사용하거나 데이터 유형 또는 작업에 의도를 사용하여 더 잘 사용하도록하려면 다음 두 가지 중에서 선택할 수 있습니다.

  • 권한을 사용하여 해당 응용 프로그램을 제한
  • 모든 애플리케이션이이를 사용하도록 허용하면 tools:ignore="ExportedActivity"활동의 매니페스트 문에 추가 할 수 있습니다 .

의 서비스 tools:ignore="ExportedService"및 콘텐츠 제공 업체에 동일한 추론이 적용됩니다 tools:ignore="ExportedContentProvider".


답변

으로 옌스는 , “그것은 사용자가 그들이 그 당신의 AIDL 인터페이스를 통해 노출되어 기쁘게 어떤 방법 당신의 서비스 및 호출에 바인딩 할 수 있습니다 자신의 전화에 다른 (임의) 응용 프로그램을 의미한다”고 말했다.