37

나는 비슷한 질문을 여기에서 읽었지만 아직 몇 가지 사항에 대해서는 명확하지 않습니다. 라이브러리 프로젝트를 사용하면 내 전체 프로젝트에 라이브러리와 메인 프로젝트 프로젝트에 대한 두 개의 매니 페스트가 표시됩니다. 어떤 리던던시가 있는지 또는 어떤 리던던시가 있는지 명확하지 않습니다.Android 라이브러리 매니페스트 대 앱 매니페스트

"라이트"및 "유료"버전으로 앱 위젯을 개발 중이므로 거의 모든 코드가 라이브러리 프로젝트에 포함됩니다. 위젯이기 때문에 도서관은 적어도 수신자, 서비스, 설정 활동, 그리고 몇 가지 다른 활동을 가질 것입니다. 의도, 필터 등을 포함하여 이러한 구성 요소의 전체 선언은 어디에 선언해야합니까? 라이브러리의 클래스 또는 라이브러리의 클래스 (예 : android : name = "com.foo.mylibrary.MyService")를 참조하는 응용 프로그램 패키지 자체의 매니페스트에 있습니까?

내가 본 일부 예제는 두 매니페스트에서 모두 선언 된 것처럼 보이지만,이 중 하나를 다른쪽에 두는 것이 아무런 문제가 아닌 것으로 판단됩니다. 라이브러리의 하나는 "기본"응용 프로그램 프로젝트의 다른 - - 도서관 프로젝트를 사용

답변

43

내 전체 프로젝트가 두 매니페스트가된다는 것을 의미합니다 내가있는 경우 또는 간다 무엇인지 명확하지 않다 약간의 중복성입니다.

라이브러리 프로젝트 매니페스트가 현재 사용되지 않습니다.

Android 용 Gradle, 따라서 Android Studio는 매니페스트를 게시하는 라이브러리 프로젝트 및 AAR을 지원합니다. 여기에는 활동 선언, 필수 권한 또는 기능 또는 최소 지원 Android SDK 레벨 등이 포함될 수 있습니다.

라이브러리 매니페스트가 앱의 자체 매니페스트와 병합되는 규칙 - 특히 빌드 유형 및 제품의 특성을 고려한 경우 -은 a bit complex입니다.

따라서 의도, 필터 등을 포함하여 이러한 구성 요소의 전체 선언은 어디에 선언해야합니까?

호스트 프로젝트에서.

라이브러리는 이러한 구성 요소를 게시 할 수 있으며, 필요한 경우 Android Studio 호스트 프로젝트에서 제거 할 수 있습니다. (: 이름 = "com.foo.mylibrary.MyService"예를 들어, 안드로이드)

은 라이브러리에있는 클래스를 참조하는 응용 프로그램 패키지 자체에 대한 라이브러리에 대한 매니페스트에 이동하거나 매니페스트에 있습니까?

후자.

(Android 및 Android Studio의 경우 Gradle에서) 이론적으로 라이브러리가 구성 요소를 게시하는 것이 더 쉽기 때문에 앱 작성자는 할 필요가 없습니다. 개인적으로, 나는 너무 많은 개발자가 불필요한 매니 페스트 항목을 발송할 것이므로이 점에 대해 열렬한 팬이 아닙니다.

+0

감사합니다. 이것은 가장 이해하기 쉽습니다 (이해가 항상 적용되는 것은 아닙니다!). – gordonwd

+2

@CommonsWare - 나는 항상 당신의 정답을 좋아합니다. 그리고이 경우에 그것은 나를 도왔습니다! – Matt

+4

@CommonsWare ADT r20 preview 3 현재 매니페스트를 병합 할 수 있습니다. 그래서 이제는 일반적인 설정을 라이브러리 매니페스트에 넣을 수 있습니다. http://stackoverflow.com/a/10400355/262789 – Benjamin

5

활동, 수신기, 서비스 등과 같이 참조되는 모든 안드로이드 요소는 응용 프로그램 매니페스트에 들어가야합니다. 그렇지 않으면 OS에서 인식하지 못합니다.당신이 짐작으로, 도서관 매니페스트 파일이 꽤 많이 CommonsWare으로

위에서 지적 빈 구현

UPDATE이며, 안드로이드 도구가 이제 여러분을 대신하여 다양한 매니페스트를 병합하려고 시도합니다 구축 할 수 있습니다. 후손에 대한 원래 답변 남기기

+0

감사합니다. 일부 기사를 읽으려면 매니페스트가 병합되거나 비슷한 내용으로 보입니다. 그것이 명확 해지기를 바란다. – gordonwd

+0

이 대답은 4 살이므로 지금은 잘못되었다는 것을 지적하는 것이 좋습니다. 위의 Commonsware의 업데이트 된 답변을 참조하십시오. – JHH

+0

@JHH 완료, 감사합니다. – JRaymond

9

ADT r20 미리보기 3부터 이제 매니페스트를 병합 할 수 있습니다. 그래서 이제는 일반적인 설정을 라이브러리 매니페스트에 넣을 수 있습니다. 자세한 내용은 https://stackoverflow.com/a/10400355/262789을 참조하십시오.

매니페스트 병합 지원 (manifestmerger.enabled=true)에는 Intellij IDEA 버전 13이 필요합니다. 또한 Android Studio 지원을위한 학년 기반 빌드 시스템 appears to be necessary도 있습니다.

관련 문제