আধুনিক Android ডেভেলপমেন্টে, ছোট, দ্রুত ও সুরক্ষিত অ্যাপ্লিকেশন প্রকাশ করা ব্যবহারকারীর মৌলিক প্রত্যাশা। এটি অর্জন করার জন্য Android বিল্ড সিস্টেমের প্রাথমিক টুল হল R8 অপ্টিমাইজার, এটি হল এমন কম্পাইলার যা কোড ছোট করা, কোডের নাম পরিবর্তন করা বা মিনিফাই করা এবং অ্যাপ অপ্টিমাইজ করার জন্য অব্যবহৃত কোড ও রিসোর্স সরিয়ে দেয়।
অ্যাপ রিলিজ করার জন্য প্রস্তুত করার ক্ষেত্রে R8 চালু করা একটি গুরুত্বপূর্ণ ধাপ, তবে এর জন্য ডেভেলপারদের "কীপ রুল" হিসেবে নির্দেশিকা প্রদান করতে হয়।
এই নিবন্ধটি পড়ার পরে, YouTube-এ R8 অপ্টিমাইজার চালু করা, ডিবাগ করা এবং সমস্যা সমাধান করার বিষয়ে পারফর্ম্যান্স স্পটলাইট সপ্তাহ ভিডিওটি দেখুন।
Keep সংক্রান্ত নিয়ম কেন প্রয়োজন
Keep Rules লেখার প্রয়োজনীয়তা একটি মূল দ্বন্দ্ব থেকে উদ্ভূত হয়: R8 হল একটি স্ট্যাটিক অ্যানালিসিস টুল, কিন্তু Android অ্যাপগুলি প্রায়শই JNI (Java Native Interface) ব্যবহার করে নেটিভ কোডের মধ্যে ও বাইরে রিফ্লেকশন বা কলের মতো ডায়নামিক এক্সিকিউশন প্যাটার্নের উপর নির্ভর করে।
R8 সরাসরি কল বিশ্লেষণ করে ব্যবহৃত কোডের একটি গ্রাফ তৈরি করে। ডায়নামিক উপায়ে কোড অ্যাক্সেস করা হলে, R8-এর স্ট্যাটিক অ্যানালিসিস তা অনুমান করতে পারে না এবং সেই কোডকে ব্যবহার করা হয়নি হিসেবে শনাক্ত করে সরিয়ে দেয়, এর ফলে রানটাইম ক্র্যাশ হয়।
কীপ নিয়ম হল R8 কম্পাইলারের জন্য একটি স্পষ্ট নির্দেশিকা, যা বলে: "এই নির্দিষ্ট ক্লাস, মেথড বা ফিল্ড হল একটি এন্ট্রি পয়েন্ট যা রানটাইমে ডায়নামিক অ্যাক্সেস করা হবে। আপনাকে এটি অবশ্যই রাখতে হবে, এমনকি আপনি যদি এটির কোনও সরাসরি রেফারেন্স খুঁজে না পান।"
Keep সংক্রান্ত নিয়মাবলী সম্পর্কে আরও বিবরণের জন্য অফিসিয়াল গাইড দেখুন।
Keep সংক্রান্ত নিয়ম কোথায় লিখতে হয়
কোনও অ্যাপ্লিকেশনের জন্য কাস্টম 'কীপ' নিয়ম টেক্সট ফাইলে লেখা হয়। প্রচলিত নিয়ম অনুযায়ী, এই ফাইলের নাম proguard-rules.pro এবং এটি অ্যাপ বা লাইব্রেরি মডিউলের মূল ফোল্ডারে থাকে। এই ফাইলটি আপনার মডিউলের build.gradle.kts ফাইলের release বিল্ড টাইপে উল্লেখ করা হয়।
release {
isShrinkResources = true
isMinifyEnabled = true
proguardFiles(
getDefaultProguardFile("proguard-android-optimize.txt"),
"proguard-rules.pro",
)
}সঠিক ডিফল্ট ফাইল ব্যবহার করুন
getDefaultProguardFile পদ্ধতি Android SDK-এর দেওয়া নিয়মের একটি ডিফল্ট সেট ইমপোর্ট করে। ভুল ফাইল ব্যবহার করলে, আপনার অ্যাপ অপ্টিমাইজ নাও হতে পারে। proguard-android-optimize.txt ব্যবহার করতে ভুলবেন না। এই ফাইলটি স্ট্যান্ডার্ড Android কম্পোনেন্টের জন্য ডিফল্ট Keep Rules প্রদান করে এবং R8-এর কোড অপ্টিমাইজেশন চালু করে। পুরনো proguard-android.txt শুধুমাত্র Keep-এর নিয়ম প্রদান করে, তবে R8-এর অপ্টিমাইজেশন চালু করে না।
এটি যেহেতু পারফর্ম্যান্স সংক্রান্ত একটি গুরুতর সমস্যা, তাই আমরা Android Studio Narwhal 3 ফিচার ড্রপ থেকে শুরু করে ভুল ফাইল ব্যবহার করার ব্যাপারে ডেভেলপারদের সতর্ক করা শুরু করছি। এছাড়াও, Android Gradle Plugin Version 9.0 থেকে আমরা আর পুরনো proguard-android.txt ফাইল কাজ করে না। তাই, অপ্টিমাইজ করা ভার্সনে আপগ্রেড করতে ভুলবেন না।
কীভাবে Keep সংক্রান্ত নিয়ম লিখতে হয়
একটি 'কীপ' নিয়মের তিনটি প্রধান অংশ থাকে:
- একটি বিকল্প যেমন
-keepবা-keepclassmembers - ঐচ্ছিক মডিফায়ার যেমন
allowshrinking - কোড মেলাতে একটি ক্লাস স্পেসিফিকেশন
সম্পূর্ণ সিনট্যাক্স ও উদাহরণের জন্য, কীপ নিয়ম যোগ করা সংক্রান্ত নির্দেশিকা দেখুন।
Keep Rule অ্যান্টি-প্যাটার্ন
পেশাদার পদ্ধতি সম্পর্কে জানা যেমন গুরুত্বপূর্ণ, তেমনই অ্যান্টি-প্যাটার্ন সম্পর্কেও জানা গুরুত্বপূর্ণ। এইসব অ্যান্টি-প্যাটার্ন প্রায়শই ভুল বোঝা বা সমস্যার সমাধান করার শর্টকাট থেকে তৈরি হয় এবং প্রোডাকশন বিল্ডের পারফর্ম্যান্সের জন্য তা খুবই ক্ষতিকর হতে পারে।
গ্লোবাল বিকল্প
এইসব ফ্ল্যাগ হল গ্লোবাল টগল যা রিলিজ বিল্ডে কখনও ব্যবহার করা উচিত নয়। এগুলি শুধুমাত্র কোনও সমস্যা আলাদা করে দেখার জন্য সাময়িক ডিবাগিংয়ের জন্য ব্যবহার করা হয়।
-dontotptimize ব্যবহার করলে R8-এর পারফর্ম্যান্স অপ্টিমাইজেশন কার্যকরভাবে বন্ধ হয়ে যায়, এর ফলে অ্যাপ ধীরে চলে।
-dontobfuscate ব্যবহার করার সময় আপনি সব রিনেমিং বন্ধ করে দেন এবং -dontshrink ব্যবহার করলে ডেড কোড সরিয়ে দেওয়া বন্ধ হয়ে যায়। এই দুটি গ্লোবাল নিয়মই অ্যাপের সাইজ বাড়িয়ে দেয়।
আরও ভাল পারফর্ম্যান্সের জন্য প্রোডাকশন এনভায়রনমেন্টে এইসব গ্লোবাল ফ্ল্যাগ এড়িয়ে চলুন।
অত্যন্ত ব্যাপক 'রাখার' নিয়ম
R8-এর সুবিধা বাতিল করার সবচেয়ে সহজ উপায় হল অত্যন্ত বিস্তৃত 'রাখুন' নিয়ম লেখা। নিচের মতো নিয়ম R8 অপ্টিমাইজারকে এই প্যাকেজ বা এর সাব-প্যাকেজের যেকোনও ক্লাসকে ছোট, অস্পষ্ট বা অপ্টিমাইজ না করার নির্দেশ দেয়। এর ফলে, সেই পুরো প্যাকেজের জন্য R8-এর সুবিধা সম্পূর্ণভাবে সরিয়ে দেওয়া হয়। এর পরিবর্তে, ছোট ও নির্দিষ্ট Keep নিয়ম লেখার চেষ্টা করুন।
-keep class com.example.package.** { *;} // WIDE KEEP RULES CAUSE PROBLEMSইনভার্সন অপারেটর (!)
ইনভার্সন অপারেটর (!) কোনও নিয়ম থেকে প্যাকেজ বাদ দেওয়ার একটি শক্তিশালী উপায় বলে মনে হচ্ছে। কিন্তু বিষয়টি এত সহজ নয়। এই উদাহরণটি দেখুন:
-keep class !com.example.my_package.** { *; } // USE WITH CAUTIONআপনি হয়ত ভাবছেন যে এই নিয়মের অর্থ হল, "ক্লাসকেcom.example.package-এ রাখবেন না"। কিন্তু এর আসল অর্থ হল, "সম্পূর্ণ অ্যাপ্লিকেশনের মধ্যে থাকা প্রতিটি ক্লাস, মেথড ও প্রপার্টিকে com.example.package-এর মধ্যে রাখবেন না ।" এটি আপনার কাছে অপ্রত্যাশিত মনে হলে, আপনার R8 কনফিগারেশনে কোনও নেগেশন আছে কিনা তা ভাল করে চেক করে দেখুন।
Android কম্পোনেন্টের জন্য অপ্রয়োজনীয় নিয়ম
আরেকটি সাধারণ ভুল হল আপনার অ্যাপের Activities, Services, বা BroadcastReceivers-এর জন্য ম্যানুয়ালি 'কীপ' নিয়ম যোগ করা। এটি অপ্রয়োজনীয়। ডিফল্ট proguard-android-optimize.txt ফাইলে আগে থেকেই এই স্ট্যান্ডার্ড Android কম্পোনেন্ট যাতে বক্সের বাইরে কাজ করতে পারে তার জন্য প্রাসঙ্গিক নিয়ম অন্তর্ভুক্ত থাকে।
এছাড়াও, অনেক লাইব্রেরি নিজস্ব Keep সংক্রান্ত নিয়ম নিয়ে আসে। তাই, এগুলির জন্য আপনাকে নিজের নিয়ম লিখতে হবে না। আপনি ব্যবহার করছেন এমন কোনও লাইব্রেরির Keep Rules-এ সমস্যা হলে, সমস্যাটি কী তা জানতে লাইব্রেরির লেখকের সাথে যোগাযোগ করাই ভাল।
Keep নিয়ম সংক্রান্ত পেশাদার পদ্ধতি
কী করা উচিত নয় তা এখন আপনি জানেন, আসুন পেশাদার পদ্ধতি সম্পর্কে আলোচনা করা যাক।
সংকীর্ণ Keep নিয়ম লেখা
ভাল Keep Rules যতটা সম্ভব সীমিত ও নির্দিষ্ট হতে হবে। R8-কে বাকি সব অপ্টিমাইজ করার অনুমতি দিয়ে, শুধু প্রয়োজনীয় জিনিসগুলিই তাদের রেখে দেওয়া উচিত।
| নিয়ম | কোয়ালিটি |
|---|---|
| কম: সম্পূর্ণ প্যাকেজ ও এর সাবপ্যাকেজ রেখে দেয় |
| কম: একটি সম্পূর্ণ ক্লাসকে অন্তর্ভুক্ত করে যা সম্ভবত এখনও অনেক বেশি বিস্তৃত |
-keepclassmembers class com.example.MyClass {
private java.lang.String secretMessage;
public void onNativeEvent(java.lang.String);
} | উচ্চ: নির্দিষ্ট ক্লাস থেকে শুধুমাত্র প্রাসঙ্গিক পদ্ধতি ও প্রপার্টি রাখা হয় |
সাধারণ পূর্বপুরুষ ব্যবহার করা
একাধিক আলাদা ডেটা মডেলের জন্য আলাদা আলাদা Keep Rules লেখার পরিবর্তে, একটি এমন নিয়ম লিখুন যা একটি সাধারণ বেস ক্লাস বা ইন্টারফেসকে টার্গেট করে। নিচের নিয়মে R8-কে বলা হয়েছে যে এই ইন্টারফেস প্রয়োগ করে এবং অত্যন্ত স্কেলেবল এমন ক্লাসের যেকোনও মেম্বারকে রাখতে হবে।
# Keep all fields of any class that implements SerializableModel
-keepclassmembers class * implements com.example.models.SerializableModel {
<fields>;
}একাধিক ক্লাস টার্গেট করতে অ্যানোটেশন ব্যবহার করা
কাস্টম অ্যানোটেশন (যেমন, @Serialize) তৈরি করুন এবং যে ক্লাসের ফিল্ড সেভ করে রাখতে হবে সেগুলিকে "ট্যাগ" করতে এটি ব্যবহার করুন। এটি আরেকটি পরিচ্ছন্ন, ডিক্ল্যারেটিভ ও অত্যন্ত স্কেলেবল প্যাটার্ন। আপনি যে ফ্রেমওয়ার্ক ব্যবহার করছেন, সেটির আগে থেকে থাকা অ্যানোটেশনের জন্যেও Keep সংক্রান্ত নিয়ম তৈরি করতে পারবেন।
# Keep all fields of any class annotated with @Serialize
-keepclassmembers class * {
@com.example.annotations.Serialize <fields>;
}সঠিক 'রাখুন' বিকল্প বেছে নিন
'রাখুন' বিকল্পটি নিয়মের সবচেয়ে গুরুত্বপূর্ণ অংশ। ভুলটি বেছে নিলে অপ্টিমাইজেশন অপ্রয়োজনীয়ভাবে বন্ধ হয়ে যেতে পারে।
| বিকল্প রেখে দিন | এটি কী করে |
-keep | ক্লাস এবং ঘোষণায় উল্লেখ করা মেম্বারদের সরানো বা নাম পরিবর্তন করা থেকে আটকায়। |
-keepclassmembers | নির্দিষ্ট মেম্বারদের সরানো বা নাম পরিবর্তন করা থেকে বাধা দেয়, তবে ক্লাসটি সরিয়ে দেওয়ার অনুমতি দেয়, কিন্তু শুধুমাত্র সেইসব ক্লাসে যা অন্যথায় সরানো হয় না। |
-keepclasseswithmembers | মিশ্র: ক্লাস এবং এর মেম্বারদের রাখে, যদি সব নির্দিষ্ট মেম্বার উপস্থিত থাকেন। |
আপনি Keep বিকল্পের জন্য আমাদের ডকুমেন্টেশন থেকে Keep বিকল্প সম্পর্কে আরও জানতে পারবেন।
পরিবর্তক ব্যবহার করে অপ্টিমাইজ করার অনুমতি দিন
allowshrinking এবং allowobfuscation-এর মতো মডিফায়ার -keep-এর মতো একটি বিস্তৃত নিয়মকে শিথিল করে, যার ফলে R8-এর অপ্টিমাইজ করার ক্ষমতা ফিরে আসে। যেমন, কোনও লিগ্যাসি লাইব্রেরি যদি আপনাকে -keep পুরো ক্লাস জুড়ে ব্যবহার করতে বাধ্য করে, তাহলে আপনি হয়ত সাইজ কমানো ও অবফাসকেশন করার অনুমতি দিয়ে কিছু অপ্টিমাইজেশন রিক্লেইম করতে পারবেন:
# Keep this class, but allow R8 to remove it if it's unused and allow R8 to rename it. -keep,allowshrinking,allowobfuscation class com.example.LegacyClass
অতিরিক্ত অপ্টিমাইজেশনের জন্য গ্লোবাল বিকল্প যোগ করা
কীপ রুল ছাড়াও, আরও বেশি অপ্টিমাইজেশনের জন্য R8 কনফিগারেশন ফাইলে গ্লোবাল ফ্ল্যাগ যোগ করতে পারেন।
-repackageclasses হল একটি শক্তিশালী বিকল্প যা R8-কে নির্দেশ দেয় যে সমস্ত অস্পষ্ট ক্লাসকে একটি প্যাকেজে সরাতে হবে। এর ফলে, অপ্রয়োজনীয় প্যাকেজের নামের স্ট্রিং সরিয়ে দিয়ে DEX ফাইলে অনেক জায়গা সেভ করা যায়।
-allowaccessmodification, R8-কে আরও বেশি ইনলাইনিং করার জন্য অ্যাক্সেস (যেমন, private থেকে public) বাড়াতে দেয়। proguard-android-optimize.txt
ব্যবহার করার সময় এটি এখন ডিফল্ট হিসেবে চালু করা থাকে।সতর্কতা: লাইব্রেরি লেখকদের কখনও তাদের গ্রাহক সংক্রান্ত নিয়মে এই গ্লোবাল অপ্টিমাইজেশন ফ্ল্যাগ যোগ করা উচিত নয়, কারণ এটি পুরো অ্যাপে জোর করে প্রয়োগ করা হবে।
বিষয়টি আরও স্পষ্ট করতে, Android Gradle Plugin-এর 9.0 ভার্সনে আমরা লাইব্রেরি থেকে পাওয়া গ্লোবাল অপ্টিমাইজেশন ফ্ল্যাগ সম্পূর্ণভাবে উপেক্ষা করতে শুরু করব।
লাইব্রেরির জন্য পেশাদার পদ্ধতি
প্রতিটি Android অ্যাপ কোনও না কোনওভাবে লাইব্রেরির উপর নির্ভর করে। তাই, লাইব্রেরির জন্য পেশাদার পদ্ধতি সম্পর্কে আলোচনা করা যাক।
লাইব্রেরি ডেভেলপারদের জন্য
আপনার লাইব্রেরি রিফ্লেকশন বা JNI ব্যবহার করলে, এর গ্রাহকদের প্রয়োজনীয় Keep Rules প্রদান করার দায়িত্ব আপনার। এইসব নিয়ম consumer-rules.pro ফাইলে রাখা হয়, যা পরে লাইব্রেরির AAR ফাইলের মধ্যে অটোমেটিক বান্ডেল করা হয়।
android {
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
...
}লাইব্রেরি ব্যবহারকারীদের জন্য
সমস্যাযুক্ত Keep নিয়ম ফিল্টার করে বাদ দেওয়া
আপনাকে যদি এমন কোনও লাইব্রেরি ব্যবহার করতে হয় যাতে সমস্যাযুক্ত Keep Rules আছে, তাহলে আপনি AGP 9.0 থেকে শুরু করে আপনার build.gradle.kts ফাইলে সেগুলি ফিল্টার করে বাদ দিতে পারবেন। এর ফলে R8 বুঝতে পারবে যে নির্দিষ্ট কোনও ডিপেন্ডেন্সি থেকে আসা নিয়মগুলি উপেক্ষা করতে হবে।
release {
optimization.keepRules {
// Ignore all consumer rules from this specific library
it.ignoreFrom("com.somelibrary:somelibrary")
}
}সেরা Keep Rule হল কোনও Keep Rule না থাকা
R8 কনফিগারেশন স্ট্র্যাটেজির মূল লক্ষ্য হল Keep Rules লেখার প্রয়োজনীয়তা সম্পূর্ণভাবে দূর করা। অনেক অ্যাপের ক্ষেত্রে, রিফ্লেকশনের পরিবর্তে কোড জেনারেশন পছন্দ করে এমন আধুনিক লাইব্রেরি বেছে নেওয়ার মাধ্যমে এটি অর্জন করা যেতে পারে। কোড জেনারেশনের মাধ্যমে, অপ্টিমাইজার আরও সহজে নির্ধারণ করতে পারে যে রানটাইমে কোন কোডটি আসলে ব্যবহার করা হয় এবং কোন কোডটি সরানো যেতে পারে। এছাড়াও, কোনও ডায়নামিক রিফ্লেকশন ব্যবহার না করার অর্থ হল কোনও "লুকানো" এন্ট্রি পয়েন্ট নেই এবং সেই কারণে, কোনও Keep Rules-এর প্রয়োজন নেই। নতুন লাইব্রেরি বেছে নেওয়ার সময়, সবসময় এমন সমাধান বেছে নিন যা রিফ্লেকশনের পরিবর্তে কোড জেনারেশন ব্যবহার করে।
লাইব্রেরি কীভাবে বেছে নিতে হয় সেই সম্পর্কে আরও তথ্য পেতে, লাইব্রেরি বুদ্ধিমানের মতো বেছে নিন বিকল্প দেখুন।
আপনার R8 কনফিগারেশনের সমস্যা সমাধান করা ও ডিবাগ করা
R8 যদি এমন কোড সরিয়ে দেয় যা রাখা উচিত ছিল অথবা আপনার APK প্রত্যাশার চেয়ে বড় হয়, তাহলে সমস্যা নির্ণয় করতে এইসব টুল ব্যবহার করুন।
ডুপ্লিকেট ও গ্লোবাল Keep নিয়ম খুঁজে দেখা
R8 যেহেতু অসংখ্য সোর্স থেকে নিয়ম মার্জ করে, তাই "ফাইনাল" নিয়ম সেটটি কী তা জানা কঠিন হতে পারে। আপনার proguard-rules.pro ফাইলে এই ফ্ল্যাগ যোগ করলে একটি সম্পূর্ণ রিপোর্ট তৈরি হয়:
# Outputs the final, merged set of rules to the specified file -printconfiguration build/outputs/logs/configuration.txt
এই ফাইল সার্চ করে আপনি অতিরিক্ত নিয়ম খুঁজে পেতে পারেন অথবা কোনও সমস্যাযুক্ত নিয়ম (যেমন -dontoptimize) কোন নির্দিষ্ট লাইব্রেরিতে আছে তা খুঁজে দেখতে পারেন।
R8-কে প্রশ্ন করুন: আপনি এটি কেন রেখে দিয়েছেন?
আপনি সরিয়ে দেওয়ার কথা ভেবেছেন এমন কোনও ক্লাস এখনও আপনার অ্যাপে থাকলে, R8 আপনাকে তার কারণ জানাতে পারবে। শুধু এই নিয়মটি যোগ করুন:
# Asks R8 to explain why it's keeping a specific class class com.example.MyUnusedClass -whyareyoukeeping
বিল্ড করার সময়, R8 রেফারেন্সের সেই সঠিক চেইন প্রিন্ট করবে যার কারণে ক্লাসটি রাখা হয়েছে, এর ফলে আপনি রেফারেন্সটি ট্রেস করতে এবং আপনার নিয়ম অ্যাডজাস্ট করতে পারবেন।
সম্পূর্ণ নির্দেশিকার জন্য, R8 সংক্রান্ত সমস্যার সমাধান বিভাগটি দেখুন।
পরবর্তী ধাপ
R8 হল Android অ্যাপের পারফর্ম্যান্স উন্নত করার একটি শক্তিশালী টুল। স্ট্যাটিক অ্যানালিসিস ইঞ্জিন হিসেবে এর কার্যকারিতা, এর অপারেশন সঠিকভাবে বোঝার উপর নির্ভর করে।
নির্দিষ্ট মেম্বার-লেভেল নিয়ম লিখে, পূর্বপুরুষ ও টীকা ব্যবহার করে এবং সঠিক 'রাখুন' বিকল্প বেছে নেওয়ার মাধ্যমে, ঠিক যা প্রয়োজন তা আপনি সংরক্ষণ করতে পারবেন। সবচেয়ে উন্নত পদ্ধতি হল, রিফ্লেকশন-ভিত্তিক পূর্বসূরীদের পরিবর্তে আধুনিক, কোডজেন-ভিত্তিক লাইব্রেরি বেছে নেওয়ার মাধ্যমে সম্পূর্ণভাবে নিয়মের প্রয়োজনীয়তা দূর করা।
আপনি যেহেতু পারফর্ম্যান্স স্পটলাইট সপ্তাহ ফলো করছেন, তাই YouTube-এ আজকের স্পটলাইট সপ্তাহ ভিডিওটি দেখতে ভুলবেন না এবং আমাদের R8 চ্যালেঞ্জে অংশগ্রহণ করা চালিয়ে যান। R8 চালু করা বা সমস্যা সমাধানের ব্যাপারে কোনও প্রশ্ন থাকলে #optimizationEnabled ব্যবহার করুন। আপনাকে সাহায্য করতে আমরা সর্বদা প্রস্তুত।
এবার নিজের জন্য সুবিধাগুলি দেখার পালা।
আমরা আপনাকে আজই আপনার অ্যাপের জন্য R8 সম্পূর্ণ মোড চালু করার চ্যালেঞ্জ জানাচ্ছি।
- শুরু করতে আমাদের ডেভেলপার গাইড ফলো করুন: অ্যাপ অপ্টিমাইজেশন চালু করুন।
- আপনি এখনও
proguard-android.txtব্যবহার করেন কিনা তা চেক করুন এবং এটিproguard-android-optimize.txtদিয়ে পরিবর্তন করুন। - তারপর, এর প্রভাব পরিমাপ করুন। শুধু পার্থক্য অনুভব করবেন না, যাচাই করুন। স্টার্ট-আপের আগে ও পরে পারফর্ম্যান্স পরিমাপ করতে, আমাদের GitHub-এ থাকা Macrobenchmark স্যাম্পেল অ্যাপ থেকে কোড নিয়ে আপনার পারফর্ম্যান্সের উন্নতি পরিমাপ করুন।
আমরা নিশ্চিত যে আপনার অ্যাপের পারফর্ম্যান্সে আপনি একটি অর্থপূর্ণ উন্নতি দেখতে পাবেন।
এর পাশাপাশি, আপনার প্রশ্ন জিজ্ঞাসা করতে সোশ্যাল ট্যাগ #AskAndroid ব্যবহার করুন। সপ্তাহ জুড়ে আমাদের বিশেষজ্ঞরা আপনার প্রশ্ন মনিটর করছেন এবং উত্তর দিচ্ছেন।
আগামীকালের জন্য সাথে থাকুন, যেখানে আমরা বেসলাইন ও স্টার্ট-আপ প্রোফাইলের সাথে প্রোফাইল গাইডেড অপ্টিমাইজেশন সম্পর্কে কথা বলব, Compose রেন্ডারিং পারফর্ম্যান্স কীভাবে আগের রিলিজের তুলনায় উন্নত হয়েছে তা শেয়ার করব এবং ব্যাকগ্রাউন্ড কাজের জন্য পারফর্ম্যান্স সংক্রান্ত বিষয় শেয়ার করব।
-
প্রোডাক্ট সম্পর্কিত খবরAndroid ডেভেলপার হিসেবে, অ্যাপ ডেভেলপমেন্টের জন্য আপনি যেসব এজেন্ট, LLM, টুল ও কমান্ড-লাইন ইন্টারফেস (CLI) ব্যবহার করেন, সেই ব্যাপারে আপনার কাছে অনেক বিকল্প আছে। আপনি যেভাবে তৈরি করতে চান না কেন, আমাদের লক্ষ্য হল আপনাকে সুন্দর, হাই-কোয়ালিটি Android অ্যাপ তৈরি করতে সাহায্য করা।
Simona Milanovic • ৪ মিনিট রিডিং টাইম -
প্রোডাক্ট সম্পর্কিত খবরGoogle Play-তে, আমরা ক্রমাগত আমাদের সাবস্ক্রিপশন প্ল্যাটফর্মের পরিধি বাড়াচ্ছি যাতে আপনি ব্যবসা বাড়াতে, নতুন বিজনেস মডেলের সাথে মানিয়ে নিতে এবং ব্যবহারকারীদের ঠিক যেখানে প্রয়োজন সেখানে তাদের চাহিদা পূরণ করতে পারেন।
Sheenam Mittal • ৪ মিনিট রিডিং টাইম -
প্রোডাক্ট সম্পর্কিত খবরগত বছর, Android Studio যেকোনও AI মডেলের জন্য খুলে দেওয়া হয়েছে। আজ, আমরা আপনার পছন্দের কোডিং এজেন্টদের জন্য সহায়তা প্রদান করে পরবর্তী পদক্ষেপ নিচ্ছি।
Matthew Warner • ৩ মিনিট রিডিং
আপনার ইনবক্সে প্রতি সপ্তাহে Android ডেভেলপমেন্ট সংক্রান্ত লেটেস্ট ইনসাইট পান।