티스토리 뷰

반응형

계속해서 안드로이드 스튜디오의 폴더에 대해 탐색해 봅시다.

java 폴더를 살펴 보면, 패키지명으로 구성된 폴더 아래애 MainActivity 파일이 존재합니다. 해당 파일은 말그대로 메인 액티비티를 나타내는 곳입니다. onCreate 함수는 나중에 생명주기 부분에 설명 드리도록 하겠습니다. 여기서 살펴 볼 부분은 setContentView(R.layout.원하는 파일 명칭) 부분입니다. 에뮬레이터를 작동하면, 여기 적힌 원하는 파일을 실행시켜 에뮬레이터로 나타냅니다. 현재는 activity_main 파일이 적혀 있네요.

 

왼쪽에 androidTest와 test 부분이 있는데, 이는 모두 자동 생성된 폴더이며, 테스트 코드를 작성할 때 사용되는 폴더입니다. java (generated) 폴더 또한 자동으로 생성된 폴더로 그냥 신경안쓰면 됩니다.

 

res 폴더를 살펴 봅시다. 이전에 설명했듯이, 각종 리소스가 담기는 폴더입니다.

drawable 폴더에는 앱에서 사용되는 각종 이미지가 저장됩니다.

layout 폴더는 화면을 그릴때 사용되는 각종 xml 파일들이 저장됩니다.

mipmap 폴더에는 앱에 사용되는 각종 아이콘 파일이 저장되는 곳입니다.

values 폴더는 앱의 테마나, 자주 사용되는 컬러 코드, 문자열 등을 저장하는 곳입니다. 만약에 자주 사용하는 컬러에 특별한 명칭을 부여한 후 사용 시마다 변수로써 불러오고 싶다면, 아래처럼 작성하시면 됩니다.

 

반응형
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="my_favorite_color">#FFBB86FC</color>
</resources>

<resources>
    <string name="app_name">My Application</string>
</resources>

이렇게 색상에 name을 부여하면, 일일이 RGB 컬러의 코드를 #FFBB86FC 이런식으로 입력할 필요가 없습니다. 원하는 색상이나 자주 사용하는 색상을 따로 명칭을 부여해서 관리하면 좋습니다.

특정 문자열도 마찬가지 입니다.

 

이제 Gradle Scripts 부분을 살펴 봅니다. 그레이들은 우리가 작성한 자바/코틀린 같은 언어를 컴퓨터와 같은 기계가 이해하기 쉽도록 컴파일해주는 작업을 도와줍니다. Gradle Scripts는 개발자 분이 직접 건드리는 경우가 많이 없을 것이라고 예상합니다.

 

먼저 하위 폴더는 Project와 Module로 나뉘게 됩니다. 모듈은 여러 프로젝트들 중에서 개별 프로젝트의 단위라고 보면 좋습니다. 프로젝트는 여러 프로젝트를 모아놓은 큰 범위입니다. Project에 정의한 부분은 모든 프로젝트에 영향을 미치고, Module 부분에 정의한 부분은 해당 모듈에만 영향을 미칩니다.

 

우선 그레이들 Project 부분의 코드를 들여다 봅니다.

// Top-level build file where you can add configuration options common to all sub-projects/modules.
buildscript {
    ext.kotlin_version = "1.3.72"
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath "com.android.tools.build:gradle:4.1.3"
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
    }
}

allprojects {
    repositories {
        google()
        jcenter()
    }
}

task clean(type: Delete) {
    delete rootProject.buildDir
}

코드를 보면, 스크립트 생성(Build Script) 부분에서 코틀린 버전과 스크립트를 빌드할 때 도움을 받게 될 저장소(repositories)가 표시됩니다. 이 저장소는 라이브러리 같은 개념으로, 필요한 추가 기능을 저장소를 통해서 가져와 쓰는 개념으로 이해하시면 됩니다. 외부 저장소로는 jcenter, maven 등이 있습니다.

 

dependencies 부분은 그레이들에 필요한 의존성을 지칭한 곳입니다. 안드로이드 개발 시 의존성끼리 충돌되지 않도록 주의해야 합니다. dependencies에는 안드로이드 gradle의 플러그인 버전을 기술합니다. 플러그인은 일종의 확장팩 개념으로 보면 좋습니다. 플러그인을 통해서 처음 설치한 안드로이드 스튜디오에 없는 기능을 가져와 쓸 수 있습니다.

 

allProjects는 모든 프로젝트에서 도움을 받게될 저장소가 표시되어 있습니다.

 

