Android 모듈 경로 간소화

소개



Android Studio 1에서 multi-module project 2을 구성할 때 모듈 이름과 폴더 구성에 대해 다음과 같은 절충점을 고려할 수 있습니다.
  • 폴더 구성의 혼돈을 허용하면서 모듈 이름을 간결하게 한다.
  • 중간 폴더를 설치하여 폴더 구성을 알기 쉽게하면서 모듈 이름에 중간 폴더 이름을 포함시킵니다.

  • 이 문서에서는 이러한 절충안에 대한 설명과 두 가지 이점만을 즐길 수 있는 방법을 설명합니다.

    절충



    ◆ 서브 모듈 이름 간결



    서브모듈명을 :android , :kotlin 와 같이 간결하게 기술한다.

    ☆ 장점



    서브 모듈 이름이 간결해집니다.
    include ':android'
    include ':kotlin'
    

    ☆ 단점



    폴더 구성이 혼돈이 되고 하위 모듈의 네임스페이스도 제한됩니다. 3

    ※ 모듈과 비모듈 폴더 수십 개가 혼연 일체로 한 상황을 상상해 보세요. 혼돈입니다,,,.


    ◆ 중간 폴더 설치



    ☆ 장점



    폴더 구성이 간결해지고 하위 모듈의 네임스페이스도 제한되지 않습니다. 4


    ☆ 단점



    서브 모듈 이름이 낭비로 길어집니다.
    include ':modules:android'
    include ':modules:kotlin'
    

    장점만 즐길 수 있는 방법



    ◆ settings.gradle



    settings.gradle
    include(
            ':android',
            ':kotlin'
    )
    // ↑ は以下と等価です。どちらでもOKです。
    // include ':android'
    // include ':kotlin'
    
    project(":android").projectDir = new File(rootDir, "/modules/android")
    project(":kotlin").projectDir = new File(rootDir, "/modules/kotlin")
    

    ☆ 자동화판



    modules 폴더 바로 아래에 모든 하위 모듈만 배치되면 다음과 같이 모듈 열거에서 설정까지 자동화할 수도 있습니다. 5

    settings.gradle
    new File("modules").listFiles().each { file ->
        def name = file.getName()
        def path = ":$name"
        include path
        project(path).projectDir = new File(rootDir, "/modules/$name")
    }
    

    ◆ 서브 모듈 참조 예


    include ':android'
    include ':kotlin'
    

    ◆ Android 용 표시 예





    결론


  • Android Studio에서 multi-module project를 구성 할 때 Gradle project에 임의의 이름을 설정하여 모듈 이름과 폴더 구성을 모두 간결하게하는 방법을 설명했습니다.
  • settings.gradle 의 기술을 자동화하는 예를 나타냅니다.

  • 그럼, 또.

    추가 (2020-08-04)



    모듈을 동적으로 추가하는 Gradle Plugin을 만들어 보았습니다.



    개요


  • "build.gradle"혹은 "build.gradle.kts"의 존재하는 개소를 모두 include 합니다. 그러나 root project, buildSrc는 무시합니다.
  • 예를 들어, "/modules/android/build.gradle.kts"가 있으면 ":modules:android"가 include됩니다.

  • 사용법


    settings.gradle.kts 혹은 settings.gradle 로 다음과 같이 설정합니다.

    참고 : build.gradle 대신 settings.gradle이므로주의!

    settings.gradle.kts
    buildscript {
        repositories {
            // mavenLocal() // for of-commons SNAPSHOT release
            maven { url = uri("https://beyondseeker.github.io/of-commons/mvn-repo") } // for of-commons
            google()
            jcenter()
        }
        dependencies {
            classpath("com.objectfanatics:gradle-plugin-dynamicmodulesplugin:0.0.1")
        }
    }
    
    apply(mapOf("plugin" to "com.objectfanatics.gradle.plugin.dynamicmodulesplugin"))
    

    settings.gradle
    buildscript {
        repositories {
            // mavenLocal() // for of-commons SNAPSHOT release
            maven { url = uri("https://beyondseeker.github.io/of-commons/mvn-repo") } // for of-commons
            google()
            jcenter()
        }
        dependencies {
            classpath 'com.objectfanatics:gradle-plugin-dynamicmodulesplugin:0.0.1'
        }
    }
    
    apply plugin: 'com.objectfanatics.gradle.plugin.dynamicmodulesplugin'
    



    InteliJ Idea에서도 마찬가지라고 생각됩니다.

    Gradle 적으로는 Multi project. 

    루트 폴더 바로 아래의 모듈이 많을수록 루트 폴더 바로 아래의 네임 스페이스가 압박됩니다.

    중간 폴더 바로 아래에는 모듈용 폴더만 배치되므로 네임스페이스를 100% 사용할 수 있습니다.

    모듈명의 증감이나 변경시에 settings.gradle 를 변경할 필요가 없기 때문에 락틴입니다.

    좋은 웹페이지 즐겨찾기