개요

  • Android는 eclipse, ant, android studio 등에서 빌드 할 수 있다.

  • 현재 android studio는 가장 일반적으로 사용되고 있는 빌드 환경이다.

  • Android Studio는 Gradle을 기반으로 빌드를 한다.

  • Android Studio에서는 Android를 위해 기능이 추가된, Android Gradle Plugin이라는 라이브러리를 사용한다.

Gradle 버전

  • Android Gradle Plugin은 Gradle에 의존성을 가지기 때문에, 서로 호환되는 버전을 사용해야 한다.

  • 호환되지 않는 버전을 사용하려는 경우, 에러가 발생한다.

표 작성 : 2020년 1월 29일

Android Gradle Plugin VersionRequired Gradle Version
1.00 ~ 1.1.32.2.1 ~ 2.3
1.2.0 - 1.3.12.2.1 ~ 2.9
1.5.02.2.1 ~ 2.1.3
2.0.0 ~ 2.1.22.10 ~ 2.13
2.1.3 ~ 2.2.32.14.1+
2.3.0+3.3+
3.0.0+4.1+
3.1.0+4.4+
3.2.0 ~ 3.2.14.6+
3.3.0 ~ 3.3.24.10.1+
3.4.0 ~ 3.4.15.1.1+
3.5.0+5.4.1 ~ 5.6.4

버전 확인

  • Gradle Version은 gradle-wrapper.properties 파일에 distributionUrl에 정의되어 있다.
distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip
  • Android Gradle Plugin은 Project 수준의 build.gradle의 dependencies에 정의되어 있다.
    dependencies {
        ...
        classpath 'com.android.tools.build:gradle:3.5.1'
    }

고려사항

  • 많은 경우 결과물을 특정 폴더에 이동시키는 gradle을 작성할 것이다. (혹은 bintray나 nexus에 업로드하는 경우)
  • gradle 버전에 따라, 아래 스크립트 조건이 변경되어, 수정해야 하는 경우가 발생한다.

앱의 경우

android.applicationVariants.all { variant ->
    variant.assembleProvider.configure { assemble ->
        assemble.doLast {
            variant.outputs.each { output ->
                def archiveFileName = "${archivesBaseName}-${variant.flavorName}-${variant.buildType.name}-${variant.versionName}.apk"
                def outputFile = output.outputFile
                archiveFileName = archiveFileName.replace("-release", "")
                copy {
                    from outputFile
                    rename outputFile.name, archiveFileName
                    into project.ext.archivesDir + "/${variant.buildType.name}/" + project.ext.archivesName
                }
            }
        }
    }
}

라이브러리의 경우

android {
    libraryVariants.all { variant ->
        variant.assembleProvider.configure { assemble ->
            assemble.doLast {
                variant.outputs.each { output ->
                    def archiveFileName = "${archivesBaseName}-${variant.buildType.name}-${defaultConfig.versionName}.aar"
                    def outputFile = output.outputFile
                    archiveFileName = archiveFileName.replace("-release", "")
                    copy {
                        from outputFile
                        rename outputFile.name, archiveFileName
                        into project.ext.archivesDir + "/${variant.buildType.name}/" + project.ext.archivesName
                    }
                }
            }
        }
    }
}

버전 관리

  • 항상 최신 버전을 유지하는 것이 프로젝트 관리에 좋다.

참고

+ Recent posts