অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.০.০ (অক্টোবর ২০১৭)

অ্যান্ড্রয়েড গ্রেডল প্লাগইন ৩.০.০-তে বিভিন্ন ধরণের পরিবর্তন অন্তর্ভুক্ত রয়েছে যা বৃহৎ প্রকল্পগুলির কর্মক্ষমতা সংক্রান্ত সমস্যাগুলি সমাধান করার লক্ষ্যে কাজ করে।

উদাহরণস্বরূপ, ~১৩০টি মডিউল এবং বিপুল সংখ্যক বহিরাগত নির্ভরতা (কিন্তু কোনও কোড বা সংস্থান নেই) সহ একটি নমুনা স্কেলেটন প্রকল্পে , আপনি নিম্নলিখিতগুলির মতো কর্মক্ষমতা উন্নতি অনুভব করতে পারেন:

অ্যান্ড্রয়েড প্লাগইন সংস্করণ + গ্রেডল সংস্করণ অ্যান্ড্রয়েড প্লাগইন 2.2.0 + গ্রেডল 2.14.1 অ্যান্ড্রয়েড প্লাগইন 2.3.0 + গ্রেডল 3.3 অ্যান্ড্রয়েড প্লাগইন 3.0.0 + গ্রেডল 4.1
কনফিগারেশন (যেমন ./gradlew --help চালানো) ~২ মিনিট ~৯ সেকেন্ড ~২.৫ সেকেন্ড
১-লাইন জাভা পরিবর্তন (বাস্তবায়ন পরিবর্তন) ~২ মিনিট ১৫ সেকেন্ড ~২৯ সেকেন্ড ~৬.৪ সেকেন্ড

এই পরিবর্তনগুলির মধ্যে কিছু বিদ্যমান বিল্ডগুলিকে ভেঙে দেয়। সুতরাং, আপনার বিবেচনা করা উচিত
নতুন প্লাগইন ব্যবহার করার আগে আপনার প্রকল্পটি স্থানান্তর করার প্রচেষ্টা।

যদি আপনি উপরে বর্ণিত কর্মক্ষমতা উন্নতিগুলি অনুভব না করেন, তাহলে অনুগ্রহ করে একটি বাগ ফাইল করুন এবং Gradle Profiler ব্যবহার করে আপনার বিল্ডের একটি ট্রেস অন্তর্ভুক্ত করুন।

অ্যান্ড্রয়েড প্লাগইনের এই সংস্করণটির জন্য নিম্নলিখিতগুলি প্রয়োজন:

সর্বনিম্ন সংস্করণ ডিফল্ট সংস্করণ মন্তব্য
গ্রেডল ৪.১ ৪.১ আরও জানতে, Gradle আপডেট করা দেখুন।
SDK বিল্ড টুলস ২৬.০.২ ২৬.০.২ SDK বিল্ড টুলস ইনস্টল বা কনফিগার করুন । এই আপডেটের মাধ্যমে, আপনাকে আর বিল্ড টুলসের জন্য কোনও সংস্করণ নির্দিষ্ট করতে হবে না—প্লাগইনটি ডিফল্টরূপে ন্যূনতম প্রয়োজনীয় সংস্করণ ব্যবহার করে। সুতরাং, আপনি এখন android.buildToolsVersion বৈশিষ্ট্যটি সরাতে পারেন।

৩.০.১ (নভেম্বর ২০১৭)

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

অপ্টিমাইজেশন

  • একটি সূক্ষ্মভাবে সুগঠিত টাস্ক গ্রাফের মাধ্যমে মাল্টি-মডিউল প্রকল্পের জন্য আরও ভালো সমান্তরালতা।
  • নির্ভরতা পরিবর্তন করার সময়, গ্র্যাডেল দ্রুত বিল্ড সম্পাদন করে, যে মডিউলগুলি সেই নির্ভরতার API-তে অ্যাক্সেস পায় না, সেগুলিকে পুনরায় কম্পাইল না করে। গ্র্যাডেলের নতুন নির্ভরতা কনফিগারেশনগুলি ব্যবহার করে আপনার কোন নির্ভরতাগুলি তাদের APIগুলিকে অন্য মডিউলগুলিতে ফাঁস করে তা সীমাবদ্ধ করা উচিত: implementation , api , compileOnly , এবং runtimeOnly
  • প্রতি-ক্লাস ডেক্সিংয়ের কারণে দ্রুত বর্ধনশীল বিল্ড স্পিড। প্রতিটি ক্লাস এখন আলাদা DEX ফাইলে কম্পাইল করা হয়, এবং শুধুমাত্র পরিবর্তিত ক্লাসগুলিকেই পুনরায় ডেক্স করা হয়। যেসব অ্যাপ minSdkVersion কে 20 বা তার কম সেট করে এবং লিগ্যাসি মাল্টি-ডেক্স ব্যবহার করে, তাদের জন্য উন্নত বিল্ড স্পিড আশা করা উচিত।
  • chached আউটপুট ব্যবহার করে নির্দিষ্ট কিছু কাজ অপ্টিমাইজ করে বিল্ড স্পিড উন্নত করা হয়েছে। এই অপ্টিমাইজেশন থেকে উপকৃত হতে, আপনাকে প্রথমে Gradle বিল্ড ক্যাশে সক্ষম করতে হবে।
  • AAPT2 ব্যবহার করে উন্নত ক্রমবর্ধমান রিসোর্স প্রক্রিয়াকরণ, যা এখন ডিফল্টরূপে সক্রিয়। AAPT2 ব্যবহার করার সময় যদি আপনি সমস্যার সম্মুখীন হন, তাহলে দয়া করে একটি বাগ রিপোর্ট করুন । আপনি আপনার gradle.properties ফাইলে android.enableAapt2=false সেট করে এবং কমান্ড লাইন থেকে ./gradlew --stop চালিয়ে Gradle ডেমন পুনরায় চালু করে AAPT2 নিষ্ক্রিয় করতে পারেন।

