আধুনিক Android ডেভেলপমেন্টে, ছোট, দ্রুত এবং সুরক্ষিত অ্যাপ্লিকেশন শিপিং করা একটি মৌলিক ব্যবহারকারীর প্রত্যাশা। এটি করার জন্য Android বিল্ড সিস্টেমের প্রাথমিক টুল হল R8 অপ্টিমাইজার, কম্পাইলার যা অপ্রয়োজনীয় কোড এবং রিসোর্স সরিয়ে দিয়ে অ্যাপের সাইজ ছোট করে, কোডের নাম পরিবর্তন করে বা ছোট করে এবং অ্যাপ অপ্টিমাইজ করে।
অ্যাপ রিলিজ করার জন্য R8 চালু করা একটি গুরুত্বপূর্ণ ধাপ, তবে এর জন্য ডেভেলপারদের "নিয়ম মেনে চলুন" ফর্মের মাধ্যমে নির্দেশিকা প্রদান করতে হয়।
এই নিবন্ধটি পড়ার পরে, YouTube-এ R8 অপ্টিমাইজার চালু করা, ডিবাগ করা এবং সমস্যার সমাধান করার বিষয়ে পারফর্ম্যান্স স্পটলাইট সপ্তাহের ভিডিওটি দেখুন।
Keep Rules কেন প্রয়োজন
কিপ রুল লেখার প্রয়োজনীয়তা একটি মূল দ্বন্দ্ব থেকে উদ্ভূত হয়: R8 হল একটি স্ট্যাটিক বিশ্লেষণ টুল, কিন্তু Android অ্যাপগুলি প্রায়শই JNI (Java Native Interface) ব্যবহার করে নেটিভ কোডের ভিতরে এবং বাইরে রিফ্লেকশন বা কলের মতো ডায়নামিক এক্সিকিউশন প্যাটার্নের উপর নির্ভর করে।
R8 সরাসরি কল বিশ্লেষণ করে ব্যবহৃত কোডের গ্রাফ তৈরি করে। ডায়নামিক উপায়ে কোড অ্যাক্সেস করা হলে, R8-এর স্ট্যাটিক বিশ্লেষণ সেটি অনুমান করতে পারে না এবং সেই কোডকে অব্যবহৃত হিসেবে শনাক্ত করে সরিয়ে দেয়, যার ফলে রানটাইম ক্র্যাশ হয়।
কিপ রুল হল R8 কম্পাইলারের জন্য একটি স্পষ্ট নির্দেশ, যাতে বলা হয়: "এই নির্দিষ্ট ক্লাস, পদ্ধতি বা ফিল্ড হল একটি এন্ট্রি পয়েন্ট যা রানটাইমে ডাইনামিকভাবে অ্যাক্সেস করা হবে। আপনি সরাসরি কোনও রেফারেন্স খুঁজে না পেলেও, আপনাকে এটি রাখতে হবে।"
Keep-এর নিয়ম সম্পর্কে আরও জানতে অফিসিয়াল গাইড দেখুন।
Keep Rules কোথায় লিখতে হবে
কোনও অ্যাপ্লিকেশনের জন্য কাস্টম রাখার নিয়ম টেক্সট ফাইলে লেখা হয়। প্রথাগতভাবে, এই ফাইলের নাম 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 Rules প্রদান করে, কিন্তু R8-এর অপ্টিমাইজেশন চালু করে না।
যেহেতু এটি পারফর্ম্যান্সের ক্ষেত্রে গুরুতর সমস্যা, তাই আমরা Android Studio Narwhal 3 ফিচার ড্রপ থেকে শুরু করে ভুল ফাইল ব্যবহার করার ব্যাপারে ডেভেলপারদের সতর্ক করা শুরু করছি। এবং Android Gradle প্লাগ-ইন ভার্সন ৯.০ থেকে শুরু করে আমরা আর পুরনো proguard-android.txt ফাইল সাপোর্ট করছি না। তাই অপ্টিমাইজ করা ভার্সনে আপগ্রেড করতে ভুলবেন না।
কীভাবে Keep Rules লিখতে হয়
রাখার নিয়মে তিনটি প্রধান অংশ থাকে:
- একটি বিকল্প যেমন
-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 Rules নিয়ে আসে। তাই এগুলির জন্য আপনাকে নিজের নিয়ম লিখতে হবে না। আপনি যে লাইব্রেরি ব্যবহার করছেন, তার Keep Rules-এ কোনও সমস্যা থাকলে, সমস্যাটি কী তা জানতে লাইব্রেরির লেখকের সাথে যোগাযোগ করা সবচেয়ে ভালো।
Keep Rule সংক্রান্ত পেশাদার পদ্ধতি
এখন আপনি জানেন যে কী করা উচিত নয়, তাই আসুন পেশাদার পদ্ধতি সম্পর্কে আলোচনা করা যাক।
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 বিকল্প | এটি কী করে |
-keep | ঘোষণায় উল্লেখ করা ক্লাস ও মেম্বারদের সরানো বা নাম পরিবর্তন করা থেকে আটকায়। |
-keepclassmembers | নির্দিষ্ট মেম্বারদের সরানো বা নাম পরিবর্তন করা থেকে আটকায়, তবে ক্লাসটি সরানোর অনুমতি দেয়, তবে শুধুমাত্র সেই ক্লাসগুলিতে যা অন্যথায় সরানো হয় না। |
-keepclasseswithmembers | একটি কম্বিনেশন: ক্লাস এবং এর মেম্বারদের রাখে, শুধুমাত্র যদি সব নির্দিষ্ট মেম্বার উপস্থিত থাকে। |
আমাদের রাখার বিকল্প সংক্রান্ত ডকুমেন্টেশন থেকে রাখার বিকল্প সম্পর্কে আরও জানতে পারবেন।
মডিফায়ারের সাহায্যে অপ্টিমাইজ করার অনুমতি দিন
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 প্লাগ-ইনের 9.0 ভার্সনে আমরা লাইব্রেরি থেকে গ্লোবাল অপ্টিমাইজেশন ফ্ল্যাগ সম্পূর্ণভাবে উপেক্ষা করতে শুরু করব।
লাইব্রেরির জন্য পেশাদার পদ্ধতি
প্রত্যেক Android অ্যাপ কোনও না কোনওভাবে লাইব্রেরির উপর নির্ভর করে। তাই, লাইব্রেরির জন্য পেশাদার পদ্ধতি সম্পর্কে আলোচনা করা যাক।
লাইব্রেরি ডেভেলপারদের জন্য
আপনার লাইব্রেরি যদি রিফ্লেকশন বা JNI ব্যবহার করে, তাহলে এর গ্রাহকদের প্রয়োজনীয় Keep Rules প্রদান করার দায়িত্ব আপনার। এই নিয়মগুলি একটি consumer-rules.pro ফাইলে রাখা হয়, যা পরে লাইব্রেরির AAR ফাইলের মধ্যে অটোমেটিক বান্ডেল করা হয়।
android {
defaultConfig {
consumerProguardFiles("consumer-rules.pro")
}
...
}লাইব্রেরি গ্রাহকদের জন্য
সমস্যাজনক Keep Rules ফিল্টার করে বাদ দেওয়া
আপনাকে যদি এমন কোনও লাইব্রেরি ব্যবহার করতে হয় যাতে সমস্যাযুক্ত 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-এর প্রয়োজন নেই। নতুন লাইব্রেরি বেছে নেওয়ার সময়, সবসময় এমন সমাধান বেছে নিন যা রিফ্লেকশনের পরিবর্তে কোড জেনারেশন ব্যবহার করে।
কীভাবে লাইব্রেরি বেছে নিতে হয় সেই সম্পর্কে আরও জানতে, বুদ্ধিমত্তার সাথে লাইব্রেরি বেছে নিন বিকল্পটি চেক করুন।
আপনার 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) যে লাইব্রেরি থেকে এসেছে সেটি খুঁজে পেতে পারেন।
Ask R8: Why are you keeping this?
আপনি যে ক্লাসটি সরিয়ে দেওয়া হবে বলে আশা করেছিলেন সেটি এখনও আপনার অ্যাপে থাকলে, 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 ব্যবহার করুন। সপ্তাহ জুড়ে আমাদের বিশেষজ্ঞরা আপনার প্রশ্ন মনিটর করছেন এবং উত্তর দিচ্ছেন।
আগামীকালের জন্য সাথে থাকুন, যেখানে আমরা বেসলাইন এবং স্টার্টআপ প্রোফাইলের সাথে প্রোফাইল গাইডেড অপ্টিমাইজেশন সম্পর্কে কথা বলব, গত রিলিজের তুলনায় কম্পোজ রেন্ডারিং পারফর্ম্যান্স কীভাবে উন্নত হয়েছে তা শেয়ার করব এবং ব্যাকগ্রাউন্ড কাজের জন্য পারফর্ম্যান্স সংক্রান্ত বিবেচনা শেয়ার করব।
-
প্রোডাক্ট সংক্রান্ত খবরএজেন্টিক ডেভেলপমেন্টের গতি বাড়ার সাথে সাথে, Android ইঞ্জিনিয়ারিং একটি নতুন দিগন্তে পৌঁছে যাচ্ছে: সহায়ক কোড সম্পূর্ণ করা থেকে শুরু করে আপনার নির্দেশনায় এন্ড-টু-এন্ড কাজ করা এজেন্ট পর্যন্ত। আপনি যে মডেল ও এজেন্ট ব্যবহার করেন, তার উপর আপনার সম্পূর্ণ নিয়ন্ত্রণ ও নমনীয়তা থাকে।
Jason Buchel • ৩ মিনিট রিডিং -
প্রোডাক্ট সংক্রান্ত খবরআজ আমরা শেয়ার করেছি যে কীভাবে আমরা আমাদের "স্টোরের চেয়েও বেশি কিছু" ভিশনকে পরবর্তী অধ্যায়ে নিয়ে যাচ্ছি। 'অ্যাকাউন্ট' ট্যাব থেকে, এখন ২৫০ মিলিয়নেরও বেশি মাসিক অ্যাক্টিভ ব্যবহারকারীর জন্য ব্যক্তিগত হোম বেস, আমাদের ইউনিফায়েড গেমিং প্ল্যাটফর্ম ৭০০ মিলিয়নেরও বেশি গেমার প্রোফাইলকে কানেক্ট করছে, Google Play ব্যবহারকারীদের যেখানেই থাকুক না কেন তাদের সাথে কানেক্ট করছে।
Paul Feng • ৩ মিনিট রিডিং -
প্রোডাক্ট সংক্রান্ত খবরGooglebook-এর মাধ্যমে, ব্যবহারকারীদের নিজেদের প্রকাশ করতে এবং এইসব টুলে অ্যাক্সেস পেতে সাহায্য করতে পেরে আমরা আনন্দিত।
Cyrus Stoller • পড়তে ২ মিনিট লাগবে
আপনার ইনবক্সে প্রতি সপ্তাহে Android ডেভেলপমেন্ট সংক্রান্ত লেটেস্ট ইনসাইট পান।