build.gradle의 CompileOptions

박은정·2022년 8월 17일
0

TIL

목록 보기
53/70

Gradle이 어떤건지 알기 위해 Android developers 공식문서를 살펴보는 와중, Gradle에 관해 더 자세히 알기 위해서는 빌드구성을 살펴봤습니다.

Android 빌드 시스템

안드로이드 빌드 시스템은 앱 리소스 및 소스 코드를 컴파일하고 개발자가 테스트, 구축, 서명 및 배포할 수 있는 APK 또는 Android App Bundle로 패키징합니다.

안드로이드 빌드 시스템은 유연하기 때문에 앱의 핵심 소스 파일을 수정하지 않고, 맞춤 빌드 구성을 실행할 수 있습니다.

Gradle & Android Plugin

안드로이드 스튜디오는 고급 빌드 툴킷인 Gradle을 사용해서 빌드 프로세스를 자동화하고 관리하고, 개발자가 유연한 맞춤 빌드 구성을 정의하도록 허용해줍니다.
각 빌드 구성에서는 모든 앱 버전에 공통되는 부분을 재사용하면서 자체 코드 및 리소스 세트를 정의할 수 있습니다.

Gradle용 안드로이드 플러그인은 빌드 툴킷과 함께 작동해서 안드로이드 애플리케이션을 빌드하고 테스트하는 데 필요한 특정 프로세스 와 구성 가능한 설정 을 제공합니다.
Gradle과 안드로이드 플러그인은 안드로이드 스튜디오와 독립적으로 실행됩니다. 따라서 Gradle과 안드로이드 플러그인을 각각 업데이트해야 합니다.

따라서 안드로이드 스튜디오 내에서, 컴퓨터의 명령줄 또는 안드로이드 스튜디오가 설치되지 않은 컴퓨터에서 안드로이드 앱을 빌드할 수 있습니다.

프로젝트를 명령줄에서 빌드하던, 원격 컴퓨터에서 빌드하던 안드로이드 스튜디오를 사용해서 빌드하던 빌드의 출력은 동일합니다.

빌드 프로세스

빌드 프로세스에는 프로젝트를 Android 애플리케이션 패키지 APK 또는 Android App Bundle AAB 로 변환하는 여러 가지 도구와 프로세스가 포함됩니다.

빌드 프로세스는 매우 유연하기 때문에 일단 일반적인 빌드 프로세스를 알아봅니다.

  1. 컴파일러는 소스코드를 Dalvik Executable DEX 파일로 변환하고 그 외 모든 것은 컴파일된 리소스로 변환됩니다. 이 DEX파일에는 안드로이드 기기에서 실행되는 바이트 코드가 포함됩니다.

  2. 패키저는 DEX파일과 컴파일된 리소스를 결합해서 선택한 빌드 대상에 따라 APK 또는 AAB를 만듭니다. 앱을 안드로이드 기기에 설치하거나 구글 플레이같은 스토어에 배포하려면 APK또는 AAB에 서명해야 합니다.

  3. 패키저가 디버그 또는 출시 키 저장소를 사용해서 APK나 AAB에 서명합니다.

    3-1. 디버그 버전의 앱 테스트 및 프로파일링 전용 앱 을 빌드 중이라면, 패키저가 디버그 키 저장소 로 앱에 서명합니다. 안드로이드 스튜디오는 디버그 키 저장소로 새 프로젝트를 자동으로 구성합니다.

    3-2. 출시 버전의 앱 외부에 출시할 앱 을 빌드 중이라면, 패키저가 구성해야 하는 출시 키 저장소 로 앱에 서명합니다.

  4. 최종 APK를 생성하기 전에, 패키저는 앱이 기기에서 실행될 때 더 적은 메모리를 사용하도록 앱을 최적화하기 위해 zipalign 도구를 사용합니다.

이러한 빌드 프로세스가 끝나면 배포, 테스트 또는 외부 사용자에게 출시할 수 있는 앱의 디버그나 출시 APK/AAB가 생성됩니다.

빌드 구성 파일

