Ben belirledik sdk.dirve ndk.diriçinde local.properties.
Nasıl tanımlanan değerler okuyorsun sdk.dirve ndk.dirde build.gradledosyaya?
Ben belirledik sdk.dirve ndk.diriçinde local.properties.
Nasıl tanımlanan değerler okuyorsun sdk.dirve ndk.dirde build.gradledosyaya?
local.propertiesAndroid Studio'nun kendi yerel yapılandırması için kullanıldığından ve aynı isimde başka bir dosyaya sahip olmak biraz kafa karışıklığı yaratabilir. Aşağıdaki stackoverflow.com/a/49306091/1587329 sayfasına bakın
android.getSdkDirectory()sadece çalışıyor.
Yanıtlar:
Bunu şu şekilde yapabilirsiniz:
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.rootProjectBir alt projede özellikler dosyasını okuyorsanız kullanın 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
Özellikler dosyasının aynı alt proje dizininde olması durumunda, sadece project.
build.gradledosyanın içinde projectmevcut projeye atıfta bulunan bir değişken vardır. Garip hatalarınız varsa yeni bir soru sorun.
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", "")
}
ve kodda bunu Resources'dan başka bir dize olarak alırsınız -
resources.getString(R.string.default_account_iccid);
@ Rciovati cevabı kesinlikle doğru olmasına rağmen, aynı zamanda değerlerini okuma alternatif bir yolu yoktur sdk.dirve ndk.dir.
İşaret edildiği gibi Gaku Ueda tarafından bu blog girişi (ndk dizini alma) BasePluginiçin sınıf teklifler yöntemleri getNdkFolder()ve getSdkFolder():
def ndkDir = project.plugins.findPlugin('com.android.application').getNdkFolder()
def sdkDir = project.plugins.findPlugin('com.android.application').getSdkFolder()
Not: değiştirmeniz gerekebilir com.android.applicationiçin com.android.librarybir kütüphane inşa ediyoruz eğer
Bu, klasör değerlerini okumanın belki daha zarif bir yoludur. Her ne kadar @rciovati tarafından sağlanan cevabın daha esnek olduğu söylenmelidir, çünkü özellikler dosyasındaki herhangi bir değer okunabilir.
plugins.getPlugin('com.android.library').sdkHandler.getNdkFolder()burada görülebileceği gibi kullanmanız gerekir: stackoverflow.com/questions/28615439/…
Yukarıdaki local.properties dosyasını manuel olarak yükleyen cevap açıkça işe yarıyor ve hangi eklentinin uygulandığını bilmenizi gerektiren bir sonraki cevap da çalışmalıdır.
Bu yaklaşımlar bazıları için biraz daha iyi olabilir çünkü daha genel olduklarından Uygulama, Test veya Kütüphane eklentisini kullanıyor olmanıza bakılmaksızın çalışırlar. Bu parçacıklar ayrıca tüm Android eklenti yapılandırmasına (Ürün Tatları, Derleme Araçları sürümü ve çok daha fazlası) tam programatik erişim sağlar:
Android Gradle Eklentisini kullanan bir build.gradle dosyasına erişmeniz gerekiyorsa, artık doğrudan kullanılabildiği için doğrudan Android DSL'e erişin:
project.android.sdkDirectory
Özel Gradle Tasks sınıfları veya Eklentiler oluşturuyorsanız veya yalnızca hangi özelliklerin mevcut olduğunu görmek istiyorsanız, bunun daha uzun formu (aşağıda) kullanışlıdır.
// 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}");
Bu gönderi adbExesırasında, kesinlikle dikkat çekmeye değer kullanışlı bir özellik de var.
Bu kod, Android Gradle Eklentisi Gradle yaşam döngüsüne göre yapılandırıldıktan SONRA yürütülmelidir. Tipik olarak bu, onu DSL bildiriminden SONRA bir Android uygulaması / kitaplıkları dosyasında executebir yöntemine koyduğunuz Taskveya yerleştirdiğiniz anlamına gelir .androidbuild.gradle
Bu parçacıklar ayrıca, Android Gradle Eklentisi sürümlerini yükselttiğinizde, bu özelliklerin eklenti geliştirildikçe değişebileceği konusunda uyarıda bulunur; bu nedenle, Gradle ve Android Gradle eklentisinin sürümleri ile Android Studio (bazen yeni bir Android sürümü Studio, Android Gradle Eklentisinin yeni bir sürümünü gerektirir).
Bence daha zarif bir yol.
println "${android.getSdkDirectory().getAbsolutePath()}"
android gradle 1.5.0 üzerinde çalışır.
Aşağıdaki Gradle tekniği, uygulamanız tarafından güvenli bir şekilde başvurulabilmesi için bir mülkün local.properties dosyanızda nasıl saklanacağını gösterir.
local.propertiessizin de proje düzeyinde dizine ve sonra aşağıdaki örnekte olduğu gibi mülkünüzü ekleyin:sdk.dir=MY_SDK_DIR
build.gradledosyanızda, bu kodu defaultConfigöğesine ekleyin . Bu, Android Studio'nun derleme zamanında dosyadan sdk.dirözelliği okumasına local.propertiesve ardından derleme değişkenini 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);