ProgramingTip

Gradle을 사용하여 모든 모듈에 대한 공통 Android 속성을 정의하는 방법

bestdevel 2021. 1. 6. 20:53
반응형

Gradle을 사용하여 모든 모듈에 대한 공통 Android 속성을 정의하는 방법


몇 가지 모듈로 AndroidStudio에서 간단한 프로젝트를 만듭니다. 각 모듈의 gradle 펼쳐지는 다음 코드가 포함되어 있습니다.

android {
    compileSdkVersion 18
    buildToolsVersion "18.1.1"

    defaultConfig {
        minSdkVersion 7
        targetSdkVersion 18
    }
}

이 코드를 기본 build.gradle 펼쳐보기 (프로젝트의 펼쳐)로 이동 어디에서해야합니까? 이 코드는 모든 하위 모듈에 공통입니다.


당신은을 만들 수 build.gradle프로젝트 (모든 모듈을 포함 즉, 폴더)의 루트에, 그리고 rootProject를 구성하십시오.

예를 들어 다음과 같은 경우 :

MyApp
  - Module1/
      - build.gradle
  - Module2/
      - build.gradle
  - settings.gradle

옆에 build.gradle을 추가 할 수 있습니다 settings.gradle.

위의 예에는 실제로 3 개의 Gradle 프로젝트 ( Module1 , Module2rootProject)가 있습니다.

여기서는 다음 build.gradle을 수행 할 수 있습니다.

// use the ext object to add any properties to the project
project.ext {
   compileSdkVersion = 18
}

그런 다음 모듈에서 다음을 수행 할 수 있습니다.

android {
    // here we reference the root project with the "rootProject" object.
    compileSdkVersion rootProject.ext.compileSdkVersion
}

관리자 최상위 build.gradle에서 정의하면 작동하는 것입니다.

subprojects {
    afterEvaluate {project ->
        if (project.hasProperty("android")) {
            android {
                compileSdkVersion 22
                buildToolsVersion '22.0.1'
            }
        }
    }
}

이것은 Android Studio 0.8.9에서 저에게 복입니다. 기본 gradle 래퍼 1.12-all을 사용합니다.

App은 Lite와 Pro에서 사용하는 라이브러리이며 Lite / Pro는 제가 만들고있는 앱의 두 가지 다른 종류입니다. 모든 모듈간에 구성을 공유하고 싶었습니다. 전역 구성은 루트 gradle.build 파일에 있고 모든 하위 프로젝트 / 모듈은 현재 속성을 읽을 수 있습니다.

내 프로젝트 구조는 다음과 달라집니다.

Project/
 gradle.build
 settings.gradle
 App/
  gradle.build
 Lite/
  gradle.build
 Pro/
  gradle.build

프로젝트 / gradle.build에서 하위 프로젝트 구성을 추가했습니다.

subprojects {
    ext.global_compileSdkVersion = 19
    ext.global_buildToolsVersion = "20.0.0"
    ...
}

내선 [var name]은 서브 프로젝트에서 읽을 수있는 변수를 추가합니다. 내 속성을 더 쉽게 볼 수있는 접두사 "global_"을 추가했습니다. (또한 등호를 사용하여 변수에 값을 할당하고 있음을 유의하십시오)

각 하위 프로젝트 / 모듈에서 gradle 파일은 다음과 달라집니다.

android {
    compileSdkVersion global_compileSdkVersion
    buildToolsVersion global_buildToolsVersion
    ...
}

노트!

Android Studio IDE는 하위 프로젝트의 "ext"에 대해 알지 못하는 것 같지만 gradle은 알 수 있습니다. 따라서 gradle 파일을 볼 때 경고로 표시되지만 빌드는 계속 작동합니다. "ext"에 대해 알지 못하기 때문에 추가 한 변수에 대해서도 알지 못하는 것 같으므로 IDE에서 경고로 밑줄이 표시됩니다. 하지만 작동합니다 :)


흠 흥미로운 것은 Android Studio에서 예상대로 작동하는 솔루션을 찾지 못했습니다. 그러나 여기에 제시 한이 솔루션 만 작동하므로 Android Studio 편집기에 경고가 없으며 작동합니다.

모두가하는 것처럼 루트 build.gradle에서 정의하십시오.

buildscript {
    ext {
        projectAppCompatVersion = 'com.android.support:appcompat-v7:23.3.0'
        projectSupportVersion = 'com.android.support:support-v4:23.3.0'
        projectCompileSdkVersion = 23
        projectMinSdkVersion = 22      // 15 android 4.0.3 for release
        projectTargetSdkVersion = 23   //23 requires permission requests , 22 for release
        projectBuildToolsVersion = "24.0.0rc2"
    }
 }

경고없이 액세스하려면 :

compileSdkVersion project.properties.projectCompileSdkVersion
buildToolsVersion project.properties.projectBuildToolsVersion

하지만 코드 완성 및 변수 해결이 Android 스튜디오에서 예상 한대로 작동하지 않습니다.


주 프로젝트의 build.gradle에서 다음과 같이 작성해야합니다.

project.extensions.add("buildToolsVersion", "19.0.3")

하위 프로젝트에서 다음 확장을 사용할 수 있습니다.

buildToolsVersion rootProject.buildToolsVersion

여기에서 더 많은 정보를 찾을 수 있습니다.


프로젝트에 대한 사용자 지정 속성을 만듭니다. 단일 속성을 설정하려면 다음을 사용하십시오.

project.ext.compileSdkVersion = 21

여러 속성을 설정하려면 다음을 사용하십시오.

project.ext {
    compileSdkVersion = 21
    buildToolsVersion = "21.0.1"
    targetSdkVersion = 21
}

최상위 빌드가 Android 빌드가 아닌 경우 단순히 최상위 빌드에서 'android'클로저를 참조하는 것은 작동하지 않습니다. '안드로이드'메소드는 평가 후에 사용할 수 있습니다. 원래는 afterEvaluate 구성 설정을 기반으로하는 작업 솔루션이 있었지만 더 이상 작동하지 않습니다 (Android Studio 0.6.0).

Android 작업이 이미 생성되었습니다. 이는 android.applicationVariants, android.libraryVariants 또는 android.testVariants를 호출 할 때 발생합니다. 이러한 메서드가 호출되면 모델 구성을 계속할 수 없습니다.


업데이트 된 Android Studio에는 새로운 방식의 더 간단한 방법이 있습니다. 이를 위해 최상위 프로젝트 계층에 "gradle.properties"라는 파일이 있습니다. 여기에서 매개 변수를 정의하기 만하면됩니다.

common_parameter='I am common"

모듈의 gradle 파일 (build.gradle)에서 다음과 같이 사용합니다.

module_parameter = common_parameter

그게 다야.

참조 URL : https://stackoverflow.com/questions/20404476/how-to-define-common-android-properties-for-all-modules-using-gradle

반응형