ANDROID/Android 앱 프로그래밍

[Android] 매니페스트(Manifest), 리소스(Resource) 그리고 그래들(Gradle)

주 녕 2021. 6. 16. 14:04
728x90

모든 내용은 Do it! 안드로이드 앱 프로그래밍을 바탕으로 정리한 것입니다. 

 

안드로이드 앱은 '자바 코드'와 '리소스'로 구성됨

자바 코드에서는 앱의 흐름과 기능을 정의하고,

리소스에서는 레이아웃이나 이미지처럼 사용자에게 보여주기 위해 사용하는 파일이나 데이터를 관리함.

 

매니페스트(Manifest)

프로젝트 구조에서의 위치와 Manifest의 의미

설치된 앱의 구성 요소가 어떤 것인지, 어떤 권한이 부여되었는지 시스템에 알려주는 역할

모든 안드로이드 앱은 가장 상위 폴더에 매니페스트 파일(AndroidManifest.xml)이 있어야 하고, 이 정보는 앱이 실행되기 전에 시스템이 알아야 할 내용들을 정의하고 있음

 

매니페스트의 주요 역할

  • 앱의 패키지 이름 지정
  • 앱 구성 요소에 대한 정보 등록(액티비티, 서비스, 브로드캐스트 수신자, 내용 제공자)
  • 각 구성 요소를 구현하는 클래스 이름 지정
  • 앱이 가져야 하는 권한에 대한 정보 등록
  • 다른 앱이 접근하기 위해 필요한 권한에 대한 정보 등록
  • 앱 개발 과정에서 프로파일링을 위해 필요한 instrumentation 클래스 등록
  • 앱에 필요한 안드로이드 API의 레벨 정보 등록
  • 앱에서 사용하는 라이브러리 리스트

 

매니페스트의 구조

<manifest ...>

    <uses-permission ... />

    <application ... >
        <activity android:name=".MainActivity">
            <intent-filter>
            ...
            </intent-filter>
            <service ...>
            ...
            </service>
        </activity>
    </application>

</manifest>
  • 앱의 타이틀이나 아이콘과 같은 앱 자체의 정보를 속성으로 지정할 수 있음
  • <application> : 애플리케이션을 의미하며 매니페스트 안에 반드시 하나만 있어야 함
  • 나머지 <application> 태그 안의 구성 요소들은 여러 번 추가되어도 됨
  • 메인 액티비티의 경우 항상 <intent-filter> 태그 안에 <action>은 MAIN, <category>는 LAUNCHER가 되어야 함

 

 


 

리소스(Resource)

리소스를 자바 코드와 분리하는 이유는 이해하기 쉽고 유지 관리가 용이하기 때문

/app/res와 /app/assets 폴더를 따로 만들 수 있는데 두 가지 모두 리소스라고 할 수 있고, 대부분 res에서 관리함

- 애셋(Asset)은 동영상이나 웹페이지와 같이 용량이 큰 데이터를 의미함

- 리소스(Resource)는 빌드되어 설치 파일에 추가되지만 애셋(Asset)은 빌드되지 않음

 

  • 리소스가 갱신되면 리소스 정보가 R.java 파일에 자동으로 기록되고 그 정보는 리소스에 대한 내부적인 포인터 정보가 됨
  • 리소스는 /app/res 폴더 밑에 있는 여러 가지 폴더에 나누어 저장되고 리로스 유형별로 서로 다른 폴더에 저장함
    • /app/res/values : 문자열이나 기타 기본 데이터 타입에 해당하는 정보를 저장함
      • 색상, 스타일과 테마를 정의하는 파일도 이 폴더에서 만들 수 있음 (colors.xml, styles.xml, themes.xml)
    • /app/res/drawable : 이미지를 저장함
      • 해상도에 따라 다른 이미지를 보여줄 수 있도록 /app/res/drawable-xhdpi, -hdpi, -mdpi 등으로 나누어 저장
      • 단말에서 해상도에 맞는 폴더를 찾아 그 안의 이미지를 참조함
  • 리소스 정보를 코드에서 사용할 때는 Resource 객체를 참조하여 리소스를 읽어야 함
    • Resource 객체는 Context.getResource() 메서드를 사용해 액티비티 안에서 참조할 수 있음
    • Resource 객체는 리소스의 유형에 따라 읽어 들일 수 있는 메서드가 정의되어 있음

 


 

그래들(Gradle)

그래들(Gradle)은 안드로이드 스튜디오에서 사용하는 빌드 및 배포 도구

💡  안드로이드 앱을 실행하거나 앱 스토어에 올릴 때 소스 파일이나 리소스 파일을 빌드하거나 배포하는 작업이 필요함

→ 이때 사용되는 것이 그래들(Gradle)

 

한 앱의 빌드 설정은 build.gradle 파일에서 관리함

이때 그래들 파일은 프로젝트 수준과 모듈 수준으로 나눠 관리하기 때문에 2개의 build.gradle 파일이 생성됨

 

프로젝트의 Gradle Scripts

 

build.gradle(Project: ~)

  • 프로젝트 안에 들어있는 모든 모듈에 적용되는 설정을 담고 있음
  • 이 파일을 수정하는 경우는 거의 없고, 가끔 외부 도구를 추가하기 위해 dependencies의 classpath를 수정하는 정도?

 

build.gradle(Module: app)

  • 각각의 모듈에 대한 설정을 담고 있음
  • 프로젝트를 생성하면 app 모듈은 기본적으로 만들어지는데, build.gradle(Modlue:app) 파일이 그 정보를 담고 있음
  • 새로운 모듈을 추가한다면 그 모듈에 대한 build.gradle 파일도 새로 추가됨
  • 이 파일에는 빌드에 필요한 정보를 담고 있음
    • applicationId : 앱의 id 값 (앱은 id로 구분되기 때문에 전 세계에서 유일한 값이 되어야 함)
    • compileSdkVersion : 빌드를 진행할 때 어떤 버전의 SDK를 사용할 것인지 지정 (보통 최신 버전 지정)
    • minSdkVersion : 최신 기능을 하위 단말에서 지원하지 못하는 경우 앱에서 사용하는 기능을 지원하기 시작한 버전을 지정
    • targetSdkVersion : 이 앱이 검증된 SDK 버전 지정
    • dependencies : 외부 라이브러리

 

setting.gradle

  • 이 내용은 안드로이드 스튜디오에서 어떻게 설정하는가에 따라 자동으로 변할 수 있음

 

local.properties

  • 현재 사용하고 있는 PC에 설치된 SDK의 위치

gradle.properties

  • 메모리 설정

 

 

728x90