নতুন বৈশিষ্ট্য

  • ভেরিয়েন্ট-সচেতন নির্ভরতা ব্যবস্থাপনা । একটি মডিউলের একটি নির্দিষ্ট ভেরিয়েন্ট তৈরি করার সময়, প্লাগইনটি এখন স্বয়ংক্রিয়ভাবে স্থানীয় লাইব্রেরি মডিউল নির্ভরতার ভেরিয়েন্টগুলিকে আপনার তৈরি করা মডিউলের ভেরিয়েন্টের সাথে মেলায়।
  • অ্যান্ড্রয়েড ইনস্ট্যান্ট অ্যাপস এবং অ্যান্ড্রয়েড ইনস্ট্যান্ট অ্যাপস SDK (যা আপনি SDK ম্যানেজার ব্যবহার করে ডাউনলোড করতে পারেন) সমর্থন করার জন্য একটি নতুন ফিচার মডিউল প্লাগইন অন্তর্ভুক্ত করেছে। নতুন প্লাগইন দিয়ে ফিচার মডিউল তৈরি সম্পর্কে আরও জানতে, একাধিক বৈশিষ্ট্য সহ একটি তাত্ক্ষণিক অ্যাপের কাঠামো পড়ুন।
  • নির্দিষ্ট জাভা ৮ ভাষার বৈশিষ্ট্য এবং জাভা ৮ লাইব্রেরি ব্যবহারের জন্য অন্তর্নির্মিত সমর্থন। জ্যাক এখন অবচিত এবং আর প্রয়োজন নেই , এবং ডিফল্ট টুলচেইনে অন্তর্নির্মিত উন্নত জাভা ৮ সমর্থন ব্যবহার করার জন্য আপনাকে প্রথমে জ্যাকটি অক্ষম করতে হবে। আরও তথ্যের জন্য, জাভা ৮ ভাষার বৈশিষ্ট্যগুলি ব্যবহার করুন পড়ুন।
  • Android Test Orchestrator এর সাথে পরীক্ষা চালানোর জন্য অতিরিক্ত সমর্থন যোগ করা হয়েছে, যা আপনাকে আপনার অ্যাপের প্রতিটি পরীক্ষা তার নিজস্ব ইনভোকেশন অফ ইন্সট্রুমেন্টেশনের মধ্যে চালাতে দেয়। যেহেতু প্রতিটি পরীক্ষা তার নিজস্ব ইন্সট্রুমেন্টেশন ইনস্ট্যান্সে চলে, তাই পরীক্ষার মধ্যে কোনও ভাগ করা অবস্থা আপনার ডিভাইসের CPU বা মেমোরিতে জমা হয় না। এবং, এমনকি যদি একটি পরীক্ষা ক্র্যাশ করে, তবে এটি কেবল তার নিজস্ব ইন্সট্রুমেন্টেশনের ইনস্ট্যান্সটি সরিয়ে নেয়, তাই আপনার অন্যান্য পরীক্ষাগুলি এখনও চলবে।

    • ডিভাইসে টেস্ট অর্কেস্ট্রেশন ব্যবহার করা হবে কিনা তা নির্ধারণ করার জন্য testOptions.execution যোগ করা হয়েছে। আপনি যদি Android টেস্ট অর্কেস্ট্রেটর ব্যবহার করতে চান, তাহলে আপনাকে নীচে দেখানো হিসাবে ANDROID_TEST_ORCHESTRATOR নির্দিষ্ট করতে হবে। ডিফল্টরূপে, এই বৈশিষ্ট্যটি HOST এ সেট করা থাকে, যা ডিভাইসে অর্কেস্ট্রেশন অক্ষম করে এবং পরীক্ষা চালানোর জন্য এটি একটি আদর্শ পদ্ধতি।

    খাঁজকাটা

            android {
              testOptions {
                execution 'ANDROID_TEST_ORCHESTRATOR'
              }
            }
            

    কোটলিন

            android {
              testOptions {
                execution = "ANDROID_TEST_ORCHESTRATOR"
              }
            }
            
  • নতুন androidTestUtil নির্ভরতা কনফিগারেশন আপনাকে আপনার ইন্সট্রুমেন্টেশন পরীক্ষা চালানোর আগে আরেকটি টেস্ট হেল্পার APK ইনস্টল করার অনুমতি দেয়, যেমন Android Test Orchestrator:

    খাঁজকাটা

            dependencies {
              androidTestUtil 'com.android.support.test:orchestrator:1.0.0'
              ...
            }
            

    কোটলিন

            dependencies {
              androidTestUtil("com.android.support.test:orchestrator:1.0.0")
              ...
            }
            
  • Roboelectric এর মতো Android রিসোর্সের প্রয়োজন এমন ইউনিট পরীক্ষাগুলিকে সমর্থন করার জন্য testOptions.unitTests.includeAndroidResources যোগ করা হয়েছে। যখন আপনি এই বৈশিষ্ট্যটি true তে সেট করেন, তখন প্লাগইনটি আপনার ইউনিট পরীক্ষা চালানোর আগে রিসোর্স, অ্যাসেট এবং ম্যানিফেস্ট মার্জ করে। এরপর আপনার পরীক্ষাগুলি নিম্নলিখিত কীগুলির জন্য ক্লাসপাথে com/android/tools/test_config.properties পরিদর্শন করতে পারে:

    • android_merged_assets : মার্জ করা সম্পদ ডিরেক্টরির পরম পথ।

      দ্রষ্টব্য: লাইব্রেরি মডিউলের জন্য, মার্জ করা সম্পদগুলিতে নির্ভরতার সম্পদ থাকে না ( সংখ্যা #65550419 দেখুন)।

    • android_merged_manifest : মার্জ করা ম্যানিফেস্ট ফাইলের পরম পথ।

    • android_merged_resources : মার্জড রিসোর্স ডিরেক্টরিতে যাওয়ার পরম পথ, যেখানে মডিউলের সমস্ত রিসোর্স এবং এর সমস্ত নির্ভরতা রয়েছে।

    • android_custom_package : চূড়ান্ত R ক্লাসের প্যাকেজের নাম। যদি আপনি অ্যাপ্লিকেশন আইডিটি গতিশীলভাবে পরিবর্তন করেন, তাহলে এই প্যাকেজের নামটি অ্যাপের ম্যানিফেস্টে থাকা package অ্যাট্রিবিউটের সাথে নাও মিলতে পারে।

  • রিসোর্স হিসেবে ফন্টের জন্য সমর্থন (যা অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এ চালু করা একটি নতুন বৈশিষ্ট্য)।
  • অ্যান্ড্রয়েড ইনস্ট্যান্ট অ্যাপস SDK 1.1 এবং উচ্চতর সংস্করণ সহ ভাষা-নির্দিষ্ট APK-এর জন্য সমর্থন।
  • আপনি এখন আপনার বহিরাগত নেটিভ বিল্ড প্রকল্পের জন্য আউটপুট ডিরেক্টরি পরিবর্তন করতে পারেন, যেমনটি নীচে দেখানো হয়েছে:

    খাঁজকাটা

            android {
                ...
                externalNativeBuild {
                    // For ndk-build, instead use the ndkBuild block.
                    cmake {
                        ...
                        // Specifies a relative path for outputs from external native
                        // builds. You can specify any path that's not a subdirectory
                        // of your project's temporary build/ directory.
                        buildStagingDirectory "./outputs/cmake"
                    }
                }
            }
            

    কোটলিন

            android {
                ...
                externalNativeBuild {
                    // For ndk-build, instead use the ndkBuild block.
                    cmake {
                        ...
                        // Specifies a relative path for outputs from external native
                        // builds. You can specify any path that's not a subdirectory
                        // of your project's temporary build/ directory.
                        buildStagingDirectory = "./outputs/cmake"
                    }
                }
            }
            
  • অ্যান্ড্রয়েড স্টুডিও থেকে নেটিভ প্রজেক্ট তৈরি করার সময় আপনি এখন CMake 3.7 বা তার বেশি ব্যবহার করতে পারবেন।
  • নতুন lintChecks নির্ভরতা কনফিগারেশন আপনাকে একটি JAR তৈরি করতে দেয় যা কাস্টম লিন্ট নিয়মগুলি সংজ্ঞায়িত করে এবং এটি আপনার AAR এবং APK প্রকল্পগুলিতে প্যাকেজ করে।

    আপনার কাস্টম লিন্ট নিয়মগুলি অবশ্যই একটি পৃথক প্রকল্পের অন্তর্গত হতে হবে যা একটি একক JAR আউটপুট করে এবং শুধুমাত্র compileOnly নির্ভরতা অন্তর্ভুক্ত করে। অন্যান্য অ্যাপ এবং লাইব্রেরি মডিউলগুলি তখন lintChecks কনফিগারেশন ব্যবহার করে আপনার লিন্ট প্রকল্পের উপর নির্ভর করতে পারে:

    খাঁজকাটা

            dependencies {
                // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
                // and package it with your module. If the module is an Android library,
                // other projects that depend on it automatically use the lint checks.
                // If the module is an app, lint includes these rules when analyzing the app.
                lintChecks project(':lint-checks')
            }
            

    কোটলিন

            dependencies {
                // This tells the Gradle plugin to build ':lint-checks' into a lint.jar file
                // and package it with your module. If the module is an Android library,
                // other projects that depend on it automatically use the lint checks.
                // If the module is an app, lint includes these rules when analyzing the app.
                lintChecks(project(":lint-checks"))
            }
            

আচরণগত পরিবর্তন

  • অ্যান্ড্রয়েড প্লাগইন 3.0.0 নির্দিষ্ট API গুলি সরিয়ে দেয় এবং আপনি যদি সেগুলি ব্যবহার করেন তবে আপনার বিল্ডটি ভেঙে যাবে। উদাহরণস্বরূপ, আপনি আর outputFile() অবজেক্ট অ্যাক্সেস করতে Variants API ব্যবহার করতে পারবেন না অথবা প্রতিটি ভেরিয়েন্টের জন্য ম্যানিফেস্ট ফাইল পেতে processManifest.manifestOutputFile() ব্যবহার করতে পারবেন না। আরও জানতে, API পরিবর্তনগুলি পড়ুন।
  • বিল্ড টুলের জন্য আপনাকে আর কোনও সংস্করণ নির্দিষ্ট করতে হবে না (তাই, আপনি এখন android.buildToolsVersion প্রপার্টিটি সরিয়ে ফেলতে পারেন)। ডিফল্টরূপে, প্লাগইনটি স্বয়ংক্রিয়ভাবে আপনার ব্যবহৃত অ্যান্ড্রয়েড প্লাগইনের সংস্করণের জন্য প্রয়োজনীয় ন্যূনতম বিল্ড টুল সংস্করণ ব্যবহার করে।
  • এখন আপনি buildTypes ব্লকে PNG ক্রাঞ্চিং সক্ষম/অক্ষম করুন, যেমনটি নীচে দেখানো হয়েছে। ডিবাগ বিল্ড ছাড়া সকল বিল্ডের জন্য PNG ক্রাঞ্চিং ডিফল্টরূপে সক্ষম থাকে কারণ এটি অনেক PNG ফাইল ধারণকারী প্রকল্পের জন্য বিল্ড টাইম বৃদ্ধি করে। তাই, অন্যান্য বিল্ড টাইপের জন্য বিল্ড টাইম উন্নত করতে, আপনার হয় PNG ক্রাঞ্চিং অক্ষম করা উচিত অথবা আপনার ছবিগুলিকে WebP তে রূপান্তর করা উচিত

    খাঁজকাটা

          android {
            buildTypes {
              release {
                // Disables PNG crunching for the release build type.
                crunchPngs false
              }
            }
          }
          

    কোটলিন

          android {
            buildTypes {
              release {
                // Disables PNG crunching for the release build type.
                isCrunchPngs = false
              }
            }
          }
          
  • অ্যান্ড্রয়েড প্লাগইন এখন স্বয়ংক্রিয়ভাবে এক্সিকিউটেবল টার্গেট তৈরি করে যা আপনি আপনার বাহ্যিক CMake প্রকল্পগুলিতে কনফিগার করেন।
  • এখন আপনাকে annotationProcessor নির্ভরতা কনফিগারেশন ব্যবহার করে প্রসেসর ক্লাসপাথে অ্যানোটেশন প্রসেসর যুক্ত করতে হবে।
  • অপ্রচলিত ndkCompile ব্যবহার এখন আরও সীমাবদ্ধ। আপনার APK-তে প্যাকেজ করতে চান এমন নেটিভ কোড কম্পাইল করার জন্য আপনার CMake অথবা ndk-build ব্যবহার করা উচিত। আরও জানতে, ndkcompile থেকে Migrate পড়ুন।