আমি সেট 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()
এখানে ব্যবহার করতে পারেন হিসাবে ব্যবহার করতে হবে: স্ট্যাকওভারফ্লো
উপরে স্থানীয়ভাবে. লোকে লোড হওয়া উত্তরটি স্পষ্টতই কাজ করে এবং পরবর্তী প্লাগইনটি প্রয়োগ করা হয়েছে তা আপনার জানতে হবে এবং সেই সাথে কাজ করা উচিত।
এই পদ্ধতির কারও কারও পক্ষে আরও সাধারণ হতে পারে যেহেতু এগুলি আরও জেনেরিক কারণ তারা অ্যাপ্লিকেশন, পরীক্ষা বা লাইব্রেরি প্লাগইন ব্যবহার করছেন কিনা তা বিবেচনা না করে তারা কাজ করে। এই স্নিপেটগুলি আপনাকে সমস্ত অ্যান্ড্রয়েড প্লাগইন কনফিগারেশনের (পণ্য স্বাদ, বিল্ড সরঞ্জাম সংস্করণ এবং আরও অনেক কিছু) সম্পূর্ণ প্রোগ্রামেটিক অ্যাক্সেস দেয়:
অ্যান্ড্রয়েড গ্র্যাডল প্লাগইন ব্যবহার করা এমন বিল্ড.gradle ফাইলটিতে আপনার যদি অ্যাক্সেসের প্রয়োজন হয় তবে অ্যান্ড্রয়েড ডিএসএল এখন সরাসরি উপলব্ধ হিসাবে এটি সরাসরি অ্যাক্সেস করুন:
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
বা android
ডিএসএল ঘোষণার পরে একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন / লাইব্রেরিতে রাখুনbuild.gradle
ফাইলে রাখুন)।
এই স্নিপেটগুলি এই সতর্কতার সাথে আসে যে আপনি অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণগুলি আপগ্রেড করার সাথে সাথে এই বৈশিষ্ট্যগুলি পরিবর্তন হতে পারে যেহেতু গ্র্যাডল এবং অ্যান্ড্রয়েড গ্রেডল প্লাগইনের পাশাপাশি অ্যান্ড্রয়েড স্টুডিওর সংস্করণ এবং অ্যান্ড্রয়েড স্টুডিও (কখনও কখনও অ্যান্ড্রয়েডের একটি নতুন সংস্করণ) এর মধ্যে চলে যাওয়ার সময় এই বৈশিষ্ট্যগুলি পরিবর্তিত হতে পারে স্টুডিওতে অ্যান্ড্রয়েড গ্রেডল প্লাগইন এর একটি নতুন সংস্করণ প্রয়োজন)।
আমি মনে করি এটি আরও মার্জিত উপায়।
println "${android.getSdkDirectory().getAbsolutePath()}"
এটি অ্যান্ড্রয়েড গ্রেড 1.5.5.0 এ কাজ করে।
নিম্নলিখিত গ্র্যাডল কৌশলটি আপনাকে দেখায় যে কীভাবে আপনার স্থানীয়.properties ফাইলে একটি সম্পত্তি সংরক্ষণ করা যায় যাতে এটি আপনার অ্যাপ্লিকেশন দ্বারা সুরক্ষিতভাবে উল্লেখ করা যায়।
local.properties
আপনার প্রকল্প স্তরের ডিরেক্টরিটি খুলুন এবং তারপরে নীচের উদাহরণের মতো আপনার সম্পত্তি যুক্ত করুন:sdk.dir=MY_SDK_DIR
build.gradle
ফাইলে, defaultConfig
উপাদানটিতে এই কোডটি যুক্ত করুন । এটি অ্যান্ড্রয়েড স্টুডিওর বিল্ড সময় ফাইলটি 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);