/ Res এবং / সম্পত্তির ডিরেক্টরিগুলির মধ্যে পার্থক্য


266

আমি জানি যে resডিরেক্টরিতে থাকা ফাইলগুলি অ্যাক্সেসযোগ্য R.classযখন সম্পদগুলি কোনও ফাইল সিস্টেমের মতো আচরণ করে তবে আমি সাধারণত জানাতে চাই যে কখন একটি এবং অন্যটি ব্যবহার করা ভাল।
কেউ কি আমাকে রিসেট এবং সম্পদের মধ্যে প্রকৃত পার্থক্য জানার জন্য সহায়তা করতে পারে?

উত্তর:


284

সংস্থানসমূহ সহ, এখানে বর্ণিত হিসাবে বিভিন্ন ভাষা, ওএস সংস্করণ, স্ক্রিন ওরিয়েন্টেশন ইত্যাদি বিকল্প সরবরাহ করার জন্য অন্তর্নির্মিত সমর্থন রয়েছে । সম্পদের সাথে এর কোনওটিই উপলভ্য নয়। এছাড়াও, API এর অনেকগুলি অংশ সংস্থান সনাক্তকারীদের ব্যবহারকে সমর্থন করে। শেষ অবধি, সংস্থাগুলির সংস্থাগুলির নামগুলি স্থির ক্ষেত্রের নামগুলিতে রূপান্তরিত হয় যা সংকলনের সময় পরীক্ষা করা হয়, সুতরাং কোড এবং সংস্থানগুলির মধ্যে মেলে না এমন সুযোগের সুযোগ কম। এর কোনওটিই সম্পদে প্রযোজ্য নয়।

সুতরাং কেন একটি এ্যাসেটস ফোল্ডার সব আছে? আপনি রান সময় যে সম্পদটি ব্যবহার করতে চান তা গণনা করতে চাইলে এটি বেশ সহজ। সংস্থানগুলির সাথে, আপনাকে সমস্ত সংস্থানীয় আইডিগুলির একটি তালিকা ঘোষণা করতে হবে যা ব্যবহার করা যেতে পারে এবং তালিকায় একটি সূচক গণনা করতে হবে। (এটি এক ধরণের উদ্ভট এবং ত্রুটির জন্য সুযোগের পরিচয় দেয় যদি উন্নয়নের চক্রের সংস্থাগুলির সেট পরিবর্তিত হয়।) (সম্পাদনা: আপনি নাম ব্যবহার করে একটি সংস্থান আইডি পুনরুদ্ধার করতে পারেন getIdentifier, তবে এটি সংকলন-সময় যাচাইয়ের সুবিধা হারাতে পারে)) সম্পদগুলি পারে এছাড়াও একটি ফোল্ডার শ্রেণিবিন্যাসে সংগঠিত করা হবে, যা সংস্থানগুলি দ্বারা সমর্থিত নয়। এটি ডেটা পরিচালনার একটি আলাদা উপায়। যদিও সম্পদের বেশিরভাগ ক্ষেত্রেই কভার থাকে তবে সম্পদের মাঝে মাঝে ব্যবহার হয় have

অন্য একটি পার্থক্য: একটি গ্রন্থাগার প্রকল্পে সংজ্ঞায়িত সংস্থানগুলি অ্যাপ্লিকেশন প্রকল্পগুলিতে স্বয়ংক্রিয়ভাবে আমদানি করা হয় যা লাইব্রেরির উপর নির্ভর করে। সম্পদের জন্য, এটি ঘটে না; সম্পদ ফাইলগুলি অবশ্যই অ্যাপ্লিকেশন প্রকল্পের সম্পদ ডিরেক্টরিতে উপস্থিত থাকতে হবে। [সম্পাদনা: অ্যান্ড্রয়েডের নতুন গ্র্যাডল-ভিত্তিক বিল্ড সিস্টেমের সাথে (অ্যান্ড্রয়েড স্টুডিওতে ব্যবহৃত), এটি আর সত্য নয়। লাইব্রেরি প্রকল্পগুলির জন্য সম্পদ ডিরেক্টরিগুলি .aar ফাইলগুলিতে প্যাকেজ করা হয়, সুতরাং গ্রন্থাগার প্রকল্পগুলিতে সংজ্ঞায়িত সম্পদগুলি অ্যাপ্লিকেশন প্রকল্পগুলিতে মিশ্রিত করা হয় (সুতরাং /assetsযদি তারা রেফারেন্সযুক্ত লাইব্রেরিতে থাকে তবে অ্যাপ্লিকেশন ডিরেক্টরিতে উপস্থিত থাকতে হবে না ]])

