[android] build.gradle의 local.properties에 정의 된 속성을 읽는 방법

내가 설정 한 sdk.dirndk.dir에서 local.properties.

어떻게에 정의 된 값 읽습니까 sdk.dirndk.dir에서 build.gradle파일을?



답변

다음과 같이 할 수 있습니다.

Properties properties = new Properties()
properties.load(project.rootProject.file('local.properties').newDataInputStream())
def sdkDir = properties.getProperty('sdk.dir')
def ndkDir = properties.getProperty('ndk.dir')

project.rootProject하위 프로젝트에서 속성 파일을 읽는 경우 사용 합니다 build.gradle.

.
├── app
│   ├── build.gradle <-- You are reading the local.properties in this gradle build file
│   └── src
├── build.gradle
├── gradle
├── gradlew
├── gradlew.bat
├── settings.gradle
└── local.properties

속성 파일이 동일한 하위 프로젝트 디렉토리에있는 경우 project.


답변

local.properties

default.account.iccid=123

build.gradle-

def Properties properties = new Properties()
properties.load(project.rootProject.file("local.properties").newDataInputStream())

defaultConfig {

    resValue "string", "default_account_iccid", properties.getProperty("default.account.iccid", "")
}

코드에서는 리소스에서 다른 문자열로 가져옵니다.

resources.getString(R.string.default_account_iccid);


답변

@rciovati의 대답은 확실히 정확하지만 sdk.dir및 값을 읽는 다른 방법도 있습니다 ndk.dir.

Gaku Ueda (Getting ndk directory) 의이 블로그 항목 에서 지적했듯이 BasePlugin클래스는 getNdkFolder()및에 대한 메서드를 제공합니다 getSdkFolder().

def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()

참고 : 라이브러리를 구축하는 경우 로 변경 com.android.application해야 com.android.library할 수 있습니다.

이것은 폴더 값을 읽는 더 우아한 방법 일 수 있습니다. @rciovati가 제공하는 대답은 속성 파일의 모든 값을 읽을 수 있으므로 더 유연하다고 말해야합니다.


답변

위에서 local.properties를 수동으로로드하는 답변은 분명히 작동하며 어떤 플러그인이 적용되었는지 알아야하는 다음 답변도 작동합니다.

이러한 접근 방식은 응용 프로그램, 테스트 또는 라이브러리 플러그인을 사용하는지 여부에 관계없이 작동하기 때문에 더 일반적이기 때문에 일부에게는 조금 더 나을 수 있습니다. 이러한 스 니펫은 또한 모든 Android 플러그인 구성 (제품 버전, 빌드 도구 버전 등)에 대한 완전한 프로그래밍 방식 액세스를 제공합니다.

Android Gradle 플러그인을 사용하는 build.gradle 파일에 액세스해야하는 경우 이제 직접 사용할 수 있으므로 Android DSL에 직접 액세스하기 만하면됩니다.

project.android.sdkDirectory

긴 형식 (아래)은 사용자 지정 Gradle Tasks 클래스 또는 플러그인을 만들거나 사용 가능한 속성을 확인하려는 경우에 편리합니다.

// def is preferred to prevent having to add a build dependency.
def androidPluginExtension = project.getExtensions().getByName("android");

// List available properties.
androidPluginExtension.properties.each { Object key, Object value ->
    logger.info("Extension prop: ${key} ${value}")
}
String sdkDir = androidPluginExtension.getProperties().get("sdkDirectory");
System.out.println("Using sdk dir: ${sdkDir}");

이 게시 당시에 adbExe는 확실히 주목할만한 편리한 속성이 있습니다.

이 코드는 Android Gradle 플러그인이 Gradle 라이브주기별로 구성된 후에 실행해야합니다. 일반적으로 이것은 executea 메소드에 Task넣거나 androidAndroid 앱 / 라이브러리의 build.gradle파일 에서 DSL 선언 뒤에 배치하는 것을 의미합니다 .

이러한 스 니펫에는 Android Gradle 플러그인 버전을 업그레이드 할 때 플러그인이 개발됨에 따라 이러한 속성이 변경 될 수 있다는 경고가 함께 제공되므로 Gradle 및 Android Gradle 플러그인 버전과 Android Studio (때로는 Android의 새 버전)간에 이동할 때 테스트하기 만하면됩니다. Studio에는 새 버전의 Android Gradle 플러그인이 필요합니다.)


답변

더 우아한 방법이라고 생각합니다.

println "${android.getSdkDirectory().getAbsolutePath()}"

그것은 안드로이드 gradle 1.5.0에서 작동합니다.


답변

내가 설정 한 sdk.dirndk.dir에서 local.properties.

당신은 당신이 수동으로 설정 값을 원하는 경우 재고 수 local.properties그 (루트 프로젝트) 안드로이드 스튜디오에서 이미 사용하고,

당신은 이 파일을 수동으로 수정해서는 안 또는 버전 관리 시스템으로 확인하십시오.

그러나 주석에 나열된 cmake에 대한 특정 면제를 참조하십시오.


답변

속성 추가

다음 Gradle 기술은 앱에서 안전하게 참조 할 수 있도록 local.properties 파일에 속성을 저장하는 방법을 보여줍니다.

  1. 프로젝트 수준 디렉터리 local.properties에서를 열고 다음 예제와 같이 속성을 추가합니다.
sdk.dir=MY_SDK_DIR
  1. 앱 수준 build.gradle파일에서이 코드를 defaultConfig요소 에 추가합니다 . 이를 통해 Android 스튜디오 는 빌드시 파일에서 sdk.dir속성 을 읽은 local.properties다음 빌드 변수를 res/gradleResVlues.xml.
Properties properties = new Properties()
if (rootProject.file("local.properties").exists()) {
    properties.load(rootProject.file("local.properties").newDataInputStream())
}

resValue "string", "sdk_dir", properties.getProperty("sdk.dir", "")
  1. 파일을 저장하고 프로젝트를 Gradle과 동기화합니다.
  2. 다음 코드를 사용하여 문자열 검색
getString(R.string.sdk_dir);