task clean 부분을 보면, 전체 프로젝트 공통으로 사용할수 있는 task를 정의하게 됩니다. 기본적으로 clean 태스크가 정의되며, 이 task는 빌드된 폴더를 제거하는 역할을 합니다.

 

그럼 모듈 단위의 그레이들 코드를 살펴 봅니다.

plugins {
    id 'com.android.application'
    id 'kotlin-android'
}

android {
    compileSdkVersion 30
    buildToolsVersion "30.0.3"

    defaultConfig {
        applicationId "com.example.myapplication"
        minSdkVersion 23
        targetSdkVersion 30
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    kotlinOptions {
        jvmTarget = '1.8'
    }
}

dependencies {

    implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
    implementation 'androidx.core:core-ktx:1.3.2'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'com.google.android.material:material:1.3.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
    testImplementation 'junit:junit:4.+'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}

우선 플러그인 부분에서 사용하려는 플러그인을 명시해 줄 수 있습니다. 아니면, 위의 프로젝트 부분의 그레이들에서 dependencies 통해서 플러그인을 사용하실 수도 있습니다.

 

android 부분을 보면, complieSdkVersion과 BuildToolVersion이 있습니다. complieSdkVersion은 API 버전을 의미하며, 현재는 SDK 30을 기준으로 컴파일하겠다는 의미입니다. BuildToolVersion은 앱 빌드시 기준이 되는 버전을 표시합니다. '빌드'라는 개념은 앱을 최초로 빌드할 때, 정리할 부분을 정리한다는 개념입니다. 앱이나 관련된 파일 실행 시 주석 등 불필요한 코드를 정리하는 부분을 말합니다. 

 

defaultConfig 부분을 살펴보면, 우선 앱 ID로 패키지 명칭이 오게 됩니다. minSdkVersion은 작성된 앱을 설치할 경우 필요한 최소 Sdk 기준을 적는 곳입니다. versionCode 및 Name 부분은 앱이 업데이트 되는 경우, 업데이트의 버전과 코드를 적는 부분인데, 코드는 항상 올라가게 되어 있습니다. 코드가 1에서 내려가는 경우는 없습니다. 즉, 다운그레이드는 없습니다.

 

testInstrumentationRunner 부분은 내가 작성한 테스트 코드를 어떤 방법으로 돌릴 지 표시하는 부분으로 현재는 JUnit을 이용한 단위 테스트 방식입니다. JUnit은 자바 프로그래밍 언어용 유닛 테스트 프레임워크입니다.

 

buildType 부분을 부면, 배포할 목적의 빌드 유형이 기술되는 부분입니다. 기본적으로 안드로이드 스튜디오는 minifyEnabled를 사용하는데, 이 부분을 true로 설정하면, 배포 시 빌드 유형에 대한 코드를 축약합니다. proguardFiles 부분은 기본적인 프로가드 규칙 파일을 명명하는 곳입니다. 이 부분은 proguard-rules.pro 부분과 관련이 있습니다.

 

이후에 compileOptions는 컴파일링 소스코드와 타켓코드가 정의되는 부분이며, dependencies 부분은 앞에 설명한 의존성 부분과 같은 개념입니다.

 

계속에서 폴더를 살펴 봅시다. Gradle은 Java JVM(자바 가상 머신) 기반에서 사용 할 수 있는 오픈소스 빌드 도구 입니다. gradle-wrapper 파일은 그레이들을 설치하거나 연동하지 않아도 사용 할 수 있게 해주는 스크립트 파일입니다. gradle-wrapper.properties는 이러한 파일의 속성을 정의하는 곳인데 그냥 넘어가시면 됩니다.

 

proguard-rules.pro 부분은 중요한 코드나 비밀번호 같은 부분의 코드를 난독화 시켜주는 곳입니다. 개발자 분이 따로 건드릴 부분이 아니며, 자동으로 코드가 난독화되어 중요한 코드의 노출을 막아줍니다.

 

gradle.properties와 local.properties는 그레이들의 속성과 로컬 파일 속성이 담긴 곳입니다. 이 부분도 건들지 않는게 좋습니다.

 

settings.gradle 파일은 프로젝트의 구성 정보를 기록하는 곳으로, 하위 프로젝트들이 어떤 관계로 구성되어 있는지를 기술하게 됩니다. 여러 앱 프로젝트를 형성하게 될 경우, 프로젝트 들의 관계를 여기서 기술할 수 있습니다. 그레이들은 이 파일에 기술된대로 프로젝트를 구성하게됩니다.

반응형
댓글