অ্যান্ড্রয়েড মাল্টিডেক্স কী?


111

মাল্টিডেক্স সম্পর্কে অনেকগুলি পোস্ট রয়েছে। আমি অভিজ্ঞতা আছে, কখনও কখনও, ত্রুটি সহ মীমাংসিত multiDexEnabled trueমধ্যে defaultConfigআমার build.gradle বিভাগে।

তবে, এই বৈশিষ্ট্যটি ঠিক কী? এটি ব্যবহারের জন্য পরিস্থিতিগুলি কী কী?

উত্তর:


166

ডকুমেন্টেশন উদ্ধৃত :

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

সুতরাং, বৈশিষ্ট্যটি হ'ল: এটি আপনার জটিল অ্যাপটিকে সংকলন করতে দেয় allows 64K ডেক্স পদ্ধতি রেফারেন্স সীমাটি আঘাত করার কারণে যখন আপনার অ্যাপ্লিকেশনটি সংকলন করতে ব্যর্থ হয় তখন এটি ব্যবহারের পরিস্থিতিগুলি। এটি একটি বিল্ড ত্রুটি হিসাবে উপস্থিত হয়, যেমন:

Conversion to Dalvik format failed: Unable to execute dex: method ID not in [0, 0xffff]: 65536

2
এটি কোনও কোডবেস কত বড় ধারণা (এলওসি, বা মোটামুটি # পর্দার)? আপনি কি একটি সহজ 5-6 স্ক্রিন অ্যাপ্লিকেশনটিতে এই সীমাটি আঘাত করতে
চলেছেন বা

20
@ মার্চি: সাধারণত এটি অনেকগুলি লাইব্রেরি যুক্ত করে আসে। কোনও লাইব্রেরি-কম প্রকল্পের পক্ষে এই সীমাটি আঘাত করা কঠিন।
কমন্সওয়্যার

3
আমার কাছে একটি ছোট অ্যাপ রয়েছে যা প্রায় 5 টি গুগল সমর্থন গ্রন্থাগার পাশাপাশি ফ্যাব্রিক.ও এবং 2 বা 3 অন্যান্য তৃতীয় পক্ষের লাইব্রেরি ব্যবহার করে এবং আমাকে মাল্টি-ডেক্স ব্যবহার করতে হবে।
c.dunlap

1
মাল্টিডেক্স সক্ষম করার কোনও অসুবিধা আছে? কেন এটি ডিফল্ট হিসাবে সত্য হতে দেয় না?
রাফায়েল লিমা

1
@ রাফায়েললিমা: প্রাক অ্যান্ড্রয়েড 5.0 ডিভাইসের জন্য মাল্টিডেক্সের কোয়াড-ব্যাকপোর্টের সাথে সুরক্ষার সমস্যা রয়েছে। আইআইআরসি, এটি আপনার অ্যাপ্লিকেশনটিতেও কিছু সমস্যা তৈরি করতে পারে, যদি আপনি এখনও না-লোড হওয়া ডেক্স ফাইলটিতে থাকা ক্লাসগুলি ব্যবহার করার চেষ্টা করছেন।
কমন্সওয়ের

43

এটি এটি হিসাবে সহজ

একটি একক। ডেক্স ফাইলে 65,536 পদ্ধতি (রেফারেন্স) থাকতে পারে তাই যদি রেফারেন্সের সংখ্যা 65,536 ছাড়িয়ে যায়, আপনি মাল্টিডেক্স সহ যান।

আরও ব্যাখ্যা!

একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রোগ্রাম একটি .dex ফাইলে সংকলিত হয় যা একক .apk ফাইলে জিপ করে।
ডিভিএম (ডালভিক ভার্চুয়াল মেশিন) বাইকোডগুলি কার্যকর করতে .dex ফাইল / ফাইল ব্যবহার করে।

কী কারণে রেফারেন্সের সংখ্যা 65,536 সীমা ছাড়িয়ে যায়?
আপনার দ্বারা রচিত পদ্ধতিগুলি + অ্যান্ড্রয়েড ফ্রেমওয়ার্ক পদ্ধতিগুলি + তৃতীয় পক্ষের লাইব্রেরি (যেমন ভল্লি, রেট্রোফিট, ফেসবুক এসডিকে ইত্যাদি) পদ্ধতিগুলি।
আমি "কোথাও"
অ্যাপ কমপ্যাট পড়েছি 24.2.1 এ 16.5k পদ্ধতি রয়েছে
গুগল প্লে পরিষেবাদি জিসিএম 9.6.1-এ রয়েছে 16.7k পদ্ধতি রয়েছে
তাই আপনি যদি অ্যাপ্লিকেশনের কমপ্যাট 24.2.1 আছে এমন একটি সাধারণ হ্যালো ওয়ার্ল্ড অ্যাপ্লিকেশন তৈরি করে থাকেন তবে আপনি ইতিমধ্যে 1/4 একক ডেক্স পদ্ধতি সীমা অতিক্রম করার উপায়


7

অ্যান্ড্রয়েডে মাল্টিডেক্স কী?

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


1

অ্যান্ড্রয়েড বিকাশকারী অফিসিয়াল সাইট accroding।

If your minSdkVersion is set to 21 or higher, multidex is enabled by default and you do not need the multidex support library.

1
উত্তর করার জন্য ধন্যবাদ. এটি ২০১৫ সাল থেকে একটি প্রশ্ন, এর পর থেকে অনেক কিছুই পরিবর্তিত হয়েছিল।
রবার্তো টেললেজ ইবাররা

-2

এটি যা অনুমতি দেয় তা হ'ল, গুগল (এবং অন্যদের) জন্য ডিআরএম প্রয়োগ করা, বলার ... প্রশস্ততর, কোডের টুকরো যেখানে এটি বেশিরভাগ অ বিকাশকারীদের জন্য সমস্যা সৃষ্টি করে ..

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