이번에는 이전에 생성한 프로젝트 내부의 구조에 대해 살펴보도록 한다.

Project 를 만들고 나면, 좌측의 Project View 를 통해서 res/layout 디렉토리에 생긴 메인 Activity (New Project 에서 생성한)를 열어본다.

위와 같은 구조의 프로젝트 내 파일들이 보이게 된다.


Activity Layout

Activity 의 Layout 을 정의하는 XML 이며, Design 과 Text (코드)를 볼 수 있는 Tab 이 모두 존재한다.


이 Activity Layout XML 에는 앱 상단의 앱바와 Floating Action Button 같은 (향후에 더욱 자세히 보도록 하고) 컴포넌트의 속성이 XML 의 Element 와 Attribute 로 설정되어있다

위 처럼 기본적인 Blank Activity 를 생성하면 Action Bar, Content, Floating Action Button 이 생성된다.

Activity 의 전체적인 Layout 은 activity XML 에 정의가 되고, TextView 로 구성된 Content 영역은 content XML 에 정의되어있다. 

Activity XML 의 중간 쯤에 보면

<include layout="@layout/content_hello" />

이 들어가 있고, 이렇게 content_hello 라는 Layout 요소를 추가적으로 포함(include) 하도록 되어있다. 그리고, content_hello.xml 파일을 보면

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Hello World!" />
</RelativeLayout>

위 처럼 TextView Element 로 추가적인 Layout 이 구성됨을 볼 수 있다. 텍스트 내용으로 "Hello World!" 라는 텍스트도 보인다.


Main Activity.java

app\src\main\java\com\goodjoon\helloandroid\HelloActivity.java 파일을 열어본다. 
현재 Main Activity 는 HelloActivity 로 등록되어 있으며. Activity XML 리소스 파일이 이 java 파일에 연결되어 있음을 확인할 수 있다.

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_hello); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

앱을 실행시키면 이 Activity 클래스가 실행되고 Main Activity XML 리소스가 로드되어 Hello World! 가 출력되는 메인 Activity 가 나옴을 확인할 수 있다.


앱 Manifest

app\src\main\AndroidManifest.xml 파일은 앱의 기초적인 특성과 각 컴포넌트를 정의하는 파일이다. 컴포넌트를 추가하면 이 파일이 지속적으로 변경되게 된다.


Gradle 빌드파일

app\build.gradle 파일은 Project View 에서는 "Gradle Scripts" 라는 별개의 그룹으로 표시되는데, 실제 위치는 app\ 디렉토리 밑에 존재한다.

Android Studio 는 앱을 컴파일 하고 빌드하는데에 Gradle 을 사용한다. 

프로젝트의 각 모듈 별로 build.gradle 파일이 존재하며 프로젝트 전체에 또 하나의 build.gradle 파일도 존재한다. 보통 각 모듈 내의 build.gradle 파일이 주요 관심 대상이 된다. 지금 모듈은 app 모듈이다.


위의 build.gradle 은 프로젝트 전체에 대한 build.gradle 스크립트 (프로젝트디렉토리\build.gradle)이고, app 모듈에 대해 build.gradle 파일(프로젝트디렉토리\app\build.gradle)이 추가적으로 존재한다.

Module build.gradle 파일 안에 보면 defaultConfig 을 포함한 몇가지 설정이 있다


apply plugin'com.android.application'

android {
    compileSdkVersion 23
    buildToolsVersion "23.0.2"

    defaultConfig {
        applicationId "com.goodjoon.helloandroid"
        minSdkVersion 17
        targetSdkVersion 23
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}

dependencies {
    compile fileTree(dir'libs'include: ['*.jar'])
    testCompile 'junit:junit:4.12'
    compile 'com.android.support:appcompat-v7:23.1.1'
    compile 'com.android.support:design:23.1.1'
}

  • compileSdkVersion 
    앱을 Compile 하기 위해 사용하는 Platform SDK 의 버전을 명시한다. 기본적으로 설치되어있는 SDK 버전 중 가장 최신의 SDK 를 사용하도록 설정되어있다. 위 설정에서는 API Level 23 (=SDK Version 23 = Android 6.0 = 마쉬멜로우) SDK 를 사용하도록 되어있으므로, 만약 SDK 가 설치되어있지 않다면, SDK Manager로 SDK 를 설치해야 한다.
    SDK 버전이 높다고 해서 구버전 앱을 빌드할 수 없는게 아니며(하위호환성 유지) 오히려 낮은 버전의 SDK 로 빌드하게 되면 더 높은 버전의 Platform 에서는 새로운 기능을 사용할 수 없거나 더 좋은 UX 를 사용할 수 없게된다.
  • applicationId
    New Project Window 에서 지정했던 Package 이름으로, App 의 유일한 식별자이다.
  • minSdkVersion
    현재 앱이 지원하는 가장 낮은 SDK 버전을 지정
  • targetSdkVersion
    현재 앱이 지원하는 가장 높은 SDK 버전. 자신이 테스트해본 가장 높은 버전을 명시하면 된다


기타 리소스

  • drawable-<density>/ 리소스 디렉토리 <ldpi(0.75), mdpi(1.0), hdpi(1.5), xhdpi(2.0)>
    이 디렉토리에는 밀도 독립 픽셀(DIP: Density Independent Pixel)별 drawable 이미지나 아이콘 같은 "그려지는" 리소스가 위치한다. DIP 에 대해서는 나중에 더 설명하도록 하자. 일단, Android 는 다양한 해상도를 갖는 기기가 많으므로, pixel (px) 단위가 아닌 dp 나 sp 단위로 크기를 지정해야 한다.
    참조는 @drawable/image.png 와 같이 사용한다.

  • layout/
    activity XML 과 같이 앱의 UI 를 정의하는 파일들이 위치한다. 

  • menu/
    앱의 메뉴 아이템을 정의하는 파일들이 위치

  • mipmap/
    Launcher 아이콘(앱아이콘)으로, drawable/ 폴더 대신 이 폴더를 사용한다. ic_launcher.png 아이콘 이미지들이 해상도별로 들어있다.

  • values/
    String 이나 Color 정의와 같은 리소스 컬렉션을 포함하는 XML 파일들이 위치하는 디렉토리 이다.




반응형
블로그 이미지

Good Joon

IT Professionalist Since 1999

,