সম্পাদনা করুন: আপনি যদি নিজের অ্যাপ্লিকেশনটির সাথে একটি কাস্টম ফন্ট প্যাকেজ করতে চান তবে আর একটি পার্থক্য দেখা দেয়। ফাইল সিস্টেমে বা আপনার অ্যাপের ডিরেক্টরিতে থাকা ফন্ট ফাইল থেকে একটি তৈরি করার জন্য এপিআই কল রয়েছে । তবে ডিরেক্টরিতে সঞ্চিত ফন্ট ফাইল (বা ডিরেক্টরিটি ব্যবহারের অনুমতি দেয় এমন একটি থেকে) তৈরি করার জন্য কোনও এপিআই নেই । [ দ্রষ্টব্য: অ্যান্ড্রয়েড ও (আলফা পূর্বরূপে এখন উপলভ্য) এর সাহায্যে আপনি কাস্টম ফন্টগুলি সংস্থান হিসাবে অন্তর্ভুক্ত করতে সক্ষম হবেন। দীর্ঘ-ওভারডু বৈশিষ্ট্যটির এখানে বর্ণনাটি দেখুন । তবে যতক্ষণ না আপনার ন্যূনতম এপিআই স্তরটি 25 বা তার কম হবে, আপনাকে সংস্থান হিসাবে কাস্টম ফন্টগুলির প্যাকেজিং সম্পদ হিসাবে আটকে থাকতে হবে]]Typefaceassets/Typefaceres/InputStreamres/


1
resরিসোর্সের জন্য দাঁড়ায়, তারপরে কী assetsদাঁড়ায় ??
বিবেক ওয়ার্ড

40
@vwvwvvvvvwvvvvvvww - উম ... এটি কোনও কিছুর পক্ষে দাঁড়ায় না; এর সহজ অর্থ "সম্পদ" (ইংরেজি শব্দ সম্পদের বহুবচন হিসাবে : একটি দরকারী বা মূল্যবান জিনিস )।
টেড হপ

1
raw/ডিরেক্টরিতে ফাইলগুলি লেখা কি সম্ভব ?
প্রিন্স

6
@ প্রিন্স - না। /resএবং '/ সম্পদ' ডিরেক্টরিগুলির সমস্ত কিছুই কেবল পঠনযোগ্য, যেহেতু সেগুলি .apk ফাইলে প্যাকেজড রয়েছে।
টেড হপ

আমরা কি এপিকে ফাইলটি সম্পদ ফোল্ডারে রাখতে পারি এবং যখন ব্যবহারকারী সেই ইউপি ক্লিক করে সেই অ্যাপকে ইনস্টল করবেন?
বিবেক মিশ্র

63

দু'জনেরই বেশ মিল রয়েছে। দুজনের মধ্যে আসল প্রধান পার্থক্য হ'ল resডিরেক্টরিতে প্রতিটি ফাইলকে একটি প্রাক-সংকলন দেওয়া হয় ID যা সহজেই অ্যাক্সেস করা যায় R.id.[res id]। এটি দ্রুত এবং সহজেই চিত্রগুলি, শব্দগুলি, আইকনগুলিতে অ্যাক্সেস করতে দরকারী ...

assetsডিরেক্টরি আরো একটি ফাইল সিস্টেম মত হয় এবং আপনি সেখানে চাই যেকোনো ফাইল করা আরো স্বাধীনতা প্রদান করে। তারপরে আপনি জাভা মাধ্যমে যে কোনও ফাইল সিস্টেমে কোনও ফাইল অ্যাক্সেস করার সময় সেই সিস্টেমের প্রতিটি ফাইল অ্যাক্সেস করতে পারবেন। এই ডিরেক্টরি গেমের বিবরণ, অভিধান, ইত্যাদি ইত্যাদির জন্য ভাল। আশা করি এইটি কাজ করবে.


5
আমরা যদি আমাদের অ্যাপ্লিকেশনটিতে বহিরাগত_ফন্টগুলি যুক্ত করতে চাই তবে আমরা সেগুলি সম্পদ ফোল্ডারে রেখেছি।
তুষার পান্ডে

