코딩

매니페스트란

Meganpark 2022. 6. 9. 17:01

현재 만들고 있는 aSend에 푸시 알림 기능을 넣으려고 하니까 Firebase에서 앱 매니페스트를 수정하라고 했고 수정하려고 하니까 나는 매니페스트를 잘 모르기에.... 개발 일지 비스무리한 느낌으로 기록을 남기고자 이렇게 시작해본다!

 

  1. 매니페스트란 무엇인가?

'명백한'이라는 뜻을 가지고 있는 Manifest.

 

안드로이드의 모든 앱 프로젝트는 프로젝트 소스 세트의 루트에 AndroidManifest.xml 파일이 있어야한다고 한다. 매니페스트 파일은 Android 빌드 도구, Android 운영체제 및 Google Play에 앱에 관한 필수 정보를 설명한다.

 

/android/app/src/main/res/AndroidManifest.xml 여기의 그 매니페스트 파일이 맞다!

 

이 매니페스트 파일에는 선언해야하는 내용들이 있다고 하는데

  • 앱의 패키지 이름
    • 현재 내가 사용하고 있는 com.asend 그 패키지를 말하는게 맞다!
  • 앱의 구성 요소
    • Activity, Service, Broadcast Reciver, 콘텐츠 제공자 뭐 이런게 있다고 하는데 나는 여기의 Service 때문에 이 글을 쓰고 있긴 하다ㅋㅋㅋ
  • 앱이 필요한 권한
    • 아마도 앱을 실행할 때 카메라 권한이니 다운로드 권한이니 이런거 말하는 것 같다. 그렇다면 나중에 권한에 대한 동의를 구할 때 이 매니페스트 파일을 또 찾게 되지 않을까... 싶다
  • 앱에 필요한 하드웨어 및 소프트웨어 기능
    • 이 부분은 잘 모르겠긴한데 공식 문서에 따르면 '앱에 필요한 기능으로는 다음과 같은 것이 있으니 이런 기능이 없으면 안됩니다~'뭐 그런 느낌인 것 같다. 그리고 Google play store에는 앱에 필요한 기능이나 시스템 버전을 제공하지 않는 기기에 앱 설치를 허용하지 않는다고 한다!
    • uses-feature를 예시로 들고 있는데 나침반 센서가 없는 기기에서 실행할 수 없는 앱이라면 다음과 같이 나침반 센서를 선언할 수 있다고 한다
    • uses-sdk라는 태그도 있는데.... sdk는 소프트웨어 개발자 키트로 머지 않아서 이 것에 대한 포스트?를 작성해야겠다. 아무튼 이건 앱이 호환되는 최소 버전을 나타낼 때 쓰는거같고 여기 안에다가 minSdkVersion 특성을 포함하라고 하는데 그 특성은 build.gradle 파일에서 재정의가 된다고 한다! AndroidManifest에서 정의하긴 하지만 이 부분에서 문제가 생기면 build.gradle 파일로 가야할 것 같다.
 
 
위에서 말한 '다음과 같이'에 해당하는 부분. 이거 저기 사이에 못넣는건가 싶다 ㅠ

아무튼 이런 기능들을 필요로 하는 것 같은데 내가 원하는 것은

이 말을 어떻게 수행해야 하는가 = AndroidManifest.xml 파일에서 Service는 어디에 위치하는가

인데 그러기 위해선 매니페스트라는 파일의 규칙을 좀 알아야 할 것 같다. 여러가지 규칙이 있는 것 같은데

 

 - <manifest> 및 <application> 요소만 필수이다. 두 요소는 각각 한 번만 실행되어야 하고 다른 요소는 실행이 안되어도 상관 없고 여러 번 실행되어도 된다.

 

 - 모든 값은 문자 데이터로서가 아니라 특성을 통해 설정된다

 

 - 같은 레벨에 있는 여러 요스는 순서가 필요 없다. 즉, <activity>, <provider>, <service> 요소는 어느 순서로든 배치할 수 있다! 예외는 2가지가 있는데

 

   1. <activity-alias> 요소는 이 요소를 별칭으로 사용하는 <activity> 다음에 와야 한다

 

   2. <application> 요소는 <manifest> 요소에 있는 마지막 요소여야 한다.

 

아마도 코드를 짜면

 

<manifest>

 

<application>

 

</application>

 

</manifest>

 

이런 느낌으로 해야한다는 것이 아닐까... 싶다

 

 - 특성은 선택 사항이다.

 

 - 어떤 특성은 사용자에게 표시되는 값이 설정된다. 액티비티의 제목 또는 앱 아이콘이 해당되는데 이 때 제목이나 앱 아이콘은 사용자의 언어나 기기에 따라 다르게 나타날 수 있으므로 하드코딩하는 것을 비추천한다....라고 써있다.

 

 

이후 문서에서는 각각의 요소에 대한 참조 문서를 제공하고 마무리가 되는 듯 하다.아마 내가 처음으로 열심히 본 공식 문서가 아닐까 싶다.

 

결론 : <service>는 manifest랑 application 안에 아무 곳에나 위치해도된다!