
빌드 자동화 도구로, 주로 Java 및 Android 프로젝트에서 사용됩니다. Gradle은 Groovy 또는 Kotlin DSL로 작성된 빌드 스크립트를 사용하여 프로젝트 빌드, 종속성 관리, 테스트 자동화 등을 수행합니다. Gradle의 가장 큰 장점은 유연한 빌드 시스템을 제공하며, 다양한 플랫폼에서 사용할 수 있다는 것입니다.
Gradle Wrapper의 약자로, 프로젝트 내에 포함된 스크립트(gradlew 파일)를 통해 프로젝트가 요구하는 특정 Gradle 버전을 자동으로 다운로드하고 실행할 수 있게 해줍니다. 이를 통해 프로젝트별로 일관된 Gradle 환경을 유지할 수 있으며, 개발자 로컬 환경에 Gradle이 설치되어 있지 않아도 빌드를 수행할 수 있습니다.
예시: CI/CD 환경에서 자동 빌드를 수행할 때 Gradlew를 사용하면, Gradle 버전이 일관되므로 빌드 오류가 줄어듭니다.
"Gradlew는 Gradle의 버전 관리를 자동화해주는 도구로, CI/CD 환경이나 협업 시 Gradle 버전 일관성을 유지하는 데 특히 유용합니다."
Gradle을 사용하는 Android 프로젝트의 기본 구조는 다음과 같습니다:
root/
└── app/
├── src/
│ ├── main/ // 실제 애플리케이션 코드
│ ├── test/ // JUnit 유닛 테스트 코드
│ ├── androidTest/ // Android Instrumentation Test 코드
└── build.gradle // 앱 모듈 빌드 설정
여기서 중요한 디렉토리는 src/test/java/ (JUnit 테스트용)와 src/androidTest/java/ (Android 테스트용)입니다.
src/test/java/: 로컬 JUnit 테스트가 실행되는 위치입니다.src/androidTest/java/: Android 기기나 에뮬레이터에서 실행되는 테스트가 여기에 포함됩니다.저는 보통 java 디렉토리에서 패키지를 만들어 테스트 코드들을 관리했습니다.
우선, 테스트를 수행하고자 하는 프로젝트의 root 디렉토리로 이동합니다.
윈도우 기준 예시:
cd C:\Users\사용자명\AndroidStudioProjects\Test_Project
프로젝트 빌드:
./gradlew build
이 명령어는 프로젝트를 빌드하고 종속성을 다운로드한 후 테스트를 실행합니다.
빌드에 성공한다면 다음과 같은 메시지가 출력됩니다.
JUnit 테스트 실행:
JUnit 테스트는 src/test/java/에 위치하며, 다음 명령어로 실행할 수 있습니다:
./gradlew test
테스트 결과는 build/reports/tests/test/index.html에서 확인할 수 있습니다.
Android Instrumentation Test 실행:
Android Instrumentation Test는 실제 기기나 에뮬레이터에서 실행되며, src/androidTest/java/에 위치합니다:
./gradlew connectedAndroidTest
이 명령어는 연결된 기기에서 테스트를 실행하고 결과는 build/reports/androidTests/connected/index.html에서 확인할 수 있습니다.
호환성 이슈로 build가 잘 진행되지 않을 수 있습니다. 다음 챕터를 통해 확인해보도록 하겠습니다.
Gradle 빌드 도구는 특정 버전의 Android Gradle Plugin(AGP)과 호환성을 요구하며, 이때 사용하는 Java 버전이 중요합니다. 최신 Android Gradle Plugin(8.6.0 이상)은 Java 17을 필요로 하며, Gradle 8.x 이상에서만 동작합니다. E
오류 메시지 예시
Android Gradle plugin requires Java 17 to run. You are currently using Java 11.
Q: 그렇다면, 왜 Java 17을 사용하나요?
Gradle 및 Android 프로젝트에서 Java 17 이상을 사용하는 이유는, Android Gradle Plugin(AGP)의 최신 버전들이 Java 17을 요구하기 때문입니다. 특히 AGP 8.6.0 버전 이상에서는 Java 17을 기반으로 다양한 기능들이 최적화되고, 새로운 API들과 성능 향상을 제공하기 때문에, 이전 버전의 Java(예: Java 11 또는 1.8)로는 호환되지 않는 문제가 발생합니다.
저 또한,,, Java 1.8.. Java 11로 모두 시도했으나... gradle build에서 실패를 맛보며... 에러 메시지로 습득했다는...ㅎ
Java 버전을 업그레이드하고 Gradle 빌드 시스템과 호환성을 확보하는 방법은 운영체제에 따라 약간 다릅니다. 각 운영체제에서의 설정 절차와 Gradle 호환성 이슈의 근본 원인에 대해 설명드리겠습니다.
Mac OS에서 설치 및 설정
Java 설치
Mac에서 Java를 설치하려면 Oracle Java SE mac 다운로드에서 Java 11 또는 Java 17 버전을 다운로드합니다.
설치 확인
설치가 완료된 후, 터미널에서 다음 명령어로 설치된 Java 버전을 확인합니다:
java -version
환경 변수 설정
MacOS에서는 ~/.bash_profile, ~/.zshrc, 또는 ~/.bashrc 파일을 열어 JAVA_HOME 환경 변수를 설정합니다. 예를 들어, Java 17을 설치한 경우:
// Java 17을 설치한 경우
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-17.jdk/Contents/Home
export PATH=$JAVA_HOME/bin:$PATH
변경 사항을 적용하려면 터미널에서 다음 명령어를 실행합니다:
source ~/.zshrc # 또는 ~/.bash_profile
Java 버전 확인
java -version
Windows에서 설치 및 설정
Java 설치
Windows에서 Java를 설치하려면 Oracle Java SE windows 다운로드에서 Java 17을 다운로드합니다.
환경 변수 설정
JAVA_HOME 설정: 시스템 속성 > 고급 시스템 설정 > 환경 변수 이동합니다.
시스템 변수에서 새로 만들기를 클릭한 후, 변수 이름을 JAVA_HOME, 변수 값을 Java 설치 경로로 설정합니다.
C:\Program Files\Java\jdk-17
Path 변수 수정: 환경 변수 창에서 Path 변수를 선택하고 편집 버튼을 클릭합니다. 새 항목을 추가하여 %JAVA_HOME%\bin 경로를 포함시킵니다. 기존 Java 경로가 있는 경우 제거하거나 우선순위를 낮춥니다.
Java 버전 확인
설정이 완료되면, cmd를 열어 아래 명령어로 Java 버전을 확인합니다:
java -version
Java 17이 제대로 설치되었는지 확인할 수 있습니다.
build.gradle.kts에서 필요한 라이브러리와 Gradle 플러그인 버전을 설정하고, Java 17에 맞춘 sourceCompatibility와 targetCompatibility를 지정합니다.android {
compileOptions {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
}이 과정을 차근차근 수행하면, 호환성 문제를 해결하여 정상적으로 build 및 test를 수행할 수 있습니다
app/build/reports/androidTests/connected/debug/index.html 파일을 열어, 각 테스트의 성공/실패 여부와 로그를 확인할 수 있습니다.Gradlew 빌드 명령어:
전체 빌드: ./gradlew build
테스트만 실행: ./gradlew test
안드로이드 기기에서 테스트 실행: ./gradlew connectedAndroidTest
테스트 리포트 확인:
JUnit 테스트 보고서 경로: build/reports/tests/test/index.html
안드로이드 기기 테스트 보고서 경로: build/reports/androidTests/connected/debug/index.html
각 빌드 명령어들은 구체적으로 어떤 작업을 수행하고 동작할까요?
./gradlew build
설명: 프로젝트 전체 빌드 작업을 수행하며, 애플리케이션 패키징을 포함해 배포 가능한 상태로 만드는 과정입니다.
주요 작업:
src/main/assets의 파일들을 병합하여 패키지에 포함src/test/java 및 src/androidTest/java 하위의 테스트 파일을 컴파일하고, test 또는 connectedAndroidTest 명령어를 실행하면 해당 테스트를 수행타겟 디렉토리:
src/main 디렉토리 하위의 모든 소스 파일과 리소스 파일./gradlew test
설명: Unit 테스트만을 실행하는 것으로, 실제 장치나 에뮬레이터 없이도 수행 가능합니다. 이를 통해 각 모듈의 로직이 독립적으로 올바르게 작동하는지 검증
주요 작업:
타겟 디렉토리:
src/test/java 디렉토리 하위의 테스트 소스 파일./gradlew connectedAndroidTest
설명: 통합 테스트로서, 실제 안드로이드 기기나 에뮬레이터에 연결된 상태에서 수행되며, 앱의 UI 및 전체 동작을 실제 환경에서 확인
주요 작업:
src/androidTest/java 디렉토리에 있는 테스트 코드를 기반으로 테스트 APK를 빌드하여, /build/outputs/apk/androidTest/에 저장/build/reports/androidTests/에 HTML 형식으로 저장타겟 디렉토리:
src/androidTest/java 디렉토리 하위의 통합 테스트 파일빌드를 성공적으로 수행하기 위해 Java 버전과 Gradle 설정이 중요했습니다. 특히 Gradle과 Android Gradle Plugin(AGP) 간의 호환성을 맞추는 것이 필수적이었고, Java 17을 요구했습니다.
이 과정을 통해 CLI에서 Gradle을 활용해 Android 프로젝트를 빌드하고, 안드로이드 기기에서 JUnit 테스트를 실행하는 방법을 성공적으로 구현할 수 있었습니다.
이를 통해 Gradle 기반의 Android 프로젝트 빌드와 테스트 과정을 처음부터 끝까지 경험하며, CLI에서 직접 테스트를 실행하고 결과를 확인하는 역량을 갖추게 되었습니다.