1
@ তুষারপাণ্ডে এখন আমাদের ফন্টগুলি Assetsফোল্ডারে রাখতে হবে না, অ্যান্ড্রয়েড সিস্টেমে এখন fontsডিরেক্টরি রয়েছে এবং আমরা আমাদের কাস্টম ফন্টগুলি ফাইলটি সেখানে রাখতে পারি বা আমাদের কাছে অ্যান্ড্রয়েড স্টুডিওগুলি এটি ডাউনলোড করতে পারে।
২ops

@ জ্যাক, এটি ওরিওর জন্য।
তুষার পান্ডে

1
@ তুষারপান্দে এটি ওরিওতে যুক্ত হয়েছে তবে এটি এন্ড্রয়েড সাপোর্ট লাইব্রেরিতে এপিআই স্তরের ১ 16
-কপসঅনরোড ২ad

36

আমি জানি এটি পুরানো, তবে কেবল এটি পরিষ্কার করার জন্য, অফিসিয়াল অ্যান্ড্রয়েড ডকুমেন্টেশনের প্রত্যেকটির একটি ব্যাখ্যা রয়েছে:

http://developer.android.com/tools/projects/index.html থেকে

assets/

এটি খালি। আপনি এটি কাঁচা সম্পদ ফাইলগুলি সঞ্চয় করতে ব্যবহার করতে পারেন। আপনি এখানে যে ফাইলগুলি সংরক্ষণ করেন সেগুলি একটি .apk ফাইলটিকে যেমন রয়েছে তেমনভাবে সংকলন করা হয়েছে এবং মূল ফাইলের নামটি সংরক্ষণ করা হয়েছে। আপনি ইউআরআই ব্যবহার করে একটি সাধারণ ফাইল সিস্টেমের মতো এই ডিরেক্টরিতে নেভিগেট করতে পারেন এবং অ্যাসেটম্যানেজার ব্যবহার করে ফাইলগুলি বাইটের স্ট্রিম হিসাবে পড়তে পারেন। উদাহরণস্বরূপ, এটি টেক্সচার এবং গেম ডেটার জন্য একটি ভাল অবস্থান।

res/raw/

নির্বিচারে কাঁচা সম্পদ ফাইলের জন্য। সম্পদ / ডিরেক্টরি পরিবর্তে সম্পদ ফাইলগুলি এখানে সংরক্ষণ করা কেবলমাত্র আপনি সেগুলিতে অ্যাক্সেস করার ক্ষেত্রেই পৃথক। এই ফাইলগুলি অপ্ট দ্বারা প্রক্রিয়াজাত করা হয় এবং আর শ্রেণিতে কোনও সংস্থান সনাক্তকারী ব্যবহার করে অ্যাপ্লিকেশন থেকে অবশ্যই তা রেফারেন্স করা উচিত। উদাহরণস্বরূপ, এমপি 3 বা ওগ ফাইলের মতো এটি মিডিয়ার পক্ষে ভাল জায়গা।


4
আমি মনে করি এটি আসলে সমস্যাটিকে বিভ্রান্ত করে - টেক্সচার এবং ওগ ফাইল উভয়ই আপনি কোনও ইউজারল্যান্ড এপিআই (ওপেনজিএল / মিডিয়াপ্লেয়ার) এ খাওয়ানো ডেটাগুলির একটি বড় গ্লোব ... তারা এখানে কেন বৈষম্য করবে?

9