맞춤 빌드 구성을 생성하려면 하나 이상의 빌드 구성 파일이나 build.gradle 파일을 변경해야합니다.

이러한 일반 텍스트 파일은 자바 가상머신 JVM용 동작언어인, Groovy를 사용하는 빌드 로직을 설명하고 조작하기 위해 Domain Specific Language DSL를 사용합니다.

개발자에게 필요한 대부분의 DSL요소가 Gradle용 안드로이드 플러그인에 포함되기 때문에, Groovy에 관해 몰라도 빌드 구성을 시작할 수 있습니다.

안드로이드 스튜디오는 새 프로젝트를 시작할 때 위 그림처럼 일부 파일을 자동으로 만들고, 적절한 기본값으로 파일을 채웁니다.

안드로이드 앱의 표준 프로젝트 구조의 일부인 Gradle 빌드 구성 파일이 있습니다.

빌드 구성을 시작하기 전에 이러한 각 파일의 범위/목적과 파일에서 정의해야 하는 기본 DSL 요소를 이해하는 것이 중요합니다.

Gradle 설정파일

settings.gradle

루트 프로젝트 디렉터리에 있으며, 프로젝트 수준 저장소 설정을 정의하고, 앱을 빌드할 때 포함해야 하는 모듈을 Gradle에 알려줍니다.

다중 모듈 프로젝트에서는 최종 빌드에 들어가야 하는 각 모듈을 지정해야 합니다.

최상위 빌드 파일

최상위 build.gradle 파일은 루트 프로젝트 디렉터리에 있으며, 프로젝트의 모든 모듈에 적용되는 종속 항목을 정의합니다.

기본적으로 최상위 빌드 파일은 plugins 블록을 사용해서 프로젝트의 모든 모듈에 공통되는 Gradle 종속 항목을 정의합니다.
또한 최상위 빌드 파일에는 빌드 디렉터리를 정리하는 코드가 포함되어 있습니다.

프로젝트 범위의 속성 구성

여러 모듈이 포함된 안드로이드 프로젝트의 경우, 프로젝트 수준에서 특정 속성을 정의하고 이러한 속성을 모든 모듈에서 공유하는 것이 유용할 수 있습니다.

이를 위해 최상위 build.gradle 파일의ext 블록에 추가 속성을 추가하면 됩니다.

모듈 수준의 빌드 파일

project/module 이라고는 하지만 내 경우 projectName/android/app 디렉터리에 있다 디렉터리에 있는 모듈 수준 build.gradle 파일을 사용하면 이 파일이 위치하는 특정 모듈의 빌드 설정을 구성할 수 있습니다.

이러한 빌드 설정을 구성하면 추가적인 빌드 유형 및 제품 버전같은 맞춤 패키징 옵션을 제공할 수 있으며, main/앱 매니페스트 또는 최상위 build.gradle 파일에 있는 설정을 다시 정의할 수 있습니다.


CompileOptions

참고페이지

자바 컴파일옵션입니다.

sourceCompatibility 메서드

자바 소스코드의 언어수준입니다.
Gradle Java 플러그인이 사용하는 것과 유사합니다.

targetCompatibility 메서드

생성된 자바 바이트코드의 버전입니다.


자바 8 언어 기능 지원

android {
    ...
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
}

여기서 궁금했던건 이 코드의 의미였는데,
Gradle이 제공하는 Enum JavaVersion에서 상수를 불러와서 사용하는 것이다.

그리고 이렇게 불러와진 상수를 옵션으로 컴파일을 어떻게 하나.. 안드로이드 공식문서를 참고했다.

자바8 언어 기능을 사용하려면 안드로이드 플러그인을 3.0.0 이상으로 업데이트하면 된다.

...

해당 프로젝트에서 컴파일 옵션을 지정하면 그걸 바탕으로 안드로이드 빌드할 때 해당 버전으로 컴파일 하는것같다

별 문제 없는 것같아 일단 이정도로 마무리...

profile
새로운 것을 도전하고 노력한다

0개의 댓글