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 , Module2 및 rootProject)가 있습니다.
여기서는 다음 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
그게 다야.
'ProgramingTip' 카테고리의 다른 글
SQL에서 UNION 뒤의 어디 문? (0) | 2021.01.06 |
---|---|
Spring에서 BeanPostProcessor와 init / destroy 메소드의 차이점은 무엇입니까? (0) | 2021.01.06 |
R에서 벡터의 요소로 많은 행을 나누는 방법 (0) | 2021.01.06 |
브라우저 아이콘을 활용 WebStorm (0) | 2021.01.06 |
.htaccess 301 단일 페이지 리디렉션 (0) | 2021.01.06 |