-
[Android] 어플리케이션 구성 파일안드로이드 2024. 3. 18. 19:56
📝 공부한 Kotlin 정리
[Mainfest 파일]
앱의 기본 특징을 설명하고, 앱의 구성요소인 컴포넌트 (예: 액티비티, 서비스등)를 정의한 XML파일이다.
- <manifest>태그의 package속성
- 이 앱의 고유한 식별자 역할을 하는 패키지 이름이 정의 - <application>태그
- 이 앱을 구성하고 있는 컴포넌트를<application>태그 하위에 정의
- 컴포넌트 종류에 따른 태그- 액티비티의 경우<activity>요소
- 서비스의 경우<service>요소
- 브로드 캐스트 수신기의 경우<receiver>요소
- 콘텐츠 제공자의 경우<provider>요소
- <activity>태그
- android : name 속성이 Activity 서브 클래스의 완전히 정규화된 클래스 이름을 나타냄 - <intent-filter>태그
- 안드로이드 컴포넌트(예,<activity>태그)하위에 포함되는 태그로서, 해당 컴포넌트가 수신 할수 있는 인텐트를 걸러내는 역할을 수행
- MainActivity인 액티비티 컴포넌트가 앱을 시작시키는 시작 점으로서, 애플리케이션 런처 (예,홈스크린)에 등록되어 있음을 나타냄
[코틀린 소스 파일]
- package com.android.helloworld
- MainActivity 클래스가 속한 패키지
- 안드로이드 프로젝트 생성 시에 설정 된 이름 - class MainActivity : AppCompatActivity()
- 안드로이드 액티비티는 Activity의 서브 클래스임
- AppCompatActivity는 Activity의 서브 클래스로서 하위 플랫폼 버전을 지원 - override fun onCreate (savedInstanceState : Bundle?)
- 안드로이드 플랫폼이 호출하는 메소드로서 액티비티가 생성되는 순간에 딱 한 번 호출됨
- 주로 액티비티와 관련된 변수 초기화 및 사용자 인터페이스 설정 코드를 포함함 - setContentView(R.layout.activity_main)
- R.layout.activity_main이 가리키는 리소스를 이 액티비티의 콘텐츠뷰로 사용하겠다는 의미
- R.layout.activity_main은 res/layout 폴더에 있는 activity_main.xml을 가리키는 정적 상수
- (R 클래스에서 정의됨)
[리소스 파일]
어플리케이션 리소스 (예: 이미지 혹은 문자열)를 코틀린 코드에서 분리하여 독립적으로 유지/관리할 수 있도록 함으로써, 다양한 환경 변화(예,화면크기 변화 혹은 사용 언어 변경)를 코드의 변경 없이 수용할 수 있다.
- 리소스 폴더
- drawable: 이미지 리소스
- layout: UI구성에 필요한 XML 리소스
- mipmap: 앱 아이콘 이미지
- values: 문자열 등의 값으로 이용되는 리소스
- 주의사항
- res 하위의 폴더 명은 지정된 폴더 명을 사용해야한다.
- 각 리소스 폴더에 다시 하위 폴더를 정의 할 수는 없다.
- 리소스 파일 명에는 알파벳 대문자를 이용할 수 없다.
- File-based resource names must contain only lowercase a~z, 0~9, or underscore(_)
- aapt도구
- 애플리케이션 리소스를 컴파일하여 컴파일 된 리소스 (R클래스와 패키지 된 리소스 파일) 을 생성한다.
- R.java
- aapt도구에 의해 자동으로 생성된 파일
- R클래스는 리소스를 kotlin 프로그램에서 접근하기 위한 리소스 ID를 정의
[빌드 구성 파일]
새 프로젝트를 시작할 때, 아래와 같이 안드로이드 스튜디오가 프로젝트 구조를 생성하고, 빌드 구성 파일(build.gradle(project level), setting.gradle, build.gradle(module level) 등)을 자동으로 만들고, 적합한 기본값에 따라 파일에 값을 채웁니다.
- build.gradle(Project level)
루트 프로젝트 디렉토리에 있는 최상위 build.gradle파일은 프로젝트의 모든 모듈에 적용되는 빌드 구성을 정의
- settings.gradle
- 앱을 빌드할 때 어떤 모듈을 포함할지를 Gradle에 알려준다.
- 대부분의 프로젝트에서 이 파일은 간단하며 다음 코드만을 포함한다.
include ':app'
- build.gradle(Module level)
[프로젝트 빌드]
Android빌드 시스템은 앱 리소스 및 소스 코드를 컴파일하고, 배포할 수 있는 APK로 패키징한다. AndroidStudio는 고급 빌드 툴 킷인 Gradle을 사용하여 빌드 프로세스를 자동화하고 관리한다.
- 빌드 프로세스
- 컴파일러 역할:
소스 코드를 DEX(Dalvik Executable)파일로 변환하고 그 외 모든 것을 컴파일 된 리소스로 변환한다.
- aapt도구:
리스소 파일(/res폴더 하위 파일)들을 컴파일 된 리소스(R 클래스 파일과 패키지된 리소스 파일)로 변환 - kotlinc 컴파일러:
kotlin 소스 파일(자동으로 생성된 R.java와 사용자가 정의한 .kt파일)을 kotlin 클래스 파일(.class확장자)로 변환 - dx안드로이드 개발도구:
컴파일된 kotlin 클래스 파일을 DEX파일(.dex확장자)로 변환
(이 DEX파일에는 Android기기에서 실행되는 바이트코드가 포함)
- aapt도구:
- APKPackager
- DEX파일과 컴파일된 리소스를 단일 APK에 결합한다.
- 앱을 Android기기에 설치하고 배포하기 위해서, APKPackager는 디버그 또는 릴리스 키스토어를 사용하여 APK를 서명한다.
- 디버그 버전의 앱 (테스트 및 프로파일링 전용의 앱)
- 빌드 중인 경우에는, 패키저가 디버그 키스토어로 앱에 서명
- AndroidStudio는 디버그 키스토어로 새 프로젝트를 자동으로 구성 - 릴리스 버전의 앱 (외부에 릴리스할 앱)
- 빌드 중인 경우에는, 패키저가 릴리스 키스토어로 앱에 서명
- 디버그 버전의 앱 (테스트 및 프로파일링 전용의 앱)
- 최종 APK 생성 전:
패키저는 기기에서 실행 될 때 더 적은 메모리를 사용하도록 앱을 최적화하기 위해 zipalign도구를 사용한다.
'안드로이드' 카테고리의 다른 글
[Android] Activity와 인텐트(Intent) (0) 2024.03.20 [Android] 안드로이드 UI 기본 - 위젯(Widget) (0) 2024.03.19 [Android] 플레이스토어 배포 진행 중 (0) 2024.03.18 [Android] 안드로이드 스튜디오 단축키 모음 (0) 2024.03.18 [Android] Text 키오스크 디벨롭 (fold()/ LocalDateTime(), LocalTime()/ Timer()) (0) 2024.03.18 - <manifest>태그의 package속성