내가 설정 한 sdk.dir
과 ndk.dir
에서 local.properties
.
어떻게에 정의 된 값 읽습니까 sdk.dir
과 ndk.dir
에서 build.gradle
파일을?
내가 설정 한 sdk.dir
과 ndk.dir
에서 local.properties
.
어떻게에 정의 된 값 읽습니까 sdk.dir
과 ndk.dir
에서 build.gradle
파일을?
local.properties
는 Android Studio의 자체 로컬 구성에 사용 중이기 때문에 같은 이름의 다른 파일을 사용하면 약간의 혼란이 생길 수 있습니다. 아래 stackoverflow.com/a/49306091/1587329 참조
android.getSdkDirectory()
단순히 작동합니다.
답변:
다음과 같이 할 수 있습니다.
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
.
build.gradle
파일 내부 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가 제공하는 대답은 속성 파일의 모든 값을 읽을 수 있으므로 더 유연하다고 말해야합니다.
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()
과 같이 사용해야 합니다. stackoverflow.com/questions/28615439/…
위에서 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 라이브주기별로 구성된 후에 실행해야합니다. 일반적으로 이것은 execute
a 메소드에 Task
넣거나 android
Android 앱 / 라이브러리의 build.gradle
파일 에서 DSL 선언 뒤에 배치하는 것을 의미합니다 .
이러한 스 니펫에는 Android Gradle 플러그인 버전을 업그레이드 할 때 플러그인이 개발됨에 따라 이러한 속성이 변경 될 수 있다는 경고가 함께 제공되므로 Gradle 및 Android Gradle 플러그인 버전과 Android Studio (때로는 Android의 새 버전)간에 이동할 때 테스트하기 만하면됩니다. Studio에는 새 버전의 Android Gradle 플러그인이 필요합니다.)
내가 설정 한
sdk.dir
과ndk.dir
에서local.properties
.
당신은 당신이 수동으로 설정 값을 원하는 경우 재고 수 local.properties
로 그 (루트 프로젝트) 안드로이드 스튜디오에서 이미 사용하고,
당신은 이 파일을 수동으로 수정해서는 안 또는 버전 관리 시스템으로 확인하십시오.
그러나 주석에 나열된 cmake에 대한 특정 면제를 참조하십시오.
android.getSdkDirectory()
local.properties
도 합법적입니다. developer.android.com/studio/projects/… 참조 : Google cmake.dir="path-to-cmake"
은 기본 조회 동작을 재정의 하기 위해 추가 하는 것이 좋습니다 .
cmake.dir
에 local.properties 가 아닌 일부주의 또는 위험한 일을의 부작용. 저가 아닙니다. 타당한 이유가있을 때 (예 : Gradle이 PATH를 사용하여 CMake를 찾지 않으려는 경우) 사용을 권장하는 것은 Google입니다.
다음 Gradle 기술은 앱에서 안전하게 참조 할 수 있도록 local.properties 파일에 속성을 저장하는 방법을 보여줍니다.
local.properties
에서를 열고 다음 예제와 같이 속성을 추가합니다.sdk.dir=MY_SDK_DIR
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", "")
getString(R.string.sdk_dir);