[Android] 안드로이드 스튜디오 프로젝트 구성 요소 살펴보기

Android/Android · 2020. 6. 5. 15:18
반응형

https://survivalcoding.com/p/android_basic

 

될 때까지 안드로이드

될 때까지 안드로이드에 수록된 예제의 라이브 코딩 해설

survivalcoding.com

위 서적을 참고하였습니다.

 

 

 

 

 먼저 안드로이드 프로젝트를 처음 생성하면 나타나는 전체적인 화면입니다.

 

 

안드로이드 프로젝트 생성 후 나타나는 첫 화면

 

 보시는 바와 같이 왼쪽엔 프로젝트 창이 열려있습니다. 만약 보이지 않는다면 좌측 상단 메뉴에서 [ View -> Tool Windows -> project ]를 해주시면 됩니다. 왼쪽의 프로젝트 창을 더 자세히 보겠습니다.

 

프로젝트 창의 모든 파일을 열었을 때

 

 사진을 보시다시피 다양한 파일들이 존재하고 있습니다. 이 글에선 간단하게 맥락만 짚고 넘어가도록 하겠습니다.

 

1. app

 

  프로젝트는 기본적으로 appGradle Scripts 두 부분을 구성됩니다. app 부분은 매니페스트(manifests 폴더), 소스코드(java 폴더), 리소스(res 폴더)가 위치합니다. 소스코드는 앱의 로직을 자바 코드로 작성한 파일이며, 리소스소스코드를 제외한 앱 개발에 필요한 모든 자원이 있는 곳입니다. 예를 들어, 레이아웃, 아이콘, 그림 등을 다룰 수 있습니다. 이제 app 부분에 있는 디렉터리와 파일들에 대해 살펴보겠습니다.

 

 

1_1. 매니페스트(manifests)

 

 매니페스트(manifets)는 앱을 구성하는 요소를 정의하는 파일입니다. 이 manifests는 앱마다 반드시 한 개는 존재해야 합니다. 이 파일은 앱에 어떤 화면이 있는지, 어떤 화면이 메인 화면인지 등을 구성요소들을 정의합니다. 다음 사진은 우리가 처음 안드로이드 프로젝트를 생성하였을 때 있는 기본 AndroidManifest.xml파일입니다.

 

AndroidManifest.xml

 이 사진을 간단하게 설명하자면, 이 앱은 하나의 액티비티(.MainActivity)를 가지고 있고, 이 액티비티가 메인 액티비티이며, 실행 가능한 내용을 <intent-filter>에 포함하고 있습니다. 만약 화면이 두 개인 앱이라면 액티비티 두 개가 필요하고, 이 액티비티를 manifests에 기술해야 합니다.

 

 

1_2. java

 

 자바 소스파일이 위치하는 곳이며 일반 소스 파일테스트 소스 파일을 작성하는 폴더로 나누어져 있습니다.

 

 

- MainActivity.java

 이 파일은 안드로이드 프로젝트를 생성하면 처음에 볼 수 있는 파일입니다. 이 파일은 클래스 정의와 앱을 시작하는 부분으로서, 앱을 빌드했을 때 액티비티를 시작하고 Hello World! 가 표시되는 레이아웃을 불러옵니다. 저희는 이전 포스트에서 레이아웃 Text필드에 Hello World! 안녕하세요 라고 텍스트를 바꿨습니다. 그러니 실행을 했을 때도 Hello World! 안녕하세요 라고 나오겠죠?

 

- ExampleInstrumentedTest.java (android Test)

 이 파일은 앱의 생명주기 및 이벤트를 제어하는 기능을 갖춘 통합 테스트 코드를 작성합니다.

 

 - ExampleUnitTest.java (test)

 이 파일은 데이터 및 동작에 대해 단위 테스트를 작성합니다. ExampleInstrumentedTest.java와 ExampleUnitTest.java는 다음에 다뤄보도록 하겠습니다.

 

 이 세 가지 파일은 같은 패키지인 hello.world.study(변경하지 않았다면 com.example.프로젝트 이름)으로 표시되지만, 실제로는 다른 디렉터리입니다. 프로젝트 창을 Project보기로 전환하면 실제 폴더 구조를 확인할 수 있습니다.

 

Android -> Project로 전환한 모습

 

 

1_2. res

 

 앱을 개발 할 때 필요한 그림, 레이아웃, 아이콘, 메뉴 등 다양한 구성들이 있는 폴더가 res 폴더입니다. 리소스 파일명을 생성하는 규칙이 있는데 먼저 숫자로 시작하면 안 되고, 대문자를 포함할 수 없습니다. 그래서 주로 소문자와 underbar(_)를 조합하여 파일명을 결정합니다. 여기선 MainActivity.java파일의 레이아웃 파일명은 activity_main.xml입니다. res파일들에 대해 좀 더 알아봅시다.

 

 

