मैंने सेट 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एंड्रॉइड स्टूडियो के अपने स्थानीय कॉन्फ़िगरेशन के लिए उपयोग किया जाता है, और उसी नाम की एक और फ़ाइल होने से थोड़ा भ्रम पैदा हो सकता है। नीचे देखें 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।
बकौल गेडु उएदा (एनडीके निर्देशिका प्राप्त करना) द्वारा इस ब्लॉग प्रविष्टि में बताया गया है कि 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/…
उत्तर जो स्थानीय रूप से लोड करता है। स्पष्ट रूप से ऊपर से मैन्युअल रूप से काम करता है, और अगले एक को आपको यह जानना होगा कि कौन सा प्लगइन लागू किया गया था, साथ ही साथ काम करना चाहिए।
ये दृष्टिकोण कुछ के लिए थोड़े बेहतर हो सकते हैं क्योंकि वे अधिक सामान्य हैं क्योंकि वे इस बात पर ध्यान दिए बिना काम करते हैं कि आप अनुप्रयोग, परीक्षण या लाइब्रेरी प्लगइन का उपयोग कर रहे हैं या नहीं। ये स्निपेट्स आपको सभी एंड्रॉइड प्लगइन कॉन्फिगर (प्रोडक्ट फ्लेवर, बिल्ड टूल्स वर्जन और अन्य सभी) के लिए पूर्ण प्रोग्रामेटिक एक्सेस प्रदान करते हैं:
यदि आपको एक बिल्ड.ग्रेड फ़ाइल में पहुंच की आवश्यकता है जो एंड्रॉइड ग्रैडल प्लगिन का उपयोग कर रहा है तो बस एंड्रॉइड डीएसएल को सीधे एक्सेस करें क्योंकि यह अब उपलब्ध है:
project.android.sdkDirectory
यदि आप कस्टम ग्रैडल टास्क क्लासेस या प्लगइन्स बना रहे हैं या केवल यह देखना चाहते हैं कि कौन से गुण उपलब्ध हैं, तो इसका लंबा रूप (नीचे) आसान है।
// 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संपत्ति भी है जो निश्चित रूप से ध्यान देने योग्य है।
इस कोड को एएफट्यूट को अंजाम देना है। एंड्रॉइड ग्रैगल प्लगिन को ग्रैडल जीवन चक्र के अनुसार कॉन्फ़िगर किया गया है। आमतौर पर इसका मतलब है कि आप इसे एंड्रॉइड ऐप / लाइब्रेरीज़ की फ़ाइल में डीएसएल घोषणा के बाद इसे executeएक Taskजगह पर रख सकते हैं ।androidbuild.gradle
ये स्निपेट्स कैविएट के साथ भी आते हैं, जैसा कि आप एंड्रॉइड ग्रैगल प्लगिन संस्करणों को अपग्रेड करते हैं, इन गुणों को बदल सकते हैं क्योंकि प्लगइन विकसित किया गया है, इसलिए ग्रेड और एंड्रॉइड ग्रैगल प्लगइन के संस्करणों के साथ-साथ एंड्रॉइड स्टूडियो (कभी-कभी एंड्रॉइड का एक नया संस्करण) के बीच चलते समय परीक्षण करें स्टूडियो को एंड्रॉइड ग्रैडल प्लगिन के एक नए संस्करण की आवश्यकता है)।
मुझे लगता है कि यह अधिक सुंदर तरीका है।
println "${android.getSdkDirectory().getAbsolutePath()}"
यह एंड्रॉइड 1.5.0 पर काम करता है।
मैंने सेट
sdk.dirऔरndk.dirइन किया हैlocal.properties।
यदि आप में मैन्युअल रूप से सेट मूल्यों के लिए चाहते हैं तो आप पर पुनर्विचार हो सकता है local.propertiesके रूप में है कि (रूट परियोजना के लिए) एंड्रॉयड स्टूडियो द्वारा पहले से उपयोग में है, और
आपको इस फ़ाइल को मैन्युअल रूप से संशोधित नहीं करना चाहिए या इसे अपने संस्करण नियंत्रण प्रणाली में नहीं देखना चाहिए ।
लेकिन टिप्पणियों में सूचीबद्ध cmake के बारे में विशिष्ट छूट देखें।
android.getSdkDirectory()
local.propertiesवैध है, भी। डेवलपर देखें .android.com / studio/ projects/… : Google cmake.dir="path-to-cmake"डिफ़ॉल्ट लुकअप व्यवहार को ओवरराइड करने के लिए जोड़ने की अनुशंसा करता है।
If you set this property, Gradle no longer uses PATH to find CMake.। तो इस पर आपकी क्या राय है? क्या आप इसका उपयोग करने की सलाह देते हैं, या क्या आप इसका उल्लेख करते हैं कि इसे कुछ मामलों में बदला जा सकता है? अर्थात्: यह SHOULD RFC2119 में नहीं है : इसे तब तक करने का प्रयास करें जब तक कि अच्छे कारण न हों?
cmake.dirका प्रलेखित उद्देश्य है है। कुछ खतरनाक करने के लिए कुछ चेतावनी या साइड-इफ़ेक्ट नहीं। यह मैं नहीं हूं, यह Google है जो इसका उपयोग करने की सलाह देता है, जब एक अच्छा कारण होता है (यानी, यदि आप चाहते हैं कि सीडेक खोजने के लिए पाथ का उपयोग न करें)।