অপ্টিমাইজেশনের সমস্যা সমাধান করুন

যেহেতু R8 এর অপ্টিমাইজেশন আপনার অ্যাপের কোড আপডেট করে, তাই আপনার অ্যাপটি প্রত্যাশা অনুযায়ী কাজ করছে কিনা তা নিশ্চিত করার জন্য আপনার অ্যাপের আচরণ দৃঢ়ভাবে পরীক্ষা করা গুরুত্বপূর্ণ। অপ্রত্যাশিত আচরণের ক্ষেত্রে, অপ্টিমাইজেশনের পরে সম্ভাব্য সমস্যাগুলি সমাধানের জন্য এই পৃষ্ঠাটি একটি নির্দেশিকা হিসাবে ব্যবহার করুন।

সমস্যা সমাধানের সময়, নিম্নলিখিত পরিস্থিতিগুলিতে মনোযোগ দিন:

  • অতিরিক্ত অপ্টিমাইজেশনের ফলে অ্যাপ ক্র্যাশ হচ্ছে : R8 অতিরিক্ত কোড অপ্টিমাইজ করার কারণে আপনার অ্যাপ ক্র্যাশ হচ্ছে।
  • অস্পষ্ট বা অপর্যাপ্ত অপ্টিমাইজেশন : R8 আপনার অ্যাপটি যতটা আশা করেছিল ততটা অপ্টিমাইজ করেনি অথবা অপ্টিমাইজেশনের জন্য আপনার আরও ব্যাখ্যা প্রয়োজন।

অ্যাপ ক্র্যাশ হয়েছে

যদি আপনার অ্যাপটি R8 দিয়ে অপ্টিমাইজ করার পরে ক্র্যাশ হয়ে যায়, তাহলে এটি সাধারণত ভাঙা প্রতিফলনের কারণে হয়। ভাঙা প্রতিফলন সনাক্ত করতে, নিম্নলিখিত নির্দেশিকাগুলি ব্যবহার করুন:

  • আপনি একটি ব্যতিক্রম লক্ষ্য করেন যার অর্থ সাধারণত নির্দেশিত শ্রেণী, পদ্ধতি, বা ক্ষেত্রটি প্রতিফলনের মাধ্যমে ব্যবহৃত হচ্ছে। এই ব্যতিক্রমগুলি সাধারণত নিম্নলিখিতগুলির মধ্যে একটি: ClassNotFoundException , NoSuchMethodException , NoSuchFieldException , NoClassDefFoundError , NoSuchMethodError , NoSuchFieldError
  • আপনি এমন কোড দেখতে পাবেন যা import kotlin.reflect.* অথবা import java.lang.reflect.* দিয়ে প্রতিফলন উল্লেখ করে।
  • আপনি লক্ষ্য করবেন যে একটি ক্লাস কনস্ট্রাক্টর নিম্নরূপ ব্যবহৃত হচ্ছে: Something::class.constructors
  • তুমি Class.forName(...) দেখতে পাবে।

সমাধান : একটি কিপ রুল যোগ করুন।

অস্পষ্ট বা অপর্যাপ্ত অপ্টিমাইজেশন