- res/drawable

 drawable디렉터리는 jpg, png, gif, 9.png(아홉 방향으로 늘어날 수 있는 그림파일. 일명 '나인패치')와 같은 사진 파일과 안드로이드에서 그림을 표현할 수 있는 특수 xml파일이 위치합니다. 그림과 관련된 요소들은 모두 여기에 저장합니다.

이 디렉터리에는 ic_launcher_background.xml과 ic.launcher_foreground.xml은 오레오(API 26)부터 적용되는 Adaptive 아이콘(적응형 아이콘)에 관련된 파일이 있습니다. 오레오 이전 버전의 기기에서는 해당되지 않습니다. Adaptive아이콘에 대해서는 아래 링크를 참고하시기 바랍니다.

 

https://developer.android.com/guide/practices/ui_guidelines/icon_design_adaptive.html

 

적응형 아이콘  |  Android 개발자  |  Android Developers

Android 8.0(API 수준 26)에는 다양한 기기 모델에서 여러 가지 형태로 표시되는 적응형 런처 아이콘이 도입되었습니다. 예를 들어 적응형 런처 아이콘은 한 OEM 기기에서는 원형으로 표시되고 다른 ��

developer.android.com

 

- res/layout

 사용자 인터페이스 레이아웃을 정의하는 xml 파일입니다.

 

- res/layout/activity_main.xml

 프로젝트를 생성하면 함께 생성되는 xml 파일은 액티비티의 레이아웃을 정의합니다. 지금은 HelloWorld! 안녕하세요 라는 텍스트를 가지는 TextView 요소를 포함하고 있습니다.

 

res/layout/activity_main.xml

- res/mipmap

 앱을 실행하는 아이콘 파일이 위치합니다. 아이콘을 나타내는 화면의 해상도(밀도)에 따라 mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi로 구분합니다. 뒤로 갈수록 고해상도 아이콘을 나타냅니다. 아이콘을 모든 기기에 깔끔하게 적용하고 싶다면 모든 해상도의 아이콘을 준비해야 할 것입니다.

 이 디렉터리 안에 있는 ic_launcher.png가 기본 사각형 형태의 아이콘이며, ic_launcher_round.png는 둥근 아이콘입니다. 그 외 ic_launcher.xml과 ic_launcher_round.xml 파일은 위에 언급한 Adaptive 아이콘에 관련된 파일이며, 일반적으로 ic_launcher.png만 준비해도 큰 상관은 없습니다.

 

- res/values

 문자열(strings.xml), 색(colors.xml), 스타일(styles.xml)과 같은 단순한 값이 들어있는 xml 파일입니다.

 

 

2. Gradle Scripts

 

 안드로이드 스튜디오는 Gradle(그레이들) 이라고 하는 빌드 시스템을 사용합니다. 그래서 프로젝트의 각 모듈에는 build.gradle 파일이 하나씩 필요합니다.

 

Gradle Scripts

 

 

- build.gradle (Project: Study)

 프로젝트 수준의 그레이들 설정 파일.

 

- build.gradle (Module: app)

 모듈(앱) 수준의 그레이들 설정 파일.

 

- gradle-wrapper.properties (Gradle Version)

 그레이들 관련 설정.

 

- proguard-rules.pro (ProGuard Rules for app) 

 코드 난독화 도구인 프로가드 설정 파일.

 

- gradle.properties (Project Sttings)

 프로젝트 단위의 그레이들 환경설정 파일.

 

- gradle.properties (Global Properties)

 그레이들의 글로벌 환경설정 파일. 이 파일엔 모든 프로젝트마다 같은 설정을 작성. OS별로 다음 위치에 gradle.properties 파일을 작성.

     - Mac OS X, Linux : ~/.gradle/

     - Window : C:\User\사용자 계정\. gradle\

 

- settings.gradle (Project Settings)

 프로젝트  생성 시 자동으로 생성되며 어떤 모듈이 프로젝트에 포함되는지 기술.

 

- local.properties (SDK Location)

 프로젝트 생성 시 자동으로 생성되며 안드로이드 SDK의 경로가 지정되어 있음.

 

 

 

2_1. Gradle Build System

 

 안드로이드 스튜디오는 Gradle 빌드 시스템을 지원합니다. 빌드(Build)란 실행 가능한 형태의 파일(apk, jar, aar)을 만드는 과정입니다. 안드로이드 프로젝트를 생성하면 두 개의 gradle 파일이 생성되는데, 하나는 프로젝트 수준의 build.gradle, 다른 하나는 모듈 수준의 build.gradle입니다.

 

 

2_1_1. 프로젝트 수준 build.gradle

 프로젝트 build.gradle프로젝트 전체에 공통으로 적용할 설정을 기술합니다. 초기 상태의 build.gradle 파일을 살펴보겠습니다.

 

