নিয়ম রাখা সম্পর্কে

আপনি যখন ডিফল্ট সেটিংসের সাথে অ্যাপ অপ্টিমাইজেশান সক্ষম করেন , তখন R8 আপনার কর্মক্ষমতা সুবিধা সর্বাধিক করার জন্য ব্যাপক অপ্টিমাইজেশানগুলি সম্পাদন করে৷ R8 ক্লাস, ক্ষেত্র এবং পদ্ধতির নামকরণ, সরানো এবং অপসারণ সহ কোডে যথেষ্ট পরিবর্তন করে। আপনি যদি লক্ষ্য করেন যে এই পরিবর্তনগুলি ত্রুটির কারণ হয়, তাহলে আপনাকে নির্দিষ্ট করতে হবে কোড R8-এর কোন অংশগুলি পরিবর্তিত করা উচিত নয় সেইগুলি রাখার নিয়মগুলি ঘোষণা করে৷

সাধারণ পরিস্থিতিতে নিয়ম রাখা প্রয়োজন

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

  • প্রতিফলন দ্বারা অ্যাক্সেস করা কোড: R8 প্রতিফলনের সাথে ক্লাস, ক্ষেত্র বা পদ্ধতিগুলি কখন অ্যাক্সেস করা হয় তা সনাক্ত করতে পারে না। উদাহরণস্বরূপ, R8 Class.getDeclaredMethod() বা Class.getAnnotation() দিয়ে পুনরুদ্ধার করা একটি টীকা ব্যবহার করে তার নাম দ্বারা সন্ধান করা একটি পদ্ধতি সনাক্ত করতে পারে না। এই ক্ষেত্রে, R8 এই পদ্ধতিগুলি এবং টীকাগুলির নাম পরিবর্তন করতে পারে বা সেগুলিকে সম্পূর্ণরূপে সরিয়ে দিতে পারে, যা রানটাইমে একটি ClassNotFoundException বা NoSuchMethodException হতে পারে৷
  • জাভা নেটিভ ইন্টারফেস (জেএনআই) থেকে কল করা কোড: যখন নেটিভ (সি বা সি++) কোড একটি জাভা বা কোটলিন পদ্ধতিতে কল করে, বা জাভা বা কোটলিন কোড জেএনআই-এর সাথে C++ কোড কল করে, তখন কলটি পদ্ধতির নামের একটি গতিশীল স্ট্রিং লুকআপের উপর ভিত্তি করে। R8 ডাইনামিক স্ট্রিং-ভিত্তিক মেথড কল দেখতে পারে না, এবং তাই এর অপ্টিমাইজেশান আপনার কোড ভেঙ্গে দিতে পারে।

এটি এমন পরিস্থিতিগুলির একটি সম্পূর্ণ তালিকা নয় যার জন্য নিয়মগুলি রাখা প্রয়োজন, তবে এই পরিস্থিতিগুলি বেশিরভাগ ক্ষেত্রেই কভার করে যেখানে আপনার নিয়মগুলি রাখার প্রয়োজন হতে পারে।

কীভাবে আপনার অ্যাপে রাখার নিয়ম যোগ করবেন

অ্যাপ মডিউলের রুট ডিরেক্টরিতে অবস্থিত একটি proguard-rules.pro ফাইলে আপনার নিয়মগুলি যোগ করা উচিত—ফাইলটি ইতিমধ্যেই সেখানে থাকতে পারে, কিন্তু যদি এটি না থাকে তবে এটি তৈরি করুন৷ ফাইলে নিয়মগুলি প্রয়োগ করতে, আপনাকে অবশ্যই আপনার মডিউল-স্তরের build.gradle.kts (বা build.gradle ) ফাইলে নিম্নলিখিত কোডে দেখানো ফাইলটি ঘোষণা করতে হবে:

কোটলিন

android {
    buildTypes {
        release {
            isMinifyEnabled = true
            isShrinkResources = true

            proguardFiles(
                // File with default rules provided by the Android Gradle Plugin
                getDefaultProguardFile("proguard-android-optimize.txt"),

                // File with your custom rules
                "proguard-rules.pro"
            )
           // ...
        }
    }
    // ...
}

গ্রোভি

android {
    buildTypes {
        release {
            minifyEnabled true
            shrinkResources true

            proguardFiles(
                // File with default rules provided by the Android Gradle Plugin
                getDefaultProguardFile('proguard-android-optimize.txt'),

                // File with your custom rules.
                'proguard-rules.pro'
            )
           // ...
        }
    }
    // ...
}

ডিফল্টরূপে, আপনার বিল্ড ফাইলে proguard-android-optimize.txt ফাইলও অন্তর্ভুক্ত থাকে। এই ফাইলটিতে এমন নিয়ম রয়েছে যা বেশিরভাগ অ্যান্ড্রয়েড প্রকল্পের জন্য প্রয়োজনীয়, তাই আপনার এটি বিল্ড ফাইলে থাকতে দেওয়া উচিত। এই ফাইলটি proguard-common.txt ফাইলের উপর ভিত্তি করে তৈরি এবং বিষয়বস্তু শেয়ার করে।

বড় অ্যাপে সাধারণত একাধিক লাইব্রেরি মডিউলে কোড থাকে। এই ধরনের ক্ষেত্রে, নির্দিষ্ট লাইব্রেরি মডিউলের মধ্যে প্রযোজ্য কোডের পাশাপাশি Keep নিয়মগুলি রাখা ভাল। লাইব্রেরির জন্য নিয়ম বজায় রাখার ক্ষেত্রে গুরুত্বপূর্ণ পার্থক্য হল আপনি কীভাবে এই নিয়মগুলি আপনার লাইব্রেরি মডিউলের build.gradle.kts (বা build.gradle ) ফাইলের মধ্যে ঘোষণা করেন। আরও জানতে লাইব্রেরি লেখকদের জন্য অপ্টিমাইজেশন দেখুন।

রাখার নিয়ম যোগ করুন

আপনি রাখার নিয়মগুলি যোগ করলে, আপনি বিশ্বব্যাপী বিকল্পগুলি অন্তর্ভুক্ত করতে পারেন সেইসাথে আপনার নিজের রাখার নিয়মগুলি সংজ্ঞায়িত করতে পারেন।

  • গ্লোবাল অপশন : গ্লোবাল অপশন হল সাধারণ নির্দেশাবলী যা আপনার সম্পূর্ণ কোডবেসে R8 কীভাবে কাজ করে তা প্রভাবিত করে। আরও জানতে, গ্লোবাল বিকল্পগুলি দেখুন।
  • নিয়মগুলি রাখুন : আপনার অ্যাপটি অসাবধানতাবশত ভঙ্গ না করে কোড অপ্টিমাইজেশানের মধ্যে আপনি সঠিক ভারসাম্য পান তা নিশ্চিত করার জন্য নিয়মগুলি যত্ন সহকারে ডিজাইন করা প্রয়োজন৷ আপনার নিজের রাখার নিয়মের সিনট্যাক্স শিখতে, দেখুন নিয়ম সিনট্যাক্স রাখুন

লাইব্রেরি লেখকদের জন্য নিয়ম রাখুন

রাখার নিয়মের জন্য বিশ্বব্যাপী বিকল্প এবং সিনট্যাক্স সম্পর্কে জানার পরে, আরও বিশদ বিবরণের জন্য লাইব্রেরি লেখকদের জন্য অপ্টিমাইজেশন দেখুন।