যেহেতু নিয়মগুলি আপনার অ্যাপ থেকে প্রয়োগ করা হয়, সেইসাথে অন্তর্ভুক্ত লাইব্রেরিগুলি থেকেও, প্রয়োগ করা নিয়মগুলি সম্পর্কে আপনার অতিরিক্ত স্পষ্টতার প্রয়োজন হতে পারে, অথবা R8 কেন কোডের কিছু অংশ ধরে রেখেছে যা আপনি অপ্টিমাইজ করার আশা করেছিলেন তার ব্যাখ্যা প্রয়োজন হতে পারে।

  • প্রযোজ্য নিয়ম সম্পর্কে অস্পষ্টতা : যেহেতু অন্তর্ভুক্ত লাইব্রেরিগুলির নিয়মগুলি আপনার অ্যাপেও প্রযোজ্য হয় এবং এই লাইব্রেরিগুলির গ্লোবাল বিকল্পগুলিও আপনার অ্যাপে প্রচারিত হয়, তাই কোন নিয়মগুলি প্রয়োগ করা হবে তা সম্পর্কে আপনি অনিশ্চিত হতে পারেন।

    সমাধান : আপনার প্রকল্প তৈরি করার সময় R8 কোন নিয়মগুলি প্রয়োগ করে তার প্রতিবেদনটি দেখে কোন নিয়মগুলি প্রয়োগ করা হয়েছে তা পরীক্ষা করুন। আপনি এই প্রতিবেদনটি ./app/build/outputs/mapping/configuration.txt ওয়েবসাইটে পেতে পারেন। এই প্রতিবেদনে R8 কনফিগার করার জন্য ব্যবহৃত প্রতিটি লাইব্রেরি এবং মডিউল থেকে সমস্ত মার্জ করা নিয়ম রয়েছে এবং অদক্ষ নিয়মগুলি সনাক্ত করতে ব্যবহার করা যেতে পারে।

  • অনেক বেশি কোড রাখা হচ্ছে : R8 এর অপ্টিমাইজেশন এমন কোড ধরে রাখতে পারে যা আপনি অপসারণের আশা করেছিলেন।

    সমাধান : কোডটি কেন রাখা হয়েছে তা বুঝতে কনফিগারেশন বিকল্প -whyareyoukeeping ব্যবহার করুন। আউটপুটে রাখা কোড থেকে আপনার অ্যাপের এন্ট্রি পয়েন্টগুলির একটিতে যাওয়ার পথ রয়েছে। আরও তথ্যের জন্য, -whyareyoukeeping দেখুন।

  • মূল স্ট্যাক ট্রেস বুঝতে অসুবিধা : R8 বিভিন্ন উপায়ে কোড পরিবর্তন করে, যার ফলে স্ট্যাক ট্রেস আর মূল কোডের সাথে সম্পর্কিত হয় না। উদাহরণস্বরূপ, লাইন নম্বর এবং ক্লাস এবং পদ্ধতির নাম পরিবর্তন হতে পারে।

    সমাধান : অ্যান্ড্রয়েড স্টুডিও অটার ৩ ফিচার ড্রপ এবং এজিপি ৯.০ দিয়ে শুরু করে, লগক্যাট স্বয়ংক্রিয়ভাবে স্ট্যাক ট্রেসগুলিকে অস্পষ্ট করে। তবে, যদি আপনি অ্যান্ড্রয়েড স্টুডিওর পূর্ববর্তী সংস্করণ ব্যবহার করেন, তাহলে আপনাকে মূল স্ট্যাক ট্রেসটি ম্যানুয়ালি পুনরুদ্ধার করতে হবে। মূল স্ট্যাক ট্রেসটি পুনরুদ্ধার করতে, retrace কমান্ড-লাইন টুলটি ব্যবহার করুন, যা কমান্ড-লাইন টুলস প্যাকেজের সাথে যুক্ত।

    retrace ব্যবহার করতে, একটি ম্যাপিং ফাইল এবং একটি স্ট্যাক ট্রেস ফাইলের পাথ সহ কমান্ডটি প্রদান করুন। mapping.txt নামক ম্যাপিং ফাইলটি স্বয়ংক্রিয়ভাবে আপনার Android অ্যাপ বান্ডেল (AAB) এর সাথে বান্ডিল হয়ে যায়। আরও বিস্তারিত জানার জন্য, ক্র্যাশ স্ট্যাক ট্রেসগুলিকে কীভাবে অস্পষ্ট করতে হয় সে সম্পর্কে retrace ডকুমেন্টেশন এবং Play Console সহায়তা কেন্দ্রের নিবন্ধটি দেখুন। Play এবং Firebase Crashlytics ব্যবহার করার সময়, পরিষেবাটি অ্যাপ ব্যবহারকারীদের কাছ থেকে সংগ্রহ করা ক্র্যাশগুলির সাথে mapping.txt ফাইলটি ব্যবহার করুন। নিম্নলিখিত কমান্ডটি দেখায় যে আপনি কীভাবে আপনার প্রকল্পের রুট থেকে retrace চালাতে পারেন:

    $ANDROID_HOME/cmdline-tools/latest/bin/retrace app/build/outputs/mapping/$releaseVariant/mapping.txt trace.txt
    

বাগ রিপোর্ট করুন

যদি আপনি R8 এর সাথে কোন সমস্যা সমাধান করতে না পারেন, তাহলে একটি বাগ ফাইল করুন