프로젝트 build.gradle

 buildscript 부분에는 외부 저장소(repositories)와 의존성(dependencies)을 설정합니다. 외부 저장소는 jcenter()와 google()을 기본값으로 사용합니다. 원래는 jcenter()가 기본이었으나 최근에는 구글에서 자체적으로 저장소를 관리하고 있습니다. 안드로이드 스튜디오는 외부 저장소에 등록된 수많은 외부 라이브러리를 쉽게 가져올 수 있습니다.

 

 의존성 부분에는 gradle 플러그인 버전을 작성합니다. gradle 플러그인 버전은 프로젝트를 생성할 때 자동으로 기입되며 만일 버전이 업데이트되면 안드로이드 스튜디오에서 알려줘 사용자에게 업데이트를 유도합니다.

 

 allprojects 부분에는 일반적으로 buildscript에서 지정한 외부 저장소를 지정합니다. task 부분은 전체 프로젝트에서 공통으로 사용할 작업을 정의합니다. 기본으로 추가되어 있는 clean 작업은 빌드할 때 생성되는 build 디렉터리들을 삭제해줍니다. 일반적으로 프로젝트 수준의 gradle 파일을 수정할 일은 거의 없으며 대부분 외부 라이브러리 지정은 모듈 수준의 gradle 파일에서 진행합니다. 

 

 

2_1_2. 모듈 수준 build.gradle

 

 모듈 build.gradle에서는 각 module에 필요한 빌드 설정을 합니다. Study 프로젝트는 기본으로 app 모듈 한 개를 포합하고 있습니다. app은 안드로이드 스튜디오가 기본으로 생성해주는 모듈로서 Phone & Tablet용 앱을 설치하는 apk 파일을 만들어줍니다. 안드로이드 스튜디오 app 모듈 외에도 안드로이드 라이브러리, 인스턴트 앱, 웨어러블 모듈, 안드로이드 TV 모듈 등 다양한 템플릿을 제공하는데, 이 책에서는 app 모듈과 같은 Phone & Tablet 모듈만 다룹니다. app 모듈의 build.gradle 파일을 살펴보겠습니다.

 

모듈 build.gradle

 

 이 파일은 크게 네 부분으로 구성됩니다. 첫 번째는 플러그인 설정입니다. 안드로이드 개발을 하기 위해 'com.android.application 플러그인을 사용합니다. 두 번째는 android 부분으로 AndroidManifest.xml 파일의 설정값을 재지정합니다. 과거 이클립스로 안드로이드 앱을 개발할 때는 VersionCode나 versioniName을 AndroidManifest.xml 파일에 작성하였으나, 지금은 build.gradle에 작성하는 것으로 변경되었습니다.

 

 세 번째는 buildTypes 부분으로 안드로이드는 기본적으로 debug 빌드와 release 빌드를 할 수 있습니다. debug 빌드는 코딩 후 <Run> 버튼으로 기기나 에뮬레이터에 바로 실행했을 때 이루어집니다. 실제로 앱을 출시할 때는 release 빌드를 해야만 합니다. 이때 minifyEnabled의 값을 true로 설정한다면 코드 난독화가 이루어집니다. 앱 출시와 코드 난독화에 대해선 다른 포스트에서 다시 한번 설명하겠습니다.

 

 네 번째로 dependencies 부분입니다. 외부 라이브러리를 지정해주는 부분입니다. 사진에 10번 항목을 보면 src/libs 폴더 안에 jar 확장자로 된 라이브러리를 모두 포함하겠다는 의미입니다. implementation 부분은 빌드할 때 항상 포함되는 라이브러리입니다. 최신 버전의 안드로이드 스튜디오는 AppCompat 라이브러리가 기본으로 포합 됩니다. 또한, comstraint-layout은 안드로이드 스튜디오 2.3 버전부터 정식으로 추가된 레이아웃으로서 안드로이드 스튜디오 2.3 버전 이상에서 프로젝트를 생성하면 기본으로 포함됩니다. 

 

 마지막으로 testImplementation단위 테스트용 라이브러리인 JUnit을 포함합니다. 안드로이드에서는 JUnit을 기본으로 지원하므로 JUnit을 사용할 줄 안다면 바로 테스트에 적용할 수 있습니다. 그리고 androidTestImplementation부분은 앱을 android test 빌드를 할 때 추가되는 라이브러리를 정의합니다.

 

 지금까지 안드로이드 스튜디오 프로젝트 생성 시 볼 수 있는 디렉터리와 파일들에 대해 정리해봤습니다. 공식 홈페이지에도 이 내용에 대한 것이 있으니 한 번 확인해 보시면 더 좋을 것 같습니다.

 

https://developer.android.com/studio/projects?hl=ko

 

프로젝트 개요  |  Android 개발자  |  Android Developers

Android 스튜디오의 프로젝트에는 소스 코드 및 애셋에서 테스트 코드와 빌드 구성에 이르기까지 앱을 위한 작업공간을 정의하는 모든 항목이 포함됩니다.

developer.android.com

 

 내용이 상당히 긴데, 앱을 하나씩 개발할 때마다 계속 보고, 개발하면서도 정말 자주 등장하게 되는 파일들이라 당황하지 않고 이 구조에 대해 익숙해지는 마음으로 정리를 해봤습니다. 감사합니다.

 

 

 

반응형