নিম্নলিখিত কয়েকটি মূল বিষয়:

  1. কাঁচা ফাইলগুলির অবশ্যই এমন নাম থাকতে হবে যা বৈধ জাভা শনাক্তকারী, তবে সম্পদের ফাইলগুলিতে কোনও অবস্থান এবং নাম বাধা নেই। অন্য কথায় তারা আমাদের ইচ্ছামত ডিরেক্টরিতে গ্রুপ করা যায়
  2. কাঁচা ফাইলগুলি জাভা এবং এক্সএমএল (যেমন আপনি ম্যানিফেস্ট বা অন্য এক্সএমএল ফাইল থেকে কাঁচা কোনও ফাইল রেফার করতে পারেন) থেকে উল্লেখ করা সহজ।
  3. সম্পদ / ডিরেক্টরিগুলির পরিবর্তে সম্পদ ফাইলগুলি সংরক্ষণ করা কেবল এখানে ডকুমেন্ট হিসাবে আপনার অ্যাক্সেসের উপায়েই আলাদা http:// http://developer.android.com/tools/projects/index.html
  4. গ্রন্থাগারের প্রকল্পে সংজ্ঞায়িত সংস্থানগুলি অ্যাপ্লিকেশন প্রকল্পগুলিতে স্বয়ংক্রিয়ভাবে আমদানি করা হয় যা গ্রন্থাগারের উপর নির্ভর করে। সম্পদের জন্য, এটি ঘটে না; সম্পদ ফাইলগুলি অবশ্যই অ্যাপ্লিকেশন প্রকল্পের সম্পদ ডিরেক্টরিতে উপস্থিত থাকতে হবে
  5. সম্পদ ডিরেক্টরিটি কোনও ফাইল সিস্টেমের মতো আপনার সেখানে যে কোনও ফাইল রাখার জন্য আরও বেশি স্বাধীনতা সরবরাহ করে। তারপরে আপনি জাভা মাধ্যমে যে কোনও ফাইল সিস্টেমে কোনও ফাইল অ্যাক্সেস করার সময় সেই সিস্টেমের প্রতিটি ফাইল অ্যাক্সেস করতে পারবেন। গেম ডেটা ফাইল, ফন্ট, টেক্সচার ইত্যাদি
  6. সংস্থানসমূহের বিপরীতে, সম্পদগুলি সম্পত্তির ডিরেক্টরিতে সাবফোল্ডারগুলিতে সংগঠিত করা যেতে পারে তবে, সম্পদের সাথে আপনি যা করতে পারেন তা হ'ল ইনপুট স্ট্রিম। সুতরাং, সম্পদগুলিতে আপনার স্ট্রিং বা বিটম্যাপগুলি সংরক্ষণ করার পক্ষে এটি তেমন অর্থবোধ করে না তবে আপনি কাস্টম-ফর্ম্যাট ডেটা যেমন ইনপুট সংশোধন অভিধান বা গেমের মানচিত্র সংরক্ষণ করতে পারেন।
  7. কাঁচা আপনাকে আপনার আর. জাভা ফাইল তৈরি করে একটি সংকলন সময় পরীক্ষা দিতে পারে তবে আপনি যদি নিজের ডাটাবেসটিকে ব্যক্তিগত ডিরেক্টরিতে অনুলিপি করতে চান তবে আপনি স্ট্রিমিংয়ের জন্য তৈরি সম্পদগুলি ব্যবহার করতে পারেন।

উপসংহার

  1. অ্যান্ড্রয়েড এপিআইতে একটি খুব আরামদায়ক রিসোর্স ফ্রেমওয়ার্ক রয়েছে যা বিভিন্ন মোবাইল অ্যাপ্লিকেশনগুলির জন্য বেশিরভাগ সাধারণ ব্যবহারের ক্ষেত্রেও অনুকূলিত। আপনার রিসোর্সগুলিতে দক্ষতা অর্জন করা উচিত এবং যেখানেই সম্ভব এগুলি ব্যবহারের চেষ্টা করা উচিত।
  2. তবে আপনার যদি আপনার বিশেষ ক্ষেত্রে আরও নমনীয়তার প্রয়োজন হয় তবে সম্পদগুলি আপনাকে নিম্ন স্তরের এপিআই দেয় যা উচ্চতর ডিগ্রি সহ আপনার সংস্থানগুলিকে সংগঠিত এবং প্রক্রিয়াজাত করতে দেয়।

গৃহীত উত্তর অনুসারে, গ্রেডল বিল্ড সিস্টেম ব্যবহারকারী প্রকল্পগুলির জন্য পয়েন্ট 4 আর সত্য নয়; গ্রন্থাগার থেকে প্রাপ্ত সম্পদগুলি অ্যাপ্লিকেশন প্রকল্পের সম্পদ সংগ্রহের জন্য বান্ডিল করা হয়।
ভেন্রিক্স

4

আপনার যদি জাভা কোডের কোথাও উল্লেখ করার প্রয়োজন হয় তবে আপনি আপনার ফাইলগুলিকে "রেজো" ডিরেক্টরিতে রেখে দিতে পারেন।

এবং রেজোল্ড ফোল্ডারের সমস্ত ফাইল আর ফাইলে ইনডেক্স করা হবে, যা এগুলি লোড করা আরও দ্রুত (এবং আরও সহজ!) করে তোলে।


6
আপনি জাভা থেকে সম্পদে থাকা ফাইলগুলিতেও অ্যাক্সেস করতে পারবেন
হাইকো রূপ্প

2
হ্যাঁ, তবে সেগুলি সূচিযুক্ত নয় -> ধীর হয়ে উঠবে, মোবাইল বিকাশে আসল সমস্যাটি কী।
এল বুটজ

সুতরাং, রেজ / কাঁচা এবং সম্পদের মধ্যে আলাদা কী? রেজ / কাঁচাও কি খুব সূচিযুক্ত হবে?
anticafe

@ টেডহপ্প থেকে পোস্টটি দেখুন - তিনি উত্তরটি সত্যিই পরিষ্কার করে এনেছেন।
এল বুটজ

1

যে কোনও ধরণের ফাইল ডাম্প করতে ফাইল সিস্টেমের মতো সম্পদ ব্যবহার করুন। এবং এটি কী, লেআউট, চিত্র, মানগুলির জন্য তৈরি করা হয় তা সংরক্ষণ করতে ব্যবহার করুন।


0

টেড হপ এইটির উত্তরটি বেশ সুন্দরভাবে দিয়েছিল। আমি আমার ওপেনগেল টেক্সচার এবং শেডার ফাইলগুলির জন্য রেজ / কাঁচা ব্যবহার করছি। আমি তাদেরকে একটি শ্রেণিবদ্ধ সংস্থা সরবরাহ করার জন্য একটি সম্পত্তির ডিরেক্টরিতে স্থানান্তরিত করার কথা ভাবছিলাম।

এই থ্রেড আমাকে না বোঝায়। প্রথমত, কারণ আমি একটি অনন্য সংস্থান আইডি ব্যবহার করতে পছন্দ করি। দ্বিতীয় কারণ ফাইলটিতে পড়ার জন্য ইনপুটস্ট্রিম / ওপেনরো রিসোর্স বা বিটম্যাপফ্যাক্টরিটি ব্যবহার করা খুব সহজ। তৃতীয় কারণ এটি পোর্টেবল লাইব্রেরিতে ব্যবহার করতে সক্ষম হওয়া খুব দরকারী।


1
ইনপুট স্ট্রিমস এবং বিটম্যাপফ্যাক্টরি সমর্থনটির পয়েন্ট 2, সংস্থান এবং সম্পদ উভয়ের জন্যই সত্য (এখানে দেখুন: stackoverflow.com/a/8501428/2441655 )। পয়েন্ট 3 আর প্রযোজ্য নয়। (স্বীকৃত উত্তর দেখুন)
ভেন্রিক্স

-5

সম্পদগুলি আপনার অ্যাপ্লিকেশনটিতে পাঠ্য, এক্সএমএল, ফন্ট, সঙ্গীত এবং ভিডিওর মতো স্বেচ্ছাসেবী ফাইল অন্তর্ভুক্ত করার একটি উপায় সরবরাহ করে। আপনি যদি এই ফাইলগুলিকে "রিসোর্স" হিসাবে অন্তর্ভুক্ত করার চেষ্টা করেন তবে অ্যান্ড্রয়েড এগুলি তার সংস্থান সিস্টেমে প্রসেস করবে এবং আপনি কাঁচা ডেটা পেতে সক্ষম হবেন না। যদি আপনি কোনও ছাপছাড়া ডেটা অ্যাক্সেস করতে চান, সম্পদগুলি এটি করার এক উপায়।


5
এটি ভুল। আপনি যদি ডেটা res/rawরাখেন তবে আপনি কাঁচা ডেটা ব্যবহার করে তা পেতে পারেন openRawResource(resourceName)
টেড হপ

আমার একটি লাইব্রেরিতে টেক্সচার এবং শেডার ফাইলগুলি ওপেনগলস রয়েছে। আমি হবে মাঝামাঝি / সেগুলি সংরক্ষণ করার জন্য কাঁচা ব্যবহার করুন। আমি সেগুলি পড়তে ইনপুটস্ট্রিম এবং বিটম্যাপফ্যাক্টরি ব্যবহার করি। আমি এটি একটি স্বাধীন মন্তব্য হিসাবে যুক্ত করব।
dturvene

জামারিন মাইক্রোসফ্ট ডক্স থেকে অনুলিপি করা মনে হচ্ছে। পাঠ্য অনুলিপি করার সময় আপনার উত্স দিন। ডকস.মাইক্রোসফটকম
সজোরড পটুইট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.