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 인터페이스를 통해 노출되어 기쁘게 어떤 방법 당신의 서비스 및 호출에 바인딩 할 수 있습니다 자신의 전화에 다른 (임의) 응용 프로그램을 의미한다”고 말했다.