जवाबों:
संसाधनों के साथ, विभिन्न भाषाओं, ओएस संस्करणों, स्क्रीन झुकाव, आदि के लिए विकल्प प्रदान करने के लिए अंतर्निहित समर्थन है, जैसा कि यहां वर्णित है । संपत्ति में से कोई भी उपलब्ध नहीं है। इसके अलावा, एपीआई के कई हिस्से संसाधन पहचानकर्ताओं के उपयोग का समर्थन करते हैं। अंत में, संसाधनों के नाम निरंतर फ़ील्ड नामों में बदल जाते हैं जिन्हें संकलन समय पर जांचा जाता है, इसलिए कोड और स्वयं संसाधनों के बीच बेमेल के लिए एक अवसर कम है। इसमें से कोई भी संपत्ति पर लागू नहीं होता है।
तो क्यों एक संपत्ति फ़ोल्डर बिल्कुल है? यदि आप उस परिसंपत्ति की गणना करना चाहते हैं जिसे आप रन टाइम में उपयोग करना चाहते हैं, तो यह बहुत आसान है। संसाधनों के साथ, आपको उन सभी संसाधन आईडी की सूची घोषित करनी होगी, जिनका उपयोग किया जा सकता है और सूची में एक सूचकांक की गणना कर सकते हैं। (यह अजीब तरह का है और विकास चक्र में संसाधनों का सेट बदलने पर त्रुटि के अवसरों का परिचय getIdentifier
देता है।) एक फ़ोल्डर पदानुक्रम में भी व्यवस्थित किया जाना चाहिए, जो संसाधनों द्वारा समर्थित नहीं है। यह डेटा के प्रबंधन का एक अलग तरीका है। हालाँकि संसाधन अधिकांश मामलों को कवर करते हैं, लेकिन परिसंपत्तियों का कभी-कभार उपयोग होता है।
एक अन्य अंतर: लाइब्रेरी प्रोजेक्ट में परिभाषित संसाधन स्वचालित रूप से उन एप्लिकेशन प्रोजेक्ट्स पर आयात किए जाते हैं जो लाइब्रेरी पर निर्भर करते हैं। संपत्ति के लिए, ऐसा नहीं होता है; एसेट फाइलें एप्लिकेशन प्रोजेक्ट (एस) की एसेट्स डायरेक्टरी में मौजूद होनी चाहिए। [EDIT: एंड्रॉइड के नए ग्रेडल-आधारित बिल्ड सिस्टम (एंड्रॉइड स्टूडियो के साथ उपयोग किया गया) के साथ, यह अब सच नहीं है। पुस्तकालय परियोजनाओं के लिए एसेट निर्देशिकाओं को .AR फ़ाइलों में पैक किया जाता है, इसलिए पुस्तकालय परियोजनाओं में परिभाषित संपत्ति को आवेदन परियोजनाओं में मिला दिया जाता है (इसलिए /assets
यदि वे संदर्भित पुस्तकालय में हैं तो उन्हें आवेदन की निर्देशिका में मौजूद नहीं होना चाहिए ]]
संपादित करें: यदि आप अपने ऐप के साथ कस्टम फ़ॉन्ट पैकेज करना चाहते हैं, तो एक और अंतर पैदा होता है। फ़ाइल सिस्टम या आपके ऐप की निर्देशिका में संग्रहीत फ़ॉन्ट फ़ाइल से बनाने के लिए एपीआई कॉल हैं । लेकिन निर्देशिका में संग्रहीत फ़ॉन्ट फ़ाइल (या , जो निर्देशिका के उपयोग की अनुमति होगी ) से बनाने के लिए कोई एपीआई नहीं है । [ नोट: एंड्रॉइड ओ (अब अल्फा पूर्वावलोकन में उपलब्ध है) के साथ आप कस्टम फोंट को संसाधनों के रूप में शामिल करने में सक्षम होंगे। इस लंबे समय से अतिदेय सुविधा का वर्णन यहाँ देखें । हालाँकि, जब तक आपका न्यूनतम एपीआई स्तर 25 या उससे कम है, आपको संसाधनों के बजाय संपत्ति के रूप में पैकेजिंग कस्टम फोंट के साथ रहना होगा।]Typeface
assets/
Typeface
res/
InputStream
res/
raw/
निर्देशिका में फ़ाइलों को लिखना संभव है ?
/res
'और' एसेट्स 'डाइरेक्टरी में सब कुछ केवल-पढ़ने के लिए है, क्योंकि वे .apk फ़ाइल में पैक किए गए हैं।
दोनों काफी समान हैं। दोनों के बीच वास्तविक मुख्य अंतर यह है कि res
निर्देशिका में प्रत्येक फ़ाइल को एक पूर्व-संकलित किया जाता है ID
जिसे आसानी से एक्सेस किया जा सकता है R.id.[res id]
। यह जल्दी और आसानी से छवियों, ध्वनियों, आइकन तक पहुंचने के लिए उपयोगी है ...
assets
निर्देशिका अधिक एक फाइल सिस्टम की तरह है और तुम वहाँ में चाहते हैं किसी भी फाइल डाल करने के लिए और अधिक स्वतंत्रता प्रदान करता है। आप तब उस सिस्टम की प्रत्येक फाइल को एक्सेस कर सकते हैं जब आप जावा के माध्यम से किसी भी फाइल सिस्टम में किसी भी फाइल को एक्सेस कर रहे हों। यह निर्देशिका खेल विवरण, शब्दकोश, ... आदि जैसी चीजों के लिए अच्छा है। उम्मीद है की वो मदद करदे।
Assets
फोल्डर को फोल्डर में रखने की जरूरत नहीं है , एंड्रॉइड सिस्टम में अब fonts
डायरेक्टरी है और हम अपनी कस्टम फोंट फाइल को वहां रख सकते हैं या हमारे पास एंड्रॉइड स्टूडियो डाउनलोड कर सकते हैं।
मुझे पता है कि यह पुराना है, लेकिन इसे स्पष्ट करने के लिए, आधिकारिक Android प्रलेखन में प्रत्येक का स्पष्टीकरण है:
से http://developer.android.com/tools/projects/index.html
assets/
यह खाली है। आप इसका उपयोग कच्ची परिसंपत्ति फ़ाइलों को संग्रहीत करने के लिए कर सकते हैं। आपके द्वारा यहां सेव की जाने वाली फाइलें एक .apk फाइल के रूप में संकलित की जाती हैं, और मूल फ़ाइल नाम को संरक्षित किया जाता है। आप इस निर्देशिका को उसी तरह से नेविगेट कर सकते हैं जैसे कि यूआरआई का उपयोग करके एक विशिष्ट फाइल सिस्टम और फाइल को असेंबलीजर का उपयोग करके बाइट्स की एक धारा के रूप में पढ़ा जाता है। उदाहरण के लिए, यह बनावट और गेम डेटा के लिए एक अच्छा स्थान है।
res/raw/
मनमानी कच्ची संपत्ति की फाइलों के लिए। संपत्ति / निर्देशिका के बजाय यहां परिसंपत्ति फ़ाइलों को सहेजना केवल उसी तरीके से भिन्न होता है, जिस तरह से आप उन्हें एक्सेस करते हैं। इन फ़ाइलों को aapt द्वारा संसाधित किया जाता है और R वर्ग में संसाधन पहचानकर्ता का उपयोग करके अनुप्रयोग से संदर्भित किया जाना चाहिए। उदाहरण के लिए, यह मीडिया के लिए एक अच्छी जगह है, जैसे कि MP3 या Ogg फाइलें।
कुछ मुख्य बिंदु निम्नलिखित हैं:
निष्कर्ष
यदि आपको उन्हें जावा कोड में कहीं और संदर्भित करने की आवश्यकता है, तो आप अपनी फ़ाइलों को "रिस" निर्देशिका में डाल देंगे।
और आरईएस फोल्डर की सभी फाइलों को आर फाइल में अनुक्रमित किया जाएगा, जो उन्हें लोड करने के लिए बहुत तेज (और बहुत आसान!) बनाता है।
टेड होप ने इसका काफी बारीकी से जवाब दिया। मैं अपनी opengl बनावट और shader फ़ाइलों के लिए res / raw का उपयोग कर रहा हूं। मैं एक पदानुक्रमित संगठन प्रदान करने के लिए उन्हें एक संपत्ति निर्देशिका में ले जाने के बारे में सोच रहा था।
इस धागे ने मुझे विश्वास दिलाया कि नहीं। पहला, क्योंकि मुझे यूनीक रिसोर्स आईडी का उपयोग पसंद है। दूसरा क्योंकि फ़ाइल में पढ़ने के लिए InputStream / openRawResource या BitmapFactory का उपयोग करना बहुत सरल है। तीसरा क्योंकि यह एक पोर्टेबल लाइब्रेरी में उपयोग करने में सक्षम होने के लिए बहुत उपयोगी है।
एसेट्स आपके एप्लिकेशन में टेक्स्ट, xml, फोंट, संगीत और वीडियो जैसी मनमानी फ़ाइलों को शामिल करने का एक तरीका प्रदान करते हैं। यदि आप इन फ़ाइलों को "संसाधन" के रूप में शामिल करने का प्रयास करते हैं, तो एंड्रॉइड उन्हें अपने संसाधन सिस्टम में संसाधित करेगा और आप कच्चे डेटा को प्राप्त नहीं कर पाएंगे। यदि आप डेटा को अछूता एक्सेस करना चाहते हैं, तो एसेट्स इसे करने का एक तरीका है।
res/raw
, तो आप कच्चे डेटा का उपयोग करके प्राप्त कर सकते हैं openRawResource(resourceName)
।
res
संसाधनों के लिए खड़ा है, तो क्याassets
खड़ा है ??