অ্যান্ড্রয়েড আর্কাইভ লাইব্রেরি (আর) বনাম মান জার ar


131

আমি অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য স্ট্যান্ডার্ড বিল্ড সিস্টেম হিসাবে গ্রেডলকে নতুন গ্রহণ সম্পর্কে কিছু নিবন্ধ পড়ছি। ভাল, মানক জাভা বিকাশ থেকে এসে আমি সাধারণত আমার প্রকল্পটি তৈরি করতে জার ফাইলগুলির উপর নির্ভর করি। তবে মনে হচ্ছে যে অ্যান্ড্রয়েড এছাড়াও আছে Aar প্যাকেজ, যা হয় সমতুল্য Dll উইন্ডোজ OS এ ফাইল, হিসাবে উল্লেখ করেছে এখানে :

প্রথমত, আপনাকে বুঝতে হবে যে অ্যান্ড্রয়েড প্ল্যাটফর্মটি অ্যাপ্লিকেশন স্তরের "ভাগ করা লাইব্রেরি" অনুমোদন করে না। "Traditionalতিহ্যবাহী" প্রোগ্রামিং ল্যাঙ্গুয়েজ প্ল্যাটফর্মগুলিতে, সি, সি ++, জাভা, আপনি নামটি দিয়েছিলেন, রানটাইম লাইব্রেরিগুলি ভাগ করে নেওয়ার আমাদের এই প্রক্রিয়া রয়েছে। (যেমন, উইন্ডোজে ডিএলএল, ইউনিক্সে ডিএসও, জেভিএম-তে জার ইত্যাদি)। অ্যান্ড্রয়েডে তবে আপনি এটি করতে পারবেন না, যদি না আপনি গুগল বা হ্যান্ডসেট প্রস্তুতকারক (নীচে পাদটীকা দেখুন 1)। অ্যাপ্লিকেশন বিকাশকারী হিসাবে এটি একটি মৌলিক সীমাবদ্ধতা হতে পারে। "শেয়ারিং" বা "পুনরায় ব্যবহার" কোডগুলি, বিল্ড টাইম এবং রান টাইম উভয় সময়ে, সফ্টওয়্যার ইঞ্জিনিয়ারিং অনুশীলনের একটি খুব গুরুত্বপূর্ণ অঙ্গ। উল্লিখিত সীমাবদ্ধতার কারণে এটি অ্যান্ড্রয়েডে বরং কঠিন (অসম্ভব নয়, কেবল আরও শক্ত)।

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

উদাহরণস্বরূপ, একটি প্রকল্পে আমি একটি সিওএম পোর্ট অ্যাক্সেস করি, যা আমি এনডিকে প্রম্পম্পাইল করে .এসে লাইব্রেরি ব্যবহার করি। আমি যদি এই ইউটিলিটিটি ভাগ করতে চাই তবে আমার কি আরআর তৈরি করতে হবে?

উত্তর:


221

AARনিম্নলিখিত কারণে ফাইলগুলি Jars এর চেয়ে বেশি সাদৃশ্যপূর্ণ Dll:

Dllগুলি অ্যাপ্লিকেশনগুলিতে ভাগ করা যেতে পারে যেখানে AARs এবং জারগুলি আপনার অ্যাপ্লিকেশান হিসাবে প্যাকেজ করা আছে।

AARs বনাম Jarএস:

A Jarএবং a এর মধ্যে মূল পার্থক্য AARহ'ল AARএর মধ্যে অন্যান্য সংস্থানসমূহ অন্তর্ভুক্ত থাকে layouts, drawablesএটি স্ব-অন্তর্ভুক্ত ভিজ্যুয়াল উপাদানগুলি তৈরি করা অনেক সহজ করে তোলে। উদাহরণস্বরূপ, আপনার যদি একাধিক অ্যাপস থাকে তবে একই লগইন স্ক্রিন ব্যবহার করে Jarআপনি ক্লাস ভাগ করতে পারতেন তবে বিন্যাস, শৈলী ইত্যাদির নয়, আপনাকে এখনও সেগুলি নকল করতে হয়েছিল। এর সাথে AARসমস্ত কিছু একটি ঝরঝরে প্যাকেজের মধ্যে বান্ডিল হয়।

