티스토리 뷰
* 프로젝트 뷰
• 안드로이드 스튜디오에서 프로젝트의 구조를 보기 위해서는 프로젝트 뷰를 이용한다.
• 안드로이드 스튜디오의 프로젝트 뷰는 사용자가 설정한 것에 따라 구조를 다르게 볼 수 있다.
• 개발자들이 보통 개발할 때 주로 사용하는 Android 설정을 기준으로 구조를 파악할 것이다.
• 자세한 것은 아래의 포스팅을 참고
[📱Android/📘기타] - 안드로이드 스튜디오 프로젝트 뷰
프로젝트
• 소스 코드, 이미지 등의 자료, 테스트 코드, 빌드 설정 등 앱을 만들기 위한 모든 항목이 포함된 작업 공간.
- 개발자용 안드로이드 공식 문서의 정의이다.
• 프로젝트는 크게 모듈들과 그 모듈들에 대한 빌드 설정들로 구성되어 있다.
- 모듈이란 하는 일과 기능에 따라 개별적으로 나눠놓은 묶음인데, 하나의 앱이 될 수도 있고, 하나의 라이브러리가 될 수도 있다.
- 즉, 하나의 프로젝트는 기능에 따라 A기능을 하는 앱 모듈, B기능을 하는 라이브러리 모듈, C기능 모듈, D기능 모듈... , 그리고 이 모듈들을 빌드하기 위한 설정으로 구성되고, 이를 합쳐 A + B + C + D 일을 하는 앱이 되는 것이다.
- 처음 새 프로젝트를 생성하면 기본으로 app과 Gradle Scripts가 생성되는데, 여기서 app이 모듈, Gradle Scripts가 빌드 설정이다.
모듈
• 모듈은 환경 설정 파일 + 소스 코드 + 리소스로 구성된다.
- manifests : 환경 설정 파일
- java : 소스 코드
- res : 리소스(이미지 등의 자료)
1. manifests
• 해당 모듈의 환경 설정 파일, 설계도.
• AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.example.fastcampus">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.FastCampus"
tools:targetApi="31">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
• <manifest> : manifest 시작
- package : 패키지 이름. 이 앱의 고유한 아이디가 된다.
• <application> : 애플리케이션에 대한 설정
- allowBackup : 사용자의 데이터가 구글 클라우드에 백업이 되는지 = 앱을 삭제하고 다시 설치해도 기록이 남아 있는지.
- icon, roundIcon : 아이콘
- label : 앱의 이름
- supportsRtl : 나라에 따라 글자 방향 RTL 지원할 것인지.
- theme : 테마 설정
• <activity> : 나중에 자세히 설명. 간단하게 말하면 화면 1장을 의미.
- name : 액티비티 이름
- exported : 다른 앱 또는 시스템에서 해당 액티비티를 호출할 수 있게 할 것인지 여부. 앱의 첫 화면은 무조건 true를 해야 한다.
• <intent-filter> : 인텐트 시 선택하는 것. 나중에 자세히 설명.
2. java
• 앱에 들어가는 자바나 코틀린 소스 코드.
• 패키지명, 패키지명(test), 패키지명(androidTest) 3개가 있다.
- test, androidTest 폴더는 자동 생성되는 폴더로, 테스트 코드를 작성할 때 사용된다. 아직은 신경쓰지 않아도 된다.
- 패키지명 폴더 안에 있는 MainActivity 파일이 소스 코드이다.
3. res
• 이미지 등 앱을 만들 때 필요한 자료들(=리소스)을 보관하는 폴더이다.
• 자세한 것은 아래의 포스팅을 참고
[📱Android/🔍UI] - 13. Resource(리소스)
4. generated
• java나 res 폴더 옆에 (generated) 라고 되어 있는 폴더들은 자동으로 생성되는 폴더로써, 건들이지 않아도 된다.
빌드 설정
• 프로젝트에서 app 등의 모듈들이 아닌 Gradle Scripts에 해당하는 부분이다.
• 빌드란 개발자가 만든 소스 코드와 리소스를 포함한 각종 라이브러리와 모듈들을 합치고, 안드로이드가 알아들을 수 있는 언어로 번역하고 등의 과정을 통해 실제 실행되는 애플리케이션을 만드는 과정을 뜻한다.
• 안드로이드에서는 빌드를 하기 위해 Gradle이라는 도구를 사용한다.
• Gradle로 빌드하기 위한 설정을 모아놓은 곳이 Gradle Scripts라고 이해하면 쉽다.
1. build.gradle
• 빌드를 어떻게 할 것인가 설정을 적는 파일.
• 모듈마다 하나씩 있고, 프로젝트 용도 있다. 즉, 각각의 모듈에 대한 빌드 설정을 할 때는 build.gradle (Module) 파일에, 이 프로젝트 전체에 대한 빌드 설정을 할 때는 build.gradle (Project) 파일에 한다.
• build.gradle (Project)
- repositories : repo라고 부른다. 원격 저장소.
- dependencies : 의존성. 즉, 프로젝트를 만들기 위해 의존해야할 것들. 우리는 Kotlin과 gradle에 의존하고 있다.
• build.gradle (Module)
- compileSdk : 해당 안드로이드 버전 용으로 앱이 빌드된다. 안드로이드는 하위호환이 되기 때문에 이 버전 이전의 버전도 앱을 사용할 수 있다. 즉, 최대 지원 버전이다.
- minSdk : 최소 지원 버전.
-> 최소 버전과 최대 버전을 너무 넓게 잡으면, 고려해야 할 사항이나 지원해야 할 기능이 너무 많아짐.
- targetSdk : 테스트 되는 버전. compileSdk과 맞추는 것이 좋다.
- versionCode, versionName : 앱의 버전. 수정하면서 점점 올라간다. 큰 변화가 있으면 정수 부분, 작은 수정이 있으면 소수 부분이 올라간다.
- testInstrumentationRunner : 테스트 코드를 작동시킬 러너 설정.
- buildTypes : 배포 타입으로 빌드할지 등을 수정할 수 있다.
- minifyEnabled : 코드, 리소스 축소, 난독화, 최적화 등 크기를 줄임. 요즘은 휴대폰 용량이 커서 신경쓰지 않아도 된다.
- proguardFiles getDefaultProguardFile : 코드 난독화 시 사용할 도구.
- compileOption : 컴파일 옵션
- kotlinOption : 코틀린 옵션
- jvmTarget : jvm 버전.
- defendencies : 해당 앱이 사용할 의존성
2. 그 외
• build.gradle을 제외한 나머지 것들은 거의 만질 일이 없다.
• 필요할 때 검색해보고 사용하면 된다.
참고 글
https://curryyou.tistory.com/366
https://leveloper.tistory.com/201
이 글은
패스트 캠퍼스 Android 앱 개발의 정석 with Kotlin 올인원 패키지 Online
강의를 듣고 공부한 내용을 바탕으로 작성되었습니다.
'📱 Android > 💡 개념' 카테고리의 다른 글
[Android/개념] 6. Context(컨텍스트) (0) | 2022.10.28 |
---|---|
[Android/개념] 5. 앱 구성 요소(App Component) (0) | 2022.10.27 |
[Android/개념] 4. 뷰 컨트롤(View Control) (0) | 2022.10.24 |
[Android/개념] 3. Activity(액티비티) (0) | 2022.10.21 |
[Android/개념] 2. Log(로그) (0) | 2022.10.21 |