Ben belirledik sdk.dir
ve ndk.dir
içinde local.properties
.
Nasıl tanımlanan değerler okuyorsun sdk.dir
ve ndk.dir
de build.gradle
dosyaya?
Ben belirledik sdk.dir
ve ndk.dir
içinde local.properties
.
Nasıl tanımlanan değerler okuyorsun sdk.dir
ve ndk.dir
de build.gradle
dosyaya?
local.properties
Android 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.rootProject
Bir 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.gradle
dosyanın içinde project
mevcut 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.dir
ve ndk.dir
.
İşaret edildiği gibi Gaku Ueda tarafından bu blog girişi (ndk dizini alma) BasePlugin
iç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.application
için com.android.library
bir 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 adbExe
sı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 execute
bir yöntemine koyduğunuz Task
veya yerleştirdiğiniz anlamına gelir .android
build.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.properties
sizin 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.gradle
dosyanızda, bu kodu defaultConfig
öğesine ekleyin . Bu, Android Studio'nun derleme zamanında dosyadan sdk.dir
özelliği okumasına local.properties
ve 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);