উপসংহারে, AARগুলি সঠিক দিকের একটি বড় পদক্ষেপ।

দ্রষ্টব্য: s এর
সাথে অনুরূপ প্রচেষ্টা করা হয়েছিল apk-libতবে সেগুলি এখন আরও বেশি অপ্রচলিত হওয়ায় AARএটি আরও ভাল।


@ ইউনাইট করুন। আরআর ফাইলগুলি আটকাতে পারি - এমন কোনও উপায় আছে যা লাইব্রেরিটি অবলম্বন করে?
Ab22ishek

আমি এই উত্তর দ্বারা বিভ্রান্ত। প্রথম ব্লকের উদ্ধৃতিতে বলা হয়েছে যে "আরস এবং জারগুলি আপনার অ্যাপ্লিকেশনটির সাথে প্যাকেজ করা আছে", "অ্যাপ্লিকেশন জুড়ে ভাগ করা হয়নি"; তবুও দ্বিতীয় ব্লকের উক্তিটি ইঙ্গিত দেয় যে আর্স আপনাকে একাধিক অ্যাপসের মধ্যে ক্লাস এবং অন্যান্য সংস্থানগুলি ভাগ করতে দেয়?
LarsH

5
@ লার্হ আমি মনে করি এর অর্থ হল যে আপনি আপনার অ্যাপ্লিকেশনগুলির মধ্যে কোড (আর ফাইলগুলি) ভাগ করতে পারেন তবে ব্যবহারকারীরা স্বতন্ত্রভাবে অ্যাপ্লিকেশনগুলি ইনস্টল করতে দেয় এটি প্রতিটি প্যাকেজে আলাদাভাবে অন্তর্ভুক্ত করা হবে। যদি 2 টি অ্যাপ্লিকেশন ইনস্টল করা হয় এবং উভয়ই একই আআর ব্যবহার করে তবে অ্যান্ড্রয়েড রানটাইম কেবলমাত্র একবার লোড করার জন্য যথেষ্ট চালাক হতে পারে।
হাবিব

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

5
@ মোহাম্মদমোরাদিয়র আপনি আপনার পাঠাগারটিতে প্রগার্ডটি আপনার ক্লাসগুলি অবিচ্ছিন্ন করতে ব্যবহার করতে পারেন তবে জাভাভিত্তিক বাইটকোডের মতো, আপনার কোডটি ক্ষয় করতে বাধা দেওয়ার কোনও উপায় নেই।
সমন্বয়সাধন করা

11

" একটি জার এবং এএআর এর মধ্যে প্রধান পার্থক্যটি হ'ল আআআআআআর মধ্যে লেআউট, ড্রইবেল ইত্যাদির মতো সম্পদ অন্তর্ভুক্ত থাকে " জআর ফাইলের নির্দিষ্টকরণের সাথে সামঞ্জস্য নেই এবং তাই সত্য নয়। জেআর ফাইলের স্পেসিফিকেশন অনুসারে :

জেআর ফাইলটি জনপ্রিয় জিপ ফাইল ফর্ম্যাটের উপর ভিত্তি করে একটি ফাইল ফর্ম্যাট এবং অনেকগুলি একত্রে একত্রিত করার জন্য ব্যবহৃত হয়। একটি জেআর ফাইলটি মূলত একটি জিপ ফাইল যাতে একটি alচ্ছিক মেটা-আইএনএফ ডিরেক্টরি থাকে।

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

প্রশ্নটিতে তাই অ্যান্ড্রয়েড আর্কাইভ লাইব্রেরি (আর) বনাম মান জার। উত্তরটি কী বিল্ড টুলটি আপনি ব্যবহার করছেন তার উপর নির্ভর করে।

যদি আপনি অ্যান্ড্রয়েড স্টুডিওটিকে বিল্ড সরঞ্জাম হিসাবে (যথাক্রমে একটি প্রকল্পের সংগঠক হিসাবে) ব্যবহার করেন তবে আপনি অবশ্যই অ্যান্ড্রয়েড প্রকল্পগুলির মধ্যে এনক্যাপসুলেটেড সংস্থানগুলি ভাগ করতে * .আর ফাইলগুলি আরও ভাল ব্যবহার করতে চাইবেন। এআর ফাইল ফর্ম্যাটটি অ্যান্ড্রয়েড স্টুডিও বিল্ডের একটি অংশ এবং এটি অন্যান্য মন্তব্যে এখানে যেমন মন্তব্য করা হয়েছে তার ব্যবহারকারী ইন্টারফেস অ্যান্ড্রয়েড লাইব্রেরিগুলির জন্য আআর ফর্ম্যাটটিকে সমর্থন করে।

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


আমি তখন বলব যে পার্থক্যটি হ'ল জআআআআআআআআআআআআআআরআরআডড অ্যান্ড্রয়েড থাকাকালীন জাভা বাস্তুতন্ত্রের যে কোনও ধরণের সংস্থান ভাগ করার উপায় হিসাবে বোঝানো হয়েছে এবং আপনাকে একটি কংক্রিট বিন্যাসে বাধ্য করে
এক্সট্রিম বাইকার

আমি মনে করি নির্বাচিত উত্তরের লেখক (@ ইউনাইফাই) এর সম্পর্কে কিছুটা স্পষ্ট করা উচিত।
lfree

আমি বৃহত্তর জাভা ওয়ার্ল্ড সম্পর্কে জানি না, তবে অ্যান্ড্রয়েড ওয়ার্ল্ডে জার ফাইলগুলি সংস্থান করতে পারে নি। : আছে, এমনকি যদি সম্পদ জার সংরক্ষণাগারে ছিলেন, তারা উপর প্রকল্পের যে তাদের অন্তর্ভুক্ত আনা প্রমানিত হয়েছে stackoverflow.com/q/2474904/211292
ThomasW

6

প্রশ্নের বাস্তবতার সাথে বর্তমানের বাস্তবতার সাথে মিল নেই। অবশ্যই অ্যান্ড্রয়েডে বাহ্যিক গ্রন্থাগারগুলি ব্যবহার করা সম্ভব এবং প্রচুর গ্রন্থাগার পাওয়া যায়। সম্ভবত তারা বলতে চেয়েছিলেন যে প্রতিটি অ্যাপ্লিকেশন অবশ্যই এটির প্রয়োজনীয় সমস্ত গ্রন্থাগার বান্ডিল করবে, তবে বিল্ডিংয়ের সময় লাইব্রেরিটির পুনরায় ব্যবহার করা (স্থির লিঙ্কিং) আসলেই কোনও সমস্যা নয়।

.aarথেকে পৃথক .jarআর চেয়ে .jarপৃথক .zip। এটিতে নির্দিষ্ট ধরণের ধারণাগুলি রয়েছে যেখানে কোন ধরণের সামগ্রীর প্রত্যাশা করা উচিত, তবে উভয় .jarএবং .aarবেশিরভাগ ক্ষেত্রেই সংকলিত ক্লাস থাকে এবং তারা সংস্থান করে। .aarকেবলমাত্র উল্লেখ করে যে লাইব্রেরির অ্যান্ড্রয়েড নির্দিষ্ট এবং এর কিছু প্রত্যাশিত কাঠামো রয়েছে, যেমন লাইব্রেরির জন্য যুক্তিসঙ্গত (ভাল, .jarএছাড়াও কিছু প্রত্যাশিত কাঠামো রয়েছে)।

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

dependencies {
    compile ('io.github.andviane:uncover:2.0.1@aar')
    ..
}  

এই মাভেন কেন্দ্রীয় মোতায়েন রেফারেন্স ।

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