2014-03-05 5 views
0

흰색 라벨이 붙은 응용 프로그램을 만듭니다. 나는 aren을 통해 --rename-manifest-package 옵션을 사용하여 프로젝트를 실행한다.aapt 후 서비스 충돌 방지 --rename-manifest-package

이 날 com.foobar에게

쓰기

com.foobar.demo이 같은 장치에 설치 될 버전을 com.foobar.extended 해제 할 수 있습니다.

그러나 서비스가 권한 android : permission = "@ string/permission_name"(설치마다 변경됨) 및 android : exported = "false"를 통해 설정 되더라도 각 앱은 다른 앱 서비스를 호출하려고합니다!

e.e. 내가 시작할 때 com.foobar.extendedcom.foobar.demo의 서비스에 대한 권한이 없다는 보안 예외가 발생했습니다!

-rename-manifest-package는 서비스 인 텐트 필터를 변경하지 않으므로 com.foobar.services.X 인 채로 남아 있습니다. 하나의 앱 서비스가 인 텐트 처리에 우선 순위가 더 높음을 의미합니다.

이 문제를 어떻게 방지 할 수 있습니까? (아마 응용 프로그램 외부의 의도를 전송하지 않습니다 startLocalService() ...)

감사합니다,

존 당신은 매니페스트 파일의 복사본을 제공하지 않은

답변

0

,하지만 난 것 상대 이름을 사용해야하는 반면에 절대 이름을 사용했다고 추측하십시오.

대신

<service android:name="com.foobar.demo.service" /> 

당신은

<service android:name=".service" /> 

가 (이름이 마침표로 시작하는 것을 알)을 사용한다.

+0

AndroidManifest.xml 파일에서 상대 서비스 이름을 사용하고 있습니다. 그러나 서비스를 시작하면 String 액션으로 Intent를 사용합니다. 나는. "com.foobar.services.MyService". – johncc

+0

-rename-manifest-package는 서비스를 시작하는 데 사용하는 내부 문자열을 변경하지 못합니다. 매니페스트에 상대 이름을 사용하는 이유는 런타임에'context.packageName() + ".service"'를 사용하여 이름을 빌드 할 수 있기 때문입니다 – zmarties