ART কনফিগার করুন

এই পৃষ্ঠাটি কীভাবে Android রানটাইম (ART) এবং এর সংকলন বিকল্পগুলি কনফিগার করতে হয় তা নিয়ে আলোচনা করে। এখানে সম্বোধন করা বিষয়গুলির মধ্যে রয়েছে সিস্টেম ইমেজের প্রি-কম্পাইলেশন কনফিগারেশন, dex2oat কম্পাইলেশন অপশন, এবং সিস্টেম পার্টিশন স্পেস, ডেটা পার্টিশন স্পেস এবং পারফরম্যান্স কীভাবে ট্রেড করা যায়।

ART এর সাথে কাজ করার জন্য ART এবং Dalvik এবং Dalvik এক্সিকিউটেবল ফরম্যাট দেখুন। আপনার অ্যাপ্লিকেশানগুলি সঠিকভাবে কাজ করে তা নিশ্চিত করতে Android রানটাইম (ART) এ অ্যাপ আচরণ যাচাই করা দেখুন।

কিভাবে ART কাজ করে

ART আগাম-অব-টাইম (AOT) সংকলন ব্যবহার করে এবং Android 7 থেকে শুরু করে, এটি AOT সংকলন, জাস্ট-ইন-টাইম (JIT) সংকলন এবং ব্যাখ্যার একটি সংকর সংমিশ্রণ ব্যবহার করে এবং AOT সংকলন প্রোফাইল-নির্দেশিত হতে পারে। এই সমস্ত এক্সিকিউশন মোডের সমন্বয় কনফিগারযোগ্য এবং এই বিভাগে আলোচনা করা হবে। উদাহরণ হিসাবে, পিক্সেল ডিভাইসগুলি নিম্নলিখিত প্রবাহে কাজ করার জন্য কনফিগার করা হয়েছে:

  1. প্লে স্টোর দ্বারা বিতরণ করা ডেক্স মেটাডেটা ( .dm ) ফাইলের সাথে একটি অ্যাপ্লিকেশন প্রাথমিকভাবে ইনস্টল করা হয়, যাতে একটি ক্লাউড প্রোফাইল থাকে। ART AOT-ক্লাউড প্রোফাইলে তালিকাভুক্ত পদ্ধতিগুলি কম্পাইল করে। অথবা, যদি অ্যাপ্লিকেশনটি একটি dex মেটাডেটা ফাইল ছাড়া ইনস্টল করা হয়, কোন AOT সংকলন করা হয় না।
  2. প্রথম কয়েকবার অ্যাপ্লিকেশন চালানো হয়, AOT-সংকলিত নয় এমন পদ্ধতিগুলিকে ব্যাখ্যা করা হয়। ব্যাখ্যা করা পদ্ধতিগুলির মধ্যে, যেগুলি প্রায়শই কার্যকর করা হয় সেগুলি JIT-সংকলিত হয়। এআরটি এক্সিকিউশনের উপর ভিত্তি করে একটি স্থানীয় প্রোফাইল তৈরি করে এবং এটিকে ক্লাউড প্রোফাইলের সাথে একত্রিত করে (যদি একটি থাকে)।
  3. যখন ডিভাইসটি নিষ্ক্রিয় থাকে এবং চার্জ করা হয়, একটি সংকলন ডেমন প্রথম কয়েকটি রানের সময় উত্পন্ন সম্মিলিত প্রোফাইলের উপর ভিত্তি করে অ্যাপ্লিকেশনটিকে পুনরায় কম্পাইল করতে চালায়।
  4. অ্যাপ্লিকেশানের পরবর্তী রানগুলিতে, ART সংকলন ডেমন দ্বারা উত্পন্ন আর্টিফ্যাক্টগুলি ব্যবহার করে, যাতে আরও বেশি AOT-সংকলিত কোড থাকে, যেগুলি AOT-সংকলিত নয় এমন পদ্ধতিগুলির সময় উত্পন্ন হওয়াগুলির তুলনায় এখনও ব্যাখ্যা করা হয় বা JIT-সংকলিত হয়৷ ART এক্সিকিউশনের উপর ভিত্তি করে প্রোফাইল ইনস্টলেশন আপডেট করে, এবং তারপরে কম্পাইলেশন ডেমনের পরবর্তী রান দ্বারা প্রোফাইলটি তোলা হবে।

ART একটি কম্পাইলার ( dex2oat টুল) এবং একটি রানটাইম ( libart.so ) নিয়ে গঠিত যা বুট করার সময় লোড হয়। dex2oat টুলটি একটি APK ফাইল নেয় এবং রানটাইম লোড হওয়া এক বা একাধিক সংকলন আর্টিফ্যাক্ট ফাইল তৈরি করে। ফাইলের সংখ্যা, তাদের এক্সটেনশন এবং নাম রিলিজ জুড়ে পরিবর্তন সাপেক্ষে, কিন্তু Android 8 রিলিজ হিসাবে, এই ফাইলগুলি তৈরি করা হয়েছে:

  • .vdex : যাচাইকরণের গতি বাড়ানোর জন্য কিছু অতিরিক্ত মেটাডেটা ধারণ করে, কখনও কখনও APK-এর আনকমপ্রেসড DEX কোড সহ।
  • .odex : APK-এ পদ্ধতির জন্য AOT-সংকলিত কোড রয়েছে।
  • .art (optional) এ APK-এ তালিকাভুক্ত কিছু স্ট্রিং এবং ক্লাসের ART অভ্যন্তরীণ উপস্থাপনা রয়েছে, যা অ্যাপ স্টার্টআপের গতি বাড়াতে ব্যবহৃত হয়।

সংকলন বিকল্প

এআরটি-এর জন্য দুটি বিভাগের সংকলন বিকল্প রয়েছে:

  1. সিস্টেম রম কনফিগারেশন: সিস্টেম ইমেজ তৈরি করার সময় AOT কি কোড কম্পাইল করা হয়।
  2. রানটাইম কনফিগারেশন: কিভাবে ART কম্পাইল করে এবং একটি ডিভাইসে অ্যাপ চালায়।

কম্পাইলার ফিল্টার

এই দুটি বিভাগ কনফিগার করার জন্য একটি মূল ART বিকল্প হল কম্পাইলার ফিল্টার । কম্পাইলার ফিল্টারগুলি কীভাবে ART DEX কোড কম্পাইল করে তা চালায় এবং এটি dex2oat টুলে পাস করা একটি বিকল্প। অ্যান্ড্রয়েড 8 থেকে শুরু করে, চারটি আনুষ্ঠানিকভাবে সমর্থিত ফিল্টার রয়েছে:

  • verify : শুধুমাত্র DEX কোড যাচাইকরণ চালায় (কোনও AOT সংকলন নয়)।
  • quicken : (Android 11 বা তার নিচের) DEX কোড যাচাইকরণ চালায় এবং আরও ভাল দোভাষী কর্মক্ষমতা পেতে কিছু DEX নির্দেশাবলী অপ্টিমাইজ করে।
  • speed : DEX কোড যাচাইকরণ চালায় এবং AOT-সকল পদ্ধতি কম্পাইল করে। ক্লাস প্রারম্ভিক করে না।
  • speed-profile : DEX কোড যাচাইকরণ চালায়, প্রোফাইলে তালিকাভুক্ত AOT-সংকলন পদ্ধতিগুলি, এবং প্রোফাইলে তালিকাভুক্ত ক্লাসগুলিকে প্রাক-প্রাথমিক করে তোলে যার মধ্যে স্ট্যাটিক ইনিশিয়ালাইজেশন নেই।

সিস্টেম রম কনফিগারেশন

প্রি-ইনস্টল করা লাইব্রেরি এবং অ্যাপগুলি AOT-সংকলিত হয় যখন একটি সিস্টেম ইমেজ তৈরি করা হয়। এই প্রক্রিয়াটিকে ডেক্সপ্রিওপ্ট বলা হয়। এই ধরনের সংকলিত ফাইলগুলি ব্যবহারযোগ্য যতক্ষণ পর্যন্ত সমস্ত নির্ভরতা অপরিবর্তিত থাকে, বিশেষ করে বুট ক্লাসপথ।

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

ডেক্সপ্রিওপ্ট কনফিগার করার জন্য বেশ কয়েকটি ART বিল্ড বিকল্প উপলব্ধ রয়েছে। আপনি কীভাবে এই বিকল্পগুলি কনফিগার করবেন তা নির্ভর করে সিস্টেম ইমেজের জন্য উপলব্ধ স্টোরেজ স্থান এবং পূর্বে ইনস্টল করা অ্যাপ্লিকেশনের সংখ্যার উপর। একটি সিস্টেম রমে সংকলিত JARs/APK গুলিকে চারটি বিভাগে ভাগ করা যেতে পারে:

  • বুট ক্লাসপাথ কোড: ডিফল্টভাবে speed-profile কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়।
  • সিস্টেম সার্ভার কোড (এই নথিতে পরে PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS দেখুন):
    • (Android 14 এবং উচ্চতর) ডিফল্টভাবে speed-profile কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়, অথবা যদি প্রোফাইল প্রদান না করা হয় তাহলে speed কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়।
    • (Android 13 এবং নিম্নতর) ডিফল্টভাবে speed কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে।
    PRODUCT_SYSTEM_SERVER_COMPILER_FILTER এর মাধ্যমে কনফিগারযোগ্য (পরে এই নথিতে দেখুন)।
  • পণ্য-নির্দিষ্ট মূল অ্যাপ্লিকেশানগুলি (এই নথিতে পরে PRODUCT_DEXPREOPT_SPEED_APPS দেখুন): ডিফল্টরূপে speed কম্পাইলার ফিল্টার দিয়ে সংকলিত৷
  • অন্যান্য সমস্ত অ্যাপ: ডিফল্টভাবে speed-profile কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা, অথবা প্রোফাইল প্রদান না করা থাকলে verify কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা।

    PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER এর মাধ্যমে কনফিগারযোগ্য (পরে এই নথিতে দেখুন)।

মেকফাইল অপশন

  • WITH_DEXPREOPT
  • সিস্টেম ইমেজে ইনস্টল করা DEX কোডে dex2oat আহ্বান করা হয়েছে কিনা। ডিফল্টরূপে সক্রিয়.

  • DONT_DEXPREOPT_PREBUILTS (Android 5 এবং উচ্চতর)
  • DONT_DEXPREOPT_PREBUILTS সক্ষম করা পূর্বনির্মাণগুলিকে ডেক্সপ্রিওপ্ট করা থেকে বাধা দেয়৷ এগুলি এমন অ্যাপ যা তাদের Android.mk এ নির্দিষ্ট include $(BUILD_PREBUILT) । Google Play-এর মাধ্যমে আপডেট হওয়ার সম্ভাবনা রয়েছে এমন প্রি-বিল্ট অ্যাপগুলির ডেক্সপ্রিওপ্ট এড়িয়ে যাওয়া সিস্টেম ইমেজে জায়গা বাঁচায় কিন্তু প্রথম বুট টাইমে যোগ করে। মনে রাখবেন যে Android.bp এ সংজ্ঞায়িত প্রি-বিল্ট অ্যাপগুলিতে এই বিকল্পটির কোনো প্রভাব নেই।

  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER (Android 9 এবং উচ্চতর)
  • PRODUCT_DEX_PREOPT_DEFAULT_COMPILER_FILTER dexpreopted অ্যাপ্লিকেশনের জন্য ডিফল্ট কম্পাইলার ফিল্টার নির্দিষ্ট করে। এই অ্যাপগুলিকে Android.bp এ সংজ্ঞায়িত করা হয়েছে বা তাদের Android.mk এ নির্দিষ্ট include $(BUILD_PREBUILT) রয়েছে। অনির্দিষ্ট থাকলে, ডিফল্ট মানটি হয় speed-profile , অথবা মানটি অনির্দিষ্ট থাকলে এবং একটি প্রোফাইল প্রদান করা না থাকলে তা verify

  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY (Android 8 MR1 থেকে)
  • WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY সক্ষম করা শুধুমাত্র বুট ক্লাসপাথ এবং সিস্টেম সার্ভার জারগুলিকে ডেক্সপ্রিঅপ্ট করে৷

  • LOCAL_DEX_PREOPT
  • মডিউল সংজ্ঞায় LOCAL_DEX_PREOPT বিকল্পটি নির্দিষ্ট করে একটি পৃথক অ্যাপের ভিত্তিতে Dexpreopt সক্ষম বা নিষ্ক্রিয় করা যেতে পারে। এটি এমন অ্যাপগুলির ডেক্সপ্রিওপ্ট অক্ষম করার জন্য কার্যকর হতে পারে যেগুলি অবিলম্বে Google Play আপডেটগুলি পেতে পারে কারণ আপডেটগুলি সিস্টেম চিত্রের dexpreopted কোডটিকে অপ্রচলিত করে দেবে৷ এটি প্রধান সংস্করণ আপগ্রেড OTA-তে স্থান বাঁচাতেও দরকারী কারণ ব্যবহারকারীদের ইতিমধ্যে ডেটা পার্টিশনে অ্যাপগুলির নতুন সংস্করণ থাকতে পারে।

    LOCAL_DEX_PREOPT যথাক্রমে dexpreopt সক্ষম বা নিষ্ক্রিয় করতে true বা false মান সমর্থন করে। উপরন্তু, dexpreopt যদি APK বা JAR ফাইল থেকে classes.dex ফাইলটি ছিনতাই না করে তাহলে nostripping নির্দিষ্ট করা যেতে পারে। সাধারণত এই ফাইলটি ছিনতাই করা হয় কারণ ডেক্সপ্রিওপ্টের পরে এটির আর প্রয়োজন নেই, তবে তৃতীয় পক্ষের APK স্বাক্ষরগুলি বৈধ থাকার জন্য এই শেষ বিকল্পটি প্রয়োজনীয়৷

  • PRODUCT_DEX_PREOPT_BOOT_FLAGS
  • বুট ইমেজ কিভাবে কম্পাইল করা হয় তা নিয়ন্ত্রণ করতে dex2oat এ অপশন পাস করে। এটি কাস্টমাইজড ইমেজ ক্লাস লিস্ট, কম্পাইল করা ক্লাস লিস্ট এবং কম্পাইলার ফিল্টার নির্দিষ্ট করতে ব্যবহার করা যেতে পারে।

  • PRODUCT_DEX_PREOPT_DEFAULT_FLAGS
  • বুট ইমেজ ছাড়াও সবকিছু কীভাবে সংকলিত হয় তা নিয়ন্ত্রণ করতে dex2oat এ বিকল্পগুলি পাস করে।

  • PRODUCT_DEX_PREOPT_MODULE_CONFIGS
  • একটি নির্দিষ্ট মডিউল এবং পণ্য কনফিগারেশনের জন্য dex2oat বিকল্পগুলি পাস করার ক্ষমতা প্রদান করে। এটি একটি পণ্যের device.mk ফাইলে $(call add-product-dex-preopt-module-config,<modules>,<option>) দ্বারা সেট করা হয়েছে যেখানে <modules> JAR এবং APK ফাইলগুলির জন্য LOCAL_MODULE এবং LOCAL_PACKAGE নামের একটি তালিকা , যথাক্রমে।

  • PRODUCT_DEXPREOPT_SPEED_APPS (Android 8 থেকে)
  • অ্যাপ্লিকেশানগুলির তালিকা যা পণ্যগুলির মূল হিসাবে চিহ্নিত করা হয়েছে এবং যেগুলি speed কম্পাইলার ফিল্টারের সাথে কম্পাইল করা পছন্দনীয়৷ উদাহরণস্বরূপ, সিস্টেমইউআই-এর মতো স্থায়ী অ্যাপগুলি শুধুমাত্র পরবর্তী রিবুটে প্রোফাইল-নির্দেশিত সংকলন ব্যবহার করার সুযোগ পায়, তাই এই অ্যাপগুলি সবসময় AOT-সংকলিত থাকা পণ্যের পক্ষে ভাল হতে পারে।

  • PRODUCT_SYSTEM_SERVER_APPS (Android 8 থেকে)
  • সিস্টেম সার্ভার দ্বারা লোড করা অ্যাপের তালিকা। এই অ্যাপগুলি speed কম্পাইলার ফিল্টার দিয়ে ডিফল্টভাবে কম্পাইল করা হয়।

  • PRODUCT_ART_TARGET_INCLUDE_DEBUG_BUILD (Android 8 থেকে)
  • ডিভাইসে ART এর একটি ডিবাগ সংস্করণ অন্তর্ভুক্ত করা হবে কিনা। ডিফল্টরূপে, এটি userdebug এবং eng বিল্ডের জন্য সক্রিয় করা হয়। আচরণটি স্পষ্টভাবে true বা false বিকল্প সেট করে ওভাররাইড করা যেতে পারে।

    ডিফল্টরূপে, ডিভাইসটি nondebug সংস্করণ ( libart.so ) ব্যবহার করে। স্যুইচ করতে, সিস্টেম প্রপার্টি persist.sys.dalvik.vm.lib.2 libartd.so এ সেট করুন।

  • WITH_DEXPREOPT_PIC (Android 7 পর্যন্ত)
  • Android 5.1.0 থেকে Android 6.0.1-এ, WITH_DEXPREOPT_PIC পজিশন-ইনডিপেনডেন্ট কোড (PIC) সক্ষম করতে নির্দিষ্ট করা যেতে পারে। এর সাহায্যে, ইমেজ থেকে সংকলিত কোডকে /system থেকে /data/dalvik-cache এ স্থানান্তরিত করতে হবে না, ডেটা পার্টিশনে স্থান বাঁচাতে হবে। যাইহোক, একটি সামান্য রানটাইম প্রভাব আছে কারণ এটি একটি অপ্টিমাইজেশন অক্ষম করে যা অবস্থান-নির্ভর কোডের সুবিধা নেয়। সাধারণত, /data স্থান বাঁচাতে চায় এমন ডিভাইসগুলিকে PIC সংকলন সক্ষম করা উচিত।

    অ্যান্ড্রয়েড 7.0-এ, পিআইসি সংকলন ডিফল্টরূপে সক্ষম ছিল।

  • WITH_DEXPREOPT_BOOT_IMG_ONLY (Android 7 MR1 পর্যন্ত)
  • এই বিকল্পটি WITH_DEXPREOPT_BOOT_IMG_AND_SYSTEM_SERVER_ONLY দিয়ে প্রতিস্থাপিত হয়েছে যা সিস্টেম সার্ভার JAR-কেও প্রিঅপ্ট করে।

  • PRODUCT_SYSTEM_SERVER_COMPILER_FILTER
  • এই বিকল্পটি সিস্টেম সার্ভারের জন্য কম্পাইলার ফিল্টার নির্দিষ্ট করে।

    • (Android 14 এবং উচ্চতর) অনির্দিষ্ট থাকলে, speed-profile কম্পাইলার ফিল্টার ব্যবহার করা হয়, অথবা যদি প্রোফাইল প্রদান না করা হয় তবে speed কম্পাইলার ফিল্টার ব্যবহার করা হয়।
    • (Android 13 এবং নিম্নতর) অনির্দিষ্ট থাকলে, speed কম্পাইলার ফিল্টার ব্যবহার করা হয়।
    • speed সেট করা হলে, speed কম্পাইলার ফিল্টার ব্যবহার করা হয়।
    • speed-profile সেট করা থাকলে, speed-profile কম্পাইলার ফিল্টার ব্যবহার করা হয়, অথবা প্রোফাইল প্রদান না করা হলে verify কম্পাইলার ফিল্টার ব্যবহার করা হয়।
    • verify জন্য সেট করা থাকলে, verify কম্পাইলার ফিল্টার ব্যবহার করা হয়।

  • PRODUCT_SYSTEM_SERVER_JARS , PRODUCT_APEX_SYSTEM_SERVER_JARS , PRODUCT_STANDALONE_SYSTEM_SERVER_JARS , PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS
  • নিম্নলিখিত JAR-এর তালিকা যা সিস্টেম সার্ভার দ্বারা লোড করা হয়। JARগুলি PRODUCT_SYSTEM_SERVER_COMPILER_FILTER দ্বারা নির্দিষ্ট করা কম্পাইলার ফিল্টার দিয়ে কম্পাইল করা হয়েছে

    • (প্রয়োজনীয়) PRODUCT_SYSTEM_SERVER_JARS : প্ল্যাটফর্মে সিস্টেম সার্ভার ক্লাসপাথ JAR-এর তালিকা (অর্থাৎ SYSTEMSERVERCLASSPATH এর অংশ হিসেবে)। এই তালিকায় সিস্টেম সার্ভার ক্লাসপাথ JAR যোগ করা প্রয়োজন। তালিকায় সিস্টেম সার্ভার ক্লাসপাথ JAR যোগ করতে ব্যর্থ হলে সেই JARগুলি লোড হচ্ছে না।
    • (প্রয়োজনীয়) PRODUCT_APEX_SYSTEM_SERVER_JARS : APEX এর সাথে বিতরণ করা সিস্টেম সার্ভার ক্লাসপাথ JAR-এর তালিকা (অর্থাৎ SYSTEMSERVERCLASSPATH এর অংশ হিসাবে)। বিন্যাস হল <apex name>:<jar name> । এই তালিকায় APEX সিস্টেম সার্ভার ক্লাসপাথ JAR যোগ করা প্রয়োজন। এই তালিকায় APEX সিস্টেম সার্ভার ক্লাসপাথ JAR যোগ করতে ব্যর্থ হলে সেই JARগুলি লোড হচ্ছে না।
    • (ঐচ্ছিক, Android 13 এবং নিম্নতর) PRODUCT_STANDALONE_SYSTEM_SERVER_JARS : JAR-এর তালিকা যা সিস্টেম সার্ভার পৃথক ক্লাসলোডার ব্যবহার করে গতিশীলভাবে লোড করে ( SystemServiceManager.startServiceFromJar এর মাধ্যমে)। এই তালিকায় স্বতন্ত্র সিস্টেম সার্ভার JAR যোগ করার প্রয়োজন নেই তবে দৃঢ়ভাবে সুপারিশ করা হয় কারণ এটি JAR গুলিকে সংকলিত করে এবং তাই একটি ভাল রানটাইম কর্মক্ষমতা রয়েছে।
    • (অবশ্যক, Android 13 থেকে) PRODUCT_APEX_STANDALONE_SYSTEM_SERVER_JARS : APEX এর সাথে বিতরণ করা JAR গুলির তালিকা যা সিস্টেম সার্ভার গতিশীলভাবে পৃথক ক্লাসলোডার ব্যবহার করে লোড করে (অর্থাৎ, SystemServiceManager.startServiceFromJar এর মাধ্যমে বা <apex-system-service> service হিসাবে ঘোষিত)। বিন্যাস হল <apex name>:<jar name> । এই তালিকায় স্বতন্ত্র APEX সিস্টেম সার্ভার JAR যোগ করা প্রয়োজন। এই তালিকায় স্বতন্ত্র APEX সিস্টেম সার্ভার JAR যোগ করতে ব্যর্থ হলে বুট ব্যর্থতা দেখা দেয়।

    বুট ক্লাসপাথ কনফিগারেশন

    প্রিলোড করা ক্লাসের তালিকা হল ক্লাসের একটি তালিকা যা জাইগোট স্টার্টআপে শুরু করে। এটি প্রতিটি অ্যাপকে এই ক্লাস ইনিশিয়ালাইজারগুলিকে আলাদাভাবে চালানো থেকে বাঁচায়, তাদের দ্রুত শুরু করতে এবং মেমরিতে পৃষ্ঠাগুলি ভাগ করার অনুমতি দেয়। প্রিলোড করা ক্লাসের তালিকা ফাইলটি ডিফল্টরূপে frameworks/base/config/preloaded-classes অবস্থিত এবং এতে একটি তালিকা রয়েছে যা সাধারণ ফোন ব্যবহারের জন্য টিউন করা হয়েছে। এটি পরিধানযোগ্য অন্যান্য ডিভাইসের জন্য ভিন্ন হতে পারে এবং সেই অনুযায়ী টিউন করতে হবে। এই টিউন করার সময় সতর্ক থাকুন; অব্যবহৃত ক্লাস লোড হয়ে গেলে অনেকগুলি ক্লাস যোগ করা স্মৃতি নষ্ট করে। খুব কম ক্লাস যোগ করলে প্রতিটি অ্যাপের নিজস্ব কপি থাকতে হয়, যা আবার মেমরি নষ্ট করে।

    উদাহরণ ব্যবহার (পণ্যের device.mk এ):

    PRODUCT_COPY_FILES += <filename>:system/etc/preloaded-classes
    

    দ্রষ্টব্য: আপনাকে অবশ্যই এই লাইনটি স্থাপন করতে হবে যে কোনো পণ্য কনফিগারেশন মেকফাইল উত্তরাধিকারসূত্রে নেওয়ার আগে যা build/target/product/base.mk থেকে ডিফল্ট একটি পায়।

    রানটাইম কনফিগারেশন

    JIT বিকল্প

    নিম্নলিখিত বিকল্পগুলি শুধুমাত্র Android রিলিজগুলিকে প্রভাবিত করে যেখানে ART JIT কম্পাইলার উপলব্ধ।

    • dalvik.vm.usejit : JIT সক্রিয় আছে কি না।
    • dalvik.vm.jitinitialsize (ডিফল্ট 64K): কোড ক্যাশের প্রাথমিক ক্ষমতা। কোড ক্যাশে নিয়মিত GC এবং প্রয়োজন হলে বৃদ্ধি হবে.
    • dalvik.vm.jitmaxsize (ডিফল্ট 64M): কোড ক্যাশের সর্বোচ্চ ক্ষমতা।
    • dalvik.vm.jitthreshold (ডিফল্ট 10000): পদ্ধতিটি JIT-সংকলিত হওয়ার জন্য একটি পদ্ধতির "হটনেস" কাউন্টারকে যে থ্রেশহোল্ডটি পাস করতে হবে। "হটনেস" কাউন্টারটি রানটাইমের একটি মেট্রিক অভ্যন্তরীণ। এতে কলের সংখ্যা, অনগ্রসর শাখা এবং অন্যান্য বিষয় অন্তর্ভুক্ত রয়েছে।
    • dalvik.vm.usejitprofiles (Android 13 পর্যন্ত): JIT প্রোফাইল সক্রিয় আছে কি না; dalvik.vm.usejit মিথ্যা হলেও এটি ব্যবহার করা যেতে পারে। মনে রাখবেন যে এটি মিথ্যা হলে, কম্পাইলার ফিল্টার speed-profile কোনো পদ্ধতি AOT-কম্পাইল করে না এবং verify সমতুল্য। Android 14 থেকে, JIT প্রোফাইলগুলি সর্বদা সক্রিয় থাকে এবং বন্ধ করা যায় না।
    • dalvik.vm.jitprithreadweight (ডিফল্ট থেকে dalvik.vm.jitthreshold / 20): অ্যাপ্লিকেশন UI থ্রেডের জন্য JIT "নমুনা" (জিটথ্রেশহোল্ড দেখুন) এর ওজন। অ্যাপের সাথে ইন্টারঅ্যাক্ট করার সময় ব্যবহারকারীদের অভিজ্ঞতাকে সরাসরি প্রভাবিত করে এমন পদ্ধতির সংকলন দ্রুত করতে ব্যবহার করুন।
    • dalvik.vm.jittransitionweight (ডিফল্ট থেকে dalvik.vm.jitthreshold / 10): কম্পাইল কোড এবং ইন্টারপ্রেটারের মধ্যে রূপান্তরিত পদ্ধতি আহ্বানের ওজন। এটি নিশ্চিত করতে সহায়তা করে যে জড়িত পদ্ধতিগুলি ট্রানজিশনগুলি কমানোর জন্য সংকলিত হয়েছে (যা ব্যয়বহুল)।

    Dex2oat বিকল্প

    এই বিকল্পগুলি অন-ডিভাইস সংকলনকে প্রভাবিত করে (ওরফে, dexopt ), এবং এর মধ্যে কয়েকটি ডেক্সপ্রিওপ্টকেও প্রভাবিত করে, যেখানে উপরের সিস্টেম রম কনফিগারেশন বিভাগে আলোচনা করা বিকল্পগুলি শুধুমাত্র ডেক্সপ্রিওপ্টকে প্রভাবিত করে।

    সম্পদ ব্যবহার নিয়ন্ত্রণ করার বিকল্প:

    • dalvik.vm.image-dex2oat-threads / dalvik.vm.image-dex2oat-cpu-set (অ্যান্ড্রয়েড 11 পর্যন্ত): বুট ইমেজের জন্য ব্যবহার করার জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
    • dalvik.vm.boot-dex2oat-threads / dalvik.vm.boot-dex2oat-cpu-set :
      • (অ্যান্ড্রয়েড 11 পর্যন্ত) বুট ইমেজ ছাড়া অন্য সব কিছুর জন্য বুট সময় ব্যবহার করার জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
      • (অ্যান্ড্রয়েড 12 থেকে) বুট ইমেজ সহ সবকিছুর জন্য বুট করার সময় ব্যবহার করার জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
        • বিশেষত, Android 14 থেকে, এটি ART পরিষেবাতে অগ্রাধিকার শ্রেণী PRIORITY_BOOT সাথে মিলে যায়৷
    • dalvik.vm.restore-dex2oat-threads / dalvik.vm.restore-dex2oat-cpu-set :
      • (এন্ড্রয়েড 11 থেকে, অ্যান্ড্রয়েড 13 পর্যন্ত) ক্লাউড ব্যাকআপ থেকে পুনরুদ্ধার করার জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
      • (অ্যান্ড্রয়েড 14 থেকে) ক্লাউড ব্যাকআপ থেকে পুনরুদ্ধার সহ স্বাভাবিকের চেয়ে বেশি লেটেন্সি-সংবেদনশীল সবকিছুর জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
        • বিশেষত, এটি ART পরিষেবাতে অগ্রাধিকার শ্রেণী PRIORITY_INTERACTIVE_FAST এর সাথে মিলে যায়৷
    • dalvik.vm.background-dex2oat-threads / dalvik.vm.background-dex2oat-cpu-set (Android 14 থেকে): ব্যাকগ্রাউন্ডে ব্যবহার করার জন্য থ্রেডের সংখ্যা এবং CPU কোরের সেট (নীচে দেখুন)।
      • বিশেষত, এটি ART পরিষেবাতে অগ্রাধিকার শ্রেণী PRIORITY_BACKGROUND এর সাথে মিলে যায়৷
    • dalvik.vm.dex2oat-threads / dalvik.vm.dex2oat-cpu-set : থ্রেডের সংখ্যা এবং CPU কোরের সেট অন্য সব কিছুর জন্য ব্যবহার করতে হবে।

    CPU কোরের একটি সেট CPU ids-এর একটি কমা-বিভক্ত তালিকা হিসাবে নির্দিষ্ট করা উচিত। উদাহরণস্বরূপ CPU কোর 0-3-এ dex2oat চালানোর জন্য, সেট করুন:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    

    সিপিইউ অ্যাফিনিটি বৈশিষ্ট্যগুলি সেট করার সময়, আমরা অপ্রয়োজনীয় মেমরি এবং আই/ও বিতর্ক এড়াতে নির্বাচিত নম্বর সিপিইউগুলির সাথে মেলে ডেক্স2ওট থ্রেডের সংখ্যার জন্য সংশ্লিষ্ট বৈশিষ্ট্যের সাথে মিল করার পরামর্শ দিই:

    dalvik.vm.dex2oat-cpu-set=0,1,2,3
    dalvik.vm.dex2oat-threads=4
    

    উপরের সিস্টেমের বৈশিষ্ট্যগুলি ছাড়াও, আপনি dex2oat এর সংস্থান ব্যবহার নিয়ন্ত্রণ করতে টাস্ক প্রোফাইলগুলিও ব্যবহার করতে পারেন ( Cgroup Abstraction Layer দেখুন)।

    সমর্থিত টাস্ক প্রোফাইল হল:

    • Dex2OatBackground (অ্যান্ড্রয়েড 14 থেকে) (ডিফল্টভাবে Dex2OatBootComplete উত্তরাধিকারসূত্রে প্রাপ্ত হয়): পটভূমিতে ব্যবহার করার জন্য সংস্থানগুলি নিয়ন্ত্রণ করে।
      • বিশেষত, এটি ART পরিষেবাতে অগ্রাধিকার শ্রেণী PRIORITY_BACKGROUND এর সাথে মিলে যায়৷
    • Dex2OatBootComplete :
      • (অ্যান্ড্রয়েড 13 পর্যন্ত) বুট করার পরে সবকিছুর জন্য ব্যবহার করার জন্য সংস্থান নিয়ন্ত্রণ করে।
      • (অ্যান্ড্রয়েড 14 থেকে) বুট করার পরে সবকিছুর জন্য ব্যবহার করার সংস্থান নিয়ন্ত্রণ করে এবং ব্যাকগ্রাউন্ডে নয়।
        • বিশেষত, এটি ART পরিষেবাতে অগ্রাধিকার শ্রেণীর PRIORITY_INTERACTIVE_FAST এবং PRIORITY_INTERACTIVE সাথে মিলে যায়৷

    যখন উভয় সিস্টেম বৈশিষ্ট্য এবং টাস্ক প্রোফাইল নির্দিষ্ট করা হয়, উভয়ই কার্যকর হয়।

    স্তূপের আকার নিয়ন্ত্রণ করার বিকল্পগুলি:

    • dalvik.vm.image-dex2oat-Xms : বুট ইমেজের জন্য প্রাথমিক হিপ সাইজ।
    • dalvik.vm.image-dex2oat-Xmx : বুট ইমেজের জন্য সর্বোচ্চ হিপ সাইজ।
    • dalvik.vm.dex2oat-Xms : অন্য সবকিছুর জন্য প্রাথমিক হিপ সাইজ।
    • dalvik.vm.dex2oat-Xmx : অন্য সবকিছুর জন্য সর্বোচ্চ হিপ সাইজ।

    dex2oat জন্য প্রারম্ভিক এবং সর্বাধিক হিপ সাইজ নিয়ন্ত্রণ করে এমন বিকল্পগুলি কমানো উচিত নয় কারণ তারা কোন অ্যাপ্লিকেশনগুলিকে কম্পাইল করা যেতে পারে তা সীমিত করতে পারে।

    কম্পাইলার ফিল্টার নিয়ন্ত্রণ করার বিকল্পগুলি:

    • dalvik.vm.image-dex2oat-filter (Android 11 পর্যন্ত): বুট ইমেজের জন্য কম্পাইলার ফিল্টার। অ্যান্ড্রয়েড 12 থেকে, বুট চিত্রগুলির জন্য কম্পাইলার ফিল্টারটি সর্বদা speed-profile এবং পরিবর্তন করা যায় না।
    • dalvik.vm.systemservercompilerfilter (অ্যান্ড্রয়েড 13 থেকে): সিস্টেম সার্ভারের জন্য কম্পাইলার ফিল্টার। PRODUCT_SYSTEM_SERVER_COMPILER_FILTER দেখুন।
    • dalvik.vm.systemuicompilerfilter (অ্যান্ড্রয়েড 13 থেকে): সিস্টেম UI প্যাকেজের জন্য কম্পাইলার ফিল্টার।
    • dalvik.vm.dex2oat-filter (Android 6 পর্যন্ত): অন্য সব কিছুর জন্য কম্পাইলার ফিল্টার।
    • pm.dexopt.<reason> (Android 7 থেকে): অন্য সবকিছুর জন্য কম্পাইলার ফিল্টার। অ্যান্ড্রয়েড 14 এবং তার বেশির জন্য ART পরিষেবা কনফিগারেশন বা Android 13 এবং নীচের জন্য প্যাকেজ ম্যানেজার কনফিগারেশন দেখুন।

    বুট ইমেজ ব্যতীত অন্য সবকিছুর সংকলন নিয়ন্ত্রণ করার জন্য অন্যান্য বিকল্প:

    • dalvik.vm.dex2oat-very-large (Android 7.1 থেকে): AOT সংকলন নিষ্ক্রিয় করতে বাইটে ন্যূনতম মোট ডেক্স ফাইলের আকার।
    • dalvik.vm.dex2oat-swap (অ্যান্ড্রয়েড 7.1 থেকে) (ডিফল্ট: সত্য): dex2oat-এর জন্য একটি সোয়াপ ফাইল ব্যবহার করার অনুমতি দেয়। এটি মেমরির বাইরের ক্র্যাশ এড়াতে সাহায্য করতে পারে। মনে রাখবেন যে এই বিকল্পটি চালু থাকলেও, dex2oat শুধুমাত্র নির্দিষ্ট শর্তের অধীনে একটি সোয়াপ ফাইল ব্যবহার করবে, যেমন যখন dex ফাইলের সংখ্যা বেশি হয়, এবং শর্তগুলি পরিবর্তন সাপেক্ষে।
    • dalvik.vm.ps-min-first-save-ms (অ্যান্ড্রয়েড 12 থেকে): অ্যাপ্লিকেশনটির একটি প্রোফাইল তৈরি করার আগে, প্রথমবার অ্যাপ্লিকেশনটি চালু করার সময় রানটাইমের আগে অপেক্ষা করার ন্যূনতম সময়।
    • dalvik.vm.ps-min-save-period-ms (অ্যান্ড্রয়েড 12 থেকে): অ্যাপ্লিকেশনটির প্রোফাইল আপডেট করার আগে অপেক্ষা করার ন্যূনতম সময়।
    • dalvik.vm.dex2oat64.enabled (Android 11 থেকে) (ডিফল্ট: মিথ্যা): dex2oat এর 64-বিট সংস্করণ ব্যবহার করবেন কিনা।
    • dalvik.vm.bgdexopt.new-classes-percent (Android 12 থেকে) (ডিফল্ট: 20): একটি প্রোফাইলে নতুন ক্লাসের ন্যূনতম শতাংশ, 0 থেকে 100 এর মধ্যে, একটি পুনরায় সংকলন ট্রিগার করতে। শুধুমাত্র প্রোফাইল-নির্দেশিত সংকলনের জন্য প্রযোজ্য ( speed-profile ), সাধারণত ব্যাকগ্রাউন্ড ডেক্সোপ্টের সময়। লক্ষ্য করুন যে শতাংশের থ্রেশহোল্ড ছাড়াও কমপক্ষে 50টি নতুন ক্লাসের একটি থ্রেশহোল্ড রয়েছে এবং এটি কনফিগারযোগ্য নয়৷
    • dalvik.vm.bgdexopt.new-methods-percent (অ্যান্ড্রয়েড 12 থেকে) (ডিফল্ট: 20): একটি পুনঃসংকলন ট্রিগার করার জন্য একটি প্রোফাইলে নতুন পদ্ধতির ন্যূনতম শতাংশ, 0 থেকে 100 এর মধ্যে। শুধুমাত্র প্রোফাইল-নির্দেশিত সংকলনের জন্য প্রযোজ্য ( speed-profile ), সাধারণত ব্যাকগ্রাউন্ড ডেক্সোপ্টের সময়। লক্ষ্য করুন যে শতাংশের থ্রেশহোল্ড ছাড়াও কমপক্ষে 100টি নতুন পদ্ধতির একটি থ্রেশহোল্ড রয়েছে এবং এটি কনফিগারযোগ্য নয়।
    • dalvik.vm.dex2oat-max-image-block-size (Android 10 থেকে) (ডিফল্ট: 524288) সংকুচিত চিত্রগুলির জন্য সর্বাধিক কঠিন ব্লক আকার। একটি বড় ইমেজ কঠিন ব্লকের একটি সেটে বিভক্ত হয় যাতে কোন ব্লকই সর্বোচ্চ আকারের চেয়ে বড় হয় না।
    • dalvik.vm.dex2oat-resolve-startup-strings (অ্যান্ড্রয়েড 10 থেকে) (ডিফল্ট: সত্য) সত্য হলে, প্রোফাইলে "স্টার্টআপ" হিসাবে চিহ্নিত পদ্ধতিগুলি থেকে উল্লেখ করা সমস্ত কনস্ট-স্ট্রিংগুলিকে সমাধান করতে dex2oat-এর কারণ হয়৷
    • debug.generate-debug-info (ডিফল্ট: মিথ্যা) নেটিভ ডিবাগিংয়ের জন্য ডিবাগ তথ্য তৈরি করতে হবে কি না, যেমন স্ট্যাক আনওয়াইন্ডিং তথ্য, ELF চিহ্ন এবং বামন বিভাগ।
    • dalvik.vm.dex2oat-minidebuginfo (অ্যান্ড্রয়েড 9 থেকে) (ডিফল্ট: সত্য) ব্যাকট্রেস প্রিন্ট করার জন্য প্রয়োজনীয় ন্যূনতম পরিমাণ LZMA- সংকুচিত ডিবাগ তথ্য তৈরি করতে হবে কিনা।

    ART পরিষেবার বিকল্পগুলি

    অ্যান্ড্রয়েড 14 থেকে, অ্যাপ্লিকেশানগুলির জন্য অন-ডিভাইস AOT সংকলন (ওরফে dexopt) ART পরিষেবা দ্বারা পরিচালিত হয়। এআরটি সার্ভিস কনফিগার করার বিষয়ে তথ্যের জন্য, এআরটি সার্ভিস কনফিগারেশন দেখুন।

    প্যাকেজ ম্যানেজার বিকল্প

    অ্যান্ড্রয়েড 14-এর আগে, অ্যাপগুলির জন্য অন-ডিভাইস AOT সংকলন (ওরফে dexopt) প্যাকেজ ম্যানেজার দ্বারা পরিচালিত হয়। dexopt-এর জন্য প্যাকেজ ম্যানেজার কনফিগার করার বিষয়ে তথ্যের জন্য, প্যাকেজ ম্যানেজার কনফিগারেশন দেখুন।

    A/B নির্দিষ্ট কনফিগারেশন

    রম কনফিগারেশন

    Android 7.0 থেকে শুরু করে, ডিভাইসগুলি A/B সিস্টেম আপডেটগুলি সক্ষম করতে দুটি সিস্টেম পার্টিশন ব্যবহার করতে পারে৷ সিস্টেম পার্টিশনের আকার সংরক্ষণ করতে, অব্যবহৃত দ্বিতীয় সিস্টেম পার্টিশনে প্রি-অপটেড ফাইলগুলি ইনস্টল করা যেতে পারে। সেগুলি তারপর প্রথম বুটে ডেটা পার্টিশনে কপি করা হয়।

    উদাহরণ ব্যবহার ( device-common.mk এ):

    PRODUCT_PACKAGES += \
         cppreopts.sh
    PRODUCT_PROPERTY_OVERRIDES += \
         ro.cp_system_other_odex=1
    

    এবং ডিভাইসের BoardConfig.mk এ:

    BOARD_USES_SYSTEM_OTHER_ODEX := true
    

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

    SYSTEM_OTHER_ODEX_FILTER ?= app/% priv-app/%
    

    পটভূমি OTA dexopt

    A/B সক্ষম ডিভাইসগুলিতে, নতুন সিস্টেম চিত্রের সাথে রিবুট করার আগে অ্যাপ্লিকেশনগুলি পটভূমিতে কম্পাইল করা যেতে পারে। ঐচ্ছিকভাবে সিস্টেম ইমেজে সংকলন স্ক্রিপ্ট এবং বাইনারি অন্তর্ভুক্ত করতে পটভূমিতে অ্যাপ সংকলন দেখুন। এই সংকলনের জন্য ব্যবহৃত সংকলন ফিল্টার নিয়ন্ত্রিত হয়:

    pm.dexopt.ab-ota=speed-profile
    

    আমরা প্রোফাইল নির্দেশিত সংকলনের সুবিধা নিতে এবং স্টোরেজ সংরক্ষণ করতে speed-profile ব্যবহার করার পরামর্শ দিই।

    JDWP বিকল্প

    ইউজারডিবাগ বিল্ডে জাভা ডিবাগ ওয়্যার প্রোটোকল (JDWP) থ্রেড তৈরিকে persist.debug.dalvik.vm.jdwp.enabled সিস্টেম সম্পত্তির মাধ্যমে নিয়ন্ত্রণ করা হয়। ডিফল্টরূপে, এই সম্পত্তি সেট করা হয় না এবং JDWP থ্রেডগুলি শুধুমাত্র ডিবাগযোগ্য অ্যাপের জন্য তৈরি করা হয়। ডিবাগযোগ্য এবং ননডিবাগেবল উভয় অ্যাপের জন্য JDWP থ্রেড সক্ষম করতে, persist.debug.dalvik.vm.jdwp.enabled 1 এ সেট করুন। সম্পত্তিতে পরিবর্তনগুলি কার্যকর করার জন্য ডিভাইসটিকে অবশ্যই রিবুট করতে হবে৷

    একটি ইউজারডিবাগ বিল্ডে একটি ননডিবাগেবল অ্যাপ ডিবাগ করতে, নিম্নলিখিত কমান্ডটি চালিয়ে JDWP সক্ষম করুন:

      adb shell setprop persist.debug.dalvik.vm.jdwp.enabled 1
      adb reboot
      
    অ্যান্ড্রয়েড 13 এবং তার নিচের সংস্করণে চলমান ডিভাইসগুলির জন্য, রানটাইম ইউজারডিবাগ বিল্ডগুলিতে ডিবাগযোগ্য এবং ননডিবাগেবল অ্যাপগুলির জন্য JDWP থ্রেড তৈরি করে। এর মানে হল যে ইউজারডিবাগ বিল্ডগুলিতে একটি ডিবাগার বা প্রোফাইল সংযুক্ত করা সম্ভব।