2012-12-09 4 views
2

APK 당 동일한 서비스와 동일한 동작을하는 두 개의 설치된 APK가 있다고 가정합니다. 사용 된 종류 또는 라이브러리와 비슷합니다.두 개의 다른 APK에서 동일한 Android 서비스

마지막으로 설치 한 APK가 서비스의 관점에서 실제로 청구되는 것으로 알고 있습니다.

APK가 작업을 언급하는 서비스에 바인딩하면 실제로 바인딩 할 서버를 지정할 수 없습니다. 아니면 내가 할 수 있니?

이것은 중요합니다. 저는 해당 APK를 빌드하는 데 사용 된 동일한 라이브러리의 두 가지 버전이 있습니다. 특정 APK의 코드는 서비스가 특정 고려 사항으로 구축 될 것으로 기대할 수 있습니다.

엄밀히 말하자면, 둘 이상의 이름, 패키지 이름 (실제 패키지 이름과 다름) 및 동작이 둘 이상인 경우 엄밀히 말하면 특정 서비스에 바인딩 할 수 있어야합니다. 나는 그런 고통스러운 독서에 대 한 미안 해요

...

+0

"사용 된 종류 또는 라이브러리와 비슷합니다"- 라이브러리가 자동으로 매니페스트에 항목을 추가하지 않기 때문에 호스팅 앱은 서비스에 고유 한 동작 문자열을 사용해야합니다. – CommonsWare

+0

2 개 이상의 응용 프로그램이 동일한 서비스를 사용하고자하는 경우에 안드로이드에서 AIDL 서비스를 사용하십시오. 샘플 http://marakana.com/forums/android/examples/48.html에 대한이 링크를 참조하십시오. – curious

+0

그는 반대 상황입니다 . 모든 APK는 자체 서비스에 바인딩하려고합니다. 두 서비스가 같은 이름과 행동을 취한 것입니다. 지금은 변경할 수 없습니다. – OGP

답변

1

이 지금은 변경할 수 없습니다.

재능있는 프로그래머는 1 ~ 2 분 내에이를 변경할 수 있습니다.

마지막으로 설치 한 APK가 서비스의 관점에서 실제로 청구되는 것으로 알고 있습니다.

사실, AFAIK, 첫 번째 것은이기는 것이지 마지막 것이 아닙니다.

둘 이상의 이름, 패키지 이름 (실제 패키지 이름과 다름) 및 동작이 둘 이상인 경우.

같은 패키지 이름으로 동시에 두 개의 앱을 설치할 수 없으므로 불가능합니다. 이 응용 프로그램은 다른 패키지 이름으로 설치해야하지만이 같은 정규화 된 클래스 이름으로 Service를 포함하고 <intent-filter>가 동일한 작업 문자열을 공유 내 보낸 것은

가능하다. 이 질문에 대한 제 의견에 언급했듯이 이것은 가난한 디자인입니다. 말했다되고 그건

, 당신은 문제의 Service을 식별하는 데 startService()에 사용되는 Intent 등에 setComponent()를 사용할 수 있습니다. the two-String constructor을 사용해야하며 첫 번째 매개 변수에 APK의 패키지 이름과 두 번째 매개 변수에 Service의 정규화 된 클래스 이름을 제공해야합니다.

+0

서비스 이름과 패키지 이름이 두 APK를 통해 동일하다는 것을 의미합니다. 사실 bindService 메서드를 호출하고 호출 의도를 변경하는 setClassName을 호출해야했습니다. 이제는 내가 필요한 방식으로 작동합니다.소스 코드가없는 두 개의 APK에 대해 언급하는 것을 잊어 버렸습니다. 코드 주입만으로 수정할 수 있습니다. – OGP

+0

@OGP : 내 대답의 마지막 단락을 다시 읽으십시오. – CommonsWare

+0

나는 바뀌지 않았지만 saetClassName도 잘 작동합니다. 감사. – OGP

관련 문제