ভূমিকা
Play for On-device AI কাস্টম ML মডেল বিতরণে Android অ্যাপ বান্ডেল এবং Google Play ডেলিভারির সুবিধা নিয়ে আসে যাতে আপনি কোনও অতিরিক্ত খরচ ছাড়াই কম ডিভাইস ইকোসিস্টেম জটিলতার সাথে মডেলের কর্মক্ষমতা উন্নত করতে পারেন। এটি আপনাকে Play-তে আপনার কোড, সম্পদ এবং ML মডেল ধারণকারী একটি একক আর্টিফ্যাক্ট প্রকাশ করতে এবং বিভিন্ন ডেলিভারি মোড এবং টার্গেটিং বিকল্প থেকে বেছে নিতে দেয়।
সুবিধা
- গুগল প্লেতে একটি প্রকাশনা শিল্পকর্ম আপলোড করুন এবং কোনও অতিরিক্ত খরচ ছাড়াই হোস্টিং, ডেলিভারি, আপডেট এবং টার্গেটিং প্লে-কে অর্পণ করুন।
- আপনার ML মডেলগুলি ইনস্টল-সময়ে, দ্রুত-অনুসরণে, অথবা চাহিদা অনুযায়ী সরবরাহ করুন।
- ইনস্টল-টাইম ডেলিভারি নিশ্চিত করতে পারে যে আপনার অ্যাপটি খোলার সময় একটি খুব বড় মডেল উপস্থিত থাকবে। আপনার মডেলটি একটি APK হিসেবে ইনস্টল করা হবে।
- আপনার অ্যাপ ইনস্টল করার পর ব্যাকগ্রাউন্ডে স্বয়ংক্রিয়ভাবে ফাস্ট-ফলো ডেলিভারি ঘটে। আপনার মডেল সম্পূর্ণরূপে ডাউনলোড হওয়ার আগেই ব্যবহারকারীরা আপনার অ্যাপটি খুলতে পারেন। আপনার মডেলটি আপনার অ্যাপের অভ্যন্তরীণ স্টোরেজে ডাউনলোড করা হবে।
- অন-ডিমান্ড ডেলিভারি আপনাকে রানটাইমের সময় মডেলটি অনুরোধ করতে দেয়, যা কেবলমাত্র নির্দিষ্ট ব্যবহারকারী-প্রবাহের জন্য মডেলটি প্রয়োজন হলে কার্যকর। আপনার মডেলটি আপনার অ্যাপের অভ্যন্তরীণ স্টোরেজে ডাউনলোড করা হবে।
- ডিভাইস মডেল, সিস্টেম বৈশিষ্ট্য, অথবা RAM এর উপর ভিত্তি করে নির্দিষ্ট ডিভাইসের জন্য লক্ষ্যবস্তু করা আপনার ML মডেলের ভেরিয়েন্টগুলি সরবরাহ করুন।
- প্লে-এর স্বয়ংক্রিয় প্যাচিংয়ের মাধ্যমে অ্যাপ আপডেটগুলি ছোট এবং অপ্টিমাইজ করা রাখুন, যার অর্থ শুধুমাত্র ফাইলের পার্থক্যগুলি ডাউনলোড করতে হবে।
বিবেচনা
- Play for On-device AI ব্যবহার করে আপনি Google Play ডেভেলপার বিতরণ চুক্তি এবং Play Core সফটওয়্যার ডেভেলপমেন্ট কিট পরিষেবার শর্তাবলীতে সম্মত হন।
- Play for On-device AI দ্বারা ডাউনলোড করা মডেলগুলি শুধুমাত্র আপনার অ্যাপগুলিতে ব্যবহার করা উচিত। মডেলগুলি অন্য অ্যাপগুলিতে অফার করা উচিত নয়।
- পৃথক AI প্যাকগুলি তাদের সংকুচিত ডাউনলোড আকারের উপর নির্ভর করে 1.5GB পর্যন্ত হতে পারে। আপনার অ্যাপ বান্ডেল থেকে তৈরি যেকোনো সংস্করণের অ্যাপের সর্বাধিক ক্রমবর্ধমান আকার হল 4GB।
- ১ গিগাবাইটের বেশি আকারের অ্যাপগুলির জন্য ন্যূনতম SDK লেভেল ২১ বা তার বেশি সেট করতে হবে।
ডিভাইসে থাকা AI এর জন্য Play কীভাবে ব্যবহার করবেন
Play for On-device AI AI প্যাক ব্যবহার করে। আপনি আপনার অ্যাপ বান্ডেলে AI প্যাকগুলিতে বিতরণের জন্য প্রস্তুত কাস্টম মডেলগুলি প্যাকেজ করেন। আপনি AI প্যাকটি ইনস্টল-সময়ে, দ্রুত-ফলোতে, নাকি অন-ডিমান্ডে বিতরণ করা উচিত তা বেছে নিতে পারেন।
আপনার অ্যাপ বান্ডেলের সাথে AI প্যাক প্যাকেজ করে, আপনি আপনার কাস্টম মডেলগুলির সাথে আপনার অ্যাপের বিতরণ পরিচালনা করতে Play-এর বিদ্যমান সমস্ত টেস্টিং এবং রিলিজ টুল, যেমন টেস্ট ট্র্যাক এবং স্টেজড রোলআউট ব্যবহার করতে পারেন।
AI প্যাকগুলি অ্যাপ বাইনারির সাথে একসাথে আপডেট করা হয়। যদি আপনার নতুন অ্যাপ রিলিজ কোনও AI প্যাকে পরিবর্তন না করে, তাহলে Play-এর স্বয়ংক্রিয় প্যাচিং প্রক্রিয়া নিশ্চিত করবে যে ব্যবহারকারীকে এটি পুনরায় ডাউনলোড করতে হবে না। Play অ্যাপটি আপডেট করার সময় যা পরিবর্তন করা হয়েছে তা কেবল ডাউনলোড করবে।
AI প্যাকগুলিতে শুধুমাত্র মডেল থাকে। Java/Kotlin এবং নেটিভ লাইব্রেরি অনুমোদিত নয়। আপনার ML মডেল চালানোর জন্য যদি লাইব্রেরি বা কোড পাঠানোর প্রয়োজন হয়, তাহলে এটিকে বেস মডিউল বা একটি ফিচার মডিউলে স্থানান্তর করুন। আপনি আপনার ফিচার মডিউলটি এমনভাবে কনফিগার করতে পারেন যাতে এতে AI প্যাকের মতো একই ডাউনলোড এবং টার্গেটিং সেটিংস থাকে।
AI প্যাক সহ LiterRT এবং MediaPipe ব্যবহার করুন
আপনি AI প্যাক সহ LiterRT এবং MediaPipe ব্যবহার করতে পারেন। আপনার মডেলটিকে একটি AI প্যাকে প্যাকেজ করুন এবং তারপর ইনস্টল-টাইম প্যাক বা ফাস্ট-ফলো এবং অন-ডিমান্ড প্যাকের নির্দেশাবলী ব্যবহার করে এটি অ্যাক্সেস করুন।
আরও পড়ুন:
- LiterRT দিয়ে শুরু করা
- নমুনা অ্যাপটি দেখায় কিভাবে আপনি একটি LiterRT মডেলকে একটি AI প্যাকে প্যাকেজ করতে পারেন এবং রানটাইমে লোড করতে পারেন।
- শুরু করার জন্য আপনি AI প্যাকগুলিতে অনেক প্রি-ট্রেনড LiterRT মডেল ব্যবহার করতে পারেন।
- মিডিয়াপাইপ দিয়ে শুরু করা
- দ্রুত-ফলো এবং অন-ডিমান্ড প্যাকের জন্য, আপনি AssetCache.java ব্যবহার করে আপনার সম্পদগুলি (যেমন
.binarypbফাইলগুলি) তাদের ফাইল পাথ অনুসারে লোড করতে পারেন। - ইনস্টল-টাইম প্যাকের জন্য, আপনি AndroidAssetUtil.java ব্যবহার করতে পারেন।
- দ্রুত-ফলো এবং অন-ডিমান্ড প্যাকের জন্য, আপনি AssetCache.java ব্যবহার করে আপনার সম্পদগুলি (যেমন
এআই প্যাকগুলি দিয়ে শুরু করুন
উচ্চ স্তরে, আপনি কীভাবে Play for On-device AI ব্যবহার শুরু করতে পারেন তা এখানে দেওয়া হল:
- আপনার মডেলগুলিকে AI প্যাকগুলিতে আপনার Android অ্যাপ বান্ডেলে প্যাকেজ করুন এবং AI প্যাকগুলি কীভাবে সরবরাহ করা উচিত তা নির্দিষ্ট করুন।
- [ঐচ্ছিক] যদি আপনি বিভিন্ন ডিভাইসে বিভিন্ন মডেল সরবরাহ করতে চান, তাহলে আপনি আপনার AI প্যাকগুলির জন্য ডিভাইস টার্গেটিং কনফিগার করতে পারেন। উদাহরণস্বরূপ, আপনি একটি নির্দিষ্ট ডিভাইস মডেলে AI প্যাক A, কমপক্ষে 6GB RAM সহ ডিভাইসগুলিতে AI প্যাক B সরবরাহ করতে পারেন এবং অন্যান্য সমস্ত ডিভাইস কোনও মডেল গ্রহণ করতে পারে না।
- [ঐচ্ছিক] যদি আপনি অন-ডিমান্ড বা ফাস্ট-ফলো ডেলিভারি ব্যবহার করেন, তাহলে প্রয়োজন অনুসারে আপনার AI প্যাকগুলি ডাউনলোড করতে আপনার অ্যাপে Play AI ডেলিভারি লাইব্রেরি সংহত করুন।
- আপনার অ্যাপ বান্ডেলটি পরীক্ষা করে গুগল প্লেতে প্রকাশ করুন।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণটি পরীক্ষা করুন
AI প্যাক ব্যবহার করার জন্য, নিশ্চিত করুন যে আপনার Android Gradle Plugin (AGP) সংস্করণটি কমপক্ষে 8.8। এই সংস্করণটি Android Studio Ladybug 2 এর সাথে প্যাকেজ করা হয়েছে।
আপনার মডেলটিকে একটি AI প্যাকে এক্সট্র্যাক্ট করুন
নিম্নলিখিত ধাপগুলির জন্য অ্যান্ড্রয়েড স্টুডিওর প্রয়োজন নেই।
- আপনার প্রকল্পের শীর্ষ-স্তরের ডিরেক্টরিতে, AI প্যাকের জন্য একটি ডিরেক্টরি তৈরি করুন। এই ডিরেক্টরির নামটি AI প্যাকের নাম হিসাবে ব্যবহৃত হয়। AI প্যাকের নামগুলি অবশ্যই একটি অক্ষর দিয়ে শুরু হতে হবে এবং এতে কেবল অক্ষর, সংখ্যা এবং আন্ডারস্কোর থাকতে পারে।
AI প্যাক ডিরেক্টরিতে, একটি
build.gradleফাইল তৈরি করুন এবং নিম্নলিখিত কোডটি যোগ করুন। AI প্যাকের নাম এবং শুধুমাত্র একটি ডেলিভারি টাইপ উল্লেখ করতে ভুলবেন না:// In the AI pack's build.gradle file: plugins { id 'com.android.ai-pack' } aiPack { packName = "ai-pack-name" // Directory name for the AI pack dynamicDelivery { deliveryType = "[ install-time | fast-follow | on-demand ]" } }প্রজেক্টের অ্যাপ
build.gradleফাইলে, আপনার প্রজেক্টের প্রতিটি AI প্যাকের নাম নীচে দেখানো হিসাবে যোগ করুন:// In the app build.gradle file: android { ... assetPacks = [":ai-pack-name", ":ai-pack2-name"] }প্রজেক্টের
settings.gradleফাইলে, আপনার প্রজেক্টের সমস্ত AI প্যাকগুলি নীচে দেখানো হিসাবে অন্তর্ভুক্ত করুন:// In the settings.gradle file: include ':app' include ':ai-pack-name' include ':ai-pack2-name'আপনার AI প্যাকের ভিতরে, একটি
src/main/assets/ডিরেক্টরি তৈরি করুন।আপনার মডেলগুলিকে
src/main/assetsডিরেক্টরিতে রাখুন। আপনি এখানেও সাবডিরেক্টরি তৈরি করতে পারেন। আপনার অ্যাপের ডিরেক্টরি কাঠামো এখন নিচের মতো দেখাবে:-
build.gradle -
settings.gradle -
app/ -
ai-pack-name/build.gradle -
ai-pack-name/src/main/assets/your-model-directories
-
আপনার মডেলগুলি লোড এবং রান করার জন্য কোড যোগ করুন। আপনি এটি কীভাবে করবেন তা আপনার AI প্যাকগুলির ডেলিভারি মোডের উপর নির্ভর করবে। ইনস্টল-টাইম এবং ফাস্ট-ফলো/অন-ডিমান্ডের জন্য নীচে নির্দেশাবলী দেখুন।
[ঐচ্ছিক] বিভিন্ন ডিভাইসে বিভিন্ন মডেল সরবরাহ করার জন্য ডিভাইস টার্গেটিং কনফিগার করুন ।
Gradle দিয়ে Android অ্যাপ বান্ডেল তৈরি করুন । জেনারেট করা অ্যাপ বান্ডেলে, রুট-লেভেল ডিরেক্টরিতে এখন নিম্নলিখিতগুলি অন্তর্ভুক্ত থাকে:
-
ai-pack-name/manifest/AndroidManifest.xml: AI প্যাকের শনাক্তকারী এবং ডেলিভারি মোড কনফিগার করে -
ai-pack-name/assets/your-model-directories: এমন ডিরেক্টরি যেখানে AI প্যাকের অংশ হিসেবে সরবরাহ করা সমস্ত সম্পদ থাকে
গ্রেডল প্রতিটি এআই প্যাকের জন্য ম্যানিফেস্ট তৈরি করে এবং আপনার জন্য
assets/ডিরেক্টরি আউটপুট করে।-
ইনস্টল-সময় ডেলিভারি কনফিগার করুন
ইনস্টল-টাইম হিসেবে কনফিগার করা AI প্যাকগুলি অ্যাপ লঞ্চের সাথে সাথেই পাওয়া যায়। এই মোডে পরিবেশিত AI প্যাকগুলি অ্যাক্সেস করতে Java AssetManager API ব্যবহার করুন:
import android.content.res.AssetManager; ... Context context = createPackageContext("com.example.app", 0); AssetManager assetManager = context.getAssets(); InputStream is = assetManager.open("model-name");
দ্রুত-অনুসরণ এবং অন-ডিমান্ড ডেলিভারি কনফিগার করুন
দ্রুত-ফলো বা অন-ডিমান্ড ডেলিভারি সহ AI প্যাকগুলি ডাউনলোড করতে, Play AI ডেলিভারি লাইব্রেরি ব্যবহার করুন।
প্লে এআই ডেলিভারি লাইব্রেরির উপর নির্ভরতা ঘোষণা করুন
আপনার অ্যাপের build.gradle ফাইলে, Play AI ডেলিভারি লাইব্রেরির উপর নির্ভরতা ঘোষণা করুন:
dependencies {
...
implementation "com.google.android.play:ai-delivery:0.1.1-alpha01"
}
অবস্থা পরীক্ষা করুন
প্রতিটি AI প্যাক অ্যাপের অভ্যন্তরীণ স্টোরেজে একটি পৃথক ফোল্ডারে সংরক্ষণ করা হয়। একটি AI প্যাকের রুট ফোল্ডার নির্ধারণ করতে getPackLocation() পদ্ধতি ব্যবহার করুন। এই পদ্ধতিটি নিম্নলিখিত মানগুলি প্রদান করে:
| ফেরত মান | অবস্থা |
|---|---|
একটি বৈধ AiPackLocation অবজেক্ট | AI প্যাক রুট ফোল্ডারটি assetsPath() এ তাৎক্ষণিকভাবে অ্যাক্সেসের জন্য প্রস্তুত। |
null | অজানা AI প্যাক বা AI প্যাকগুলি উপলব্ধ নয় |
এআই প্যাক সম্পর্কে ডাউনলোড তথ্য পান
ব্যবহার করুন
getPackStates() পদ্ধতি ব্যবহার করে ডাউনলোডের আকার এবং প্যাকটি ইতিমধ্যেই ডাউনলোড হচ্ছে কিনা তা নির্ধারণ করা যায়।
Task<AiPackStates> getPackStates(List<String> packNames)
getPackStates() হল একটি অ্যাসিঙ্ক্রোনাস পদ্ধতি যা একটি Task<AiPackStates> ফেরত পাঠায়। একটি AiPackStates অবজেক্টের packStates() পদ্ধতি একটি Map<String, AiPackState> ফেরত পাঠায়। এই মানচিত্রে প্রতিটি অনুরোধকৃত AI প্যাকের অবস্থা থাকে, যার নাম দিয়ে কী করা হয়:
Map<String, AiPackState> AiPackStates#packStates()
চূড়ান্ত অনুরোধটি নিম্নলিখিত দ্বারা দেখানো হয়েছে:
final String aiPackName = "myAiPackName"; aiPackManager .getPackStates(Collections.singletonList(aiPackName)) .addOnCompleteListener(new OnCompleteListener<AiPackStates>() { @Override public void onComplete(Task<AiPackStates> task) { AiPackStates aiPackStates; try { aiPackStates = task.getResult(); AiPackState aiPackState = aiPackStates.packStates().get(aiPackName); } catch (RuntimeExecutionException e) { Log.d("MainActivity", e.getMessage()); return; });
নিম্নলিখিত AiPackState পদ্ধতিগুলি AI প্যাকের আকার, এখন পর্যন্ত ডাউনলোড করা পরিমাণ (যদি অনুরোধ করা হয়) এবং ইতিমধ্যে অ্যাপে স্থানান্তরিত পরিমাণ প্রদান করে:
একটি AI প্যাকের স্ট্যাটাস পেতে, status() পদ্ধতিটি ব্যবহার করুন, যা AiPackStatus ক্লাসের একটি ধ্রুবক ক্ষেত্রের সাথে সঙ্গতিপূর্ণ একটি পূর্ণসংখ্যা হিসাবে স্ট্যাটাসটি ফেরত দেয়। একটি AI প্যাক যা এখনও ইনস্টল করা হয়নি তার স্ট্যাটাস AiPackStatus.NOT_INSTALLED থাকে।
যদি কোন অনুরোধ ব্যর্থ হয়, তাহলে errorCode() পদ্ধতিটি ব্যবহার করুন, যার রিটার্ন মান AiPackErrorCode ক্লাসের একটি ধ্রুবক ক্ষেত্রের সাথে মিলে যায়।
ইনস্টল করুন
প্রথমবারের মতো একটি AI প্যাক ডাউনলোড করতে fetch() পদ্ধতি ব্যবহার করুন অথবা সম্পূর্ণ করার জন্য একটি AI প্যাকের আপডেটের জন্য কল করুন:
Task<AiPackStates> fetch(List<String> packNames)
এই পদ্ধতিটি একটি AiPackStates অবজেক্ট ফেরত পাঠায় যেখানে প্যাকগুলির একটি তালিকা এবং তাদের প্রাথমিক ডাউনলোড অবস্থা এবং আকার থাকে। যদি fetch() এর মাধ্যমে অনুরোধ করা একটি AI প্যাক ইতিমধ্যেই ডাউনলোড করা হয়, তাহলে ডাউনলোডের অবস্থা ফেরত পাঠানো হয় এবং কোনও অতিরিক্ত ডাউনলোড শুরু হয় না।
ডাউনলোডের অবস্থা পর্যবেক্ষণ করুন
AI প্যাকগুলির ইনস্টলেশনের অগ্রগতি ট্র্যাক করার জন্য আপনার একটি AiPackStateUpdateListener প্রয়োগ করা উচিত। প্রতিটি AI প্যাকের অবস্থা ট্র্যাক করার জন্য স্ট্যাটাস আপডেটগুলি প্রতিটি প্যাক অনুসারে ভাগ করা হয়। আপনার অনুরোধের জন্য অন্যান্য সমস্ত ডাউনলোড সম্পূর্ণ হওয়ার আগে আপনি উপলব্ধ AI প্যাকগুলি ব্যবহার শুরু করতে পারেন।
void registerListener(AiPackStateUpdateListener listener) void unregisterListener(AiPackStateUpdateListener listener)
বড় ডাউনলোড
যদি ডাউনলোডটি ২০০ এমবি-র বেশি হয় এবং ব্যবহারকারী ওয়াই-ফাই ব্যবহার না করেন, তাহলে ব্যবহারকারী মোবাইল ডেটা সংযোগ ব্যবহার করে ডাউনলোড চালিয়ে যাওয়ার জন্য স্পষ্টভাবে সম্মতি না দেওয়া পর্যন্ত ডাউনলোড শুরু হবে না। একইভাবে, যদি ডাউনলোডটি বড় হয় এবং ব্যবহারকারী ওয়াই-ফাই ব্যবহার বন্ধ করে দেন, তাহলে ডাউনলোডটি স্থগিত করা হয় এবং মোবাইল ডেটা সংযোগ ব্যবহার করে এগিয়ে যাওয়ার জন্য স্পষ্টভাবে সম্মতি প্রয়োজন। একটি পজ করা প্যাকে WAITING_FOR_WIFI লেখা থাকে। ব্যবহারকারীকে সম্মতির জন্য অনুরোধ করার জন্য UI প্রবাহ ট্রিগার করতে, showConfirmationDialog() পদ্ধতি ব্যবহার করুন।
মনে রাখবেন যে যদি অ্যাপটি এই পদ্ধতিতে কল না করে, তাহলে ডাউনলোড স্থগিত থাকবে এবং ব্যবহারকারী যখন আবার Wi-Fi সংযোগে আসবে তখনই স্বয়ংক্রিয়ভাবে পুনরায় শুরু হবে।
প্রয়োজনীয় ব্যবহারকারীর নিশ্চিতকরণ
যদি কোনও প্যাকের REQUIRES_USER_CONFIRMATION স্ট্যাটাস থাকে, তাহলে ব্যবহারকারী showConfirmationDialog() দিয়ে দেখানো ডায়ালগটি গ্রহণ না করা পর্যন্ত ডাউনলোডটি এগোবে না। এই স্ট্যাটাসটি তখন ঘটতে পারে যখন Play অ্যাপটি শনাক্ত করতে পারে না—উদাহরণস্বরূপ, যদি অ্যাপটি সাইডলোড করা থাকে। মনে রাখবেন যে এই ক্ষেত্রে showConfirmationDialog() কল করলে অ্যাপটি আপডেট হবে। আপডেটের পরে, আপনাকে আবার AI প্যাকগুলির জন্য অনুরোধ করতে হবে।
নিচে একটি শ্রোতার বাস্তবায়নের উদাহরণ দেওয়া হল:
AiPackStateUpdateListener aiPackStateUpdateListener = new AiPackStateUpdateListener() { private final ActivityResultLauncher<IntentSenderRequest> activityResultLauncher = registerForActivityResult( new ActivityResultContracts.StartIntentSenderForResult(), new ActivityResultCallback<ActivityResult>() { @Override public void onActivityResult(ActivityResult result) { if (result.getResultCode() == RESULT_OK) { Log.d(TAG, "Confirmation dialog has been accepted."); } else if (result.getResultCode() == RESULT_CANCELED) { Log.d(TAG, "Confirmation dialog has been denied by the user."); } } }); @Override public void onStateUpdate(AiPackState aiPackState) { switch (aiPackState.status()) { case AiPackStatus.PENDING: Log.i(TAG, "Pending"); break; case AiPackStatus.DOWNLOADING: long downloaded = aiPackState.bytesDownloaded(); long totalSize = aiPackState.totalBytesToDownload(); double percent = 100.0 * downloaded / totalSize; Log.i(TAG, "PercentDone=" + String.format("%.2f", percent)); break; case AiPackStatus.TRANSFERRING: // 100% downloaded and assets are being transferred. // Notify user to wait until transfer is complete. break; case AiPackStatus.COMPLETED: // AI pack is ready to use. Run the model. break; case AiPackStatus.FAILED: // Request failed. Notify user. Log.e(TAG, aiPackState.errorCode()); break; case AiPackStatus.CANCELED: // Request canceled. Notify user. break; case AiPackStatus.WAITING_FOR_WIFI: case AiPackStatus.REQUIRES_USER_CONFIRMATION: if (!confirmationDialogShown) { aiPackManager.showConfirmationDialog(activityResultLauncher); confirmationDialogShown = true; } break; case AiPackStatus.NOT_INSTALLED: // AI pack is not downloaded yet. break; case AiPackStatus.UNKNOWN: Log.wtf(TAG, "AI pack status unknown") break; } } }
বিকল্পভাবে, আপনি বর্তমান ডাউনলোডগুলির অবস্থা জানতে getPackStates() পদ্ধতি ব্যবহার করতে পারেন। AiPackStates ডাউনলোডের অগ্রগতি, ডাউনলোডের অবস্থা এবং যেকোনো ব্যর্থতার ত্রুটি কোড থাকে।
এআই প্যাকগুলি অ্যাক্সেস করুন
ডাউনলোডের অনুরোধটি COMPLETED অবস্থায় পৌঁছানোর পরে আপনি ফাইল সিস্টেম কল ব্যবহার করে একটি AI প্যাক অ্যাক্সেস করতে পারবেন। AI প্যাকের রুট ফোল্ডার পেতে getPackLocation() পদ্ধতি ব্যবহার করুন।
AI প্যাকগুলি AI প্যাক রুট ডিরেক্টরির মধ্যে থাকা assets ডিরেক্টরিতে সংরক্ষণ করা হয়। আপনি সুবিধাজনক পদ্ধতি assetsPath() ব্যবহার করে assets ডিরেক্টরিতে যাওয়ার পথ পেতে পারেন। একটি নির্দিষ্ট সম্পদের পথ পেতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন:
private String getAbsoluteAiAssetPath(String aiPack, String relativeAiAssetPath) { AiPackLocation aiPackPath = aiPackManager.getPackLocation(aiPack); if (aiPackPath == null) { // AI pack is not ready return null; } String aiAssetsFolderPath = aiPackPath.assetsPath(); // equivalent to: FilenameUtils.concat(aiPackPath.path(), "assets"); String aiAssetPath = FilenameUtils.concat(aiAssetsFolderPath, relativeAiAssetPath); return aiAssetPath; }
ডিভাইস টার্গেটিং কনফিগার করুন
আপনার AI প্যাকগুলি গ্রহণ করা উচিত এমন ডিভাইস বা ডিভাইসের গ্রুপ নির্দিষ্ট করতে আপনি ডিভাইস টার্গেটিং নির্দেশাবলী অনুসরণ করতে পারেন।
অন্যান্য Play AI ডেলিভারি API পদ্ধতি
আপনার অ্যাপে ব্যবহার করার জন্য কিছু অতিরিক্ত API পদ্ধতি নিচে দেওয়া হল।
অনুরোধ বাতিল করুন
একটি সক্রিয় AI প্যাক অনুরোধ বাতিল করতে cancel() ব্যবহার করুন। মনে রাখবেন যে এই অনুরোধটি একটি সর্বোত্তম প্রচেষ্টার অপারেশন।
একটি AI প্যাক সরান
একটি AI প্যাক অপসারণের সময়সূচী নির্ধারণ করতে removePack() ব্যবহার করুন।
একাধিক এআই প্যাকের অবস্থান পান
একাধিক AI প্যাকের স্ট্যাটাস জানতে getPackLocations() ব্যবহার করুন, যা AI প্যাক এবং তাদের অবস্থানের একটি মানচিত্র প্রদান করে। getPackLocations() দ্বারা প্রদত্ত মানচিত্রে প্রতিটি ডাউনলোড করা এবং আপ-টু-ডেট প্যাকের জন্য একটি এন্ট্রি রয়েছে।
ডিভাইস টার্গেটিং
ডিভাইস টার্গেটিং আপনাকে আপনার অ্যাপ বান্ডেলের কোন অংশগুলি নির্দিষ্ট ডিভাইসে সরবরাহ করা হবে তার উপর আরও সূক্ষ্ম নিয়ন্ত্রণ দেয়। উদাহরণস্বরূপ, আপনি নিশ্চিত করতে পারেন যে একটি বড় মডেল কেবল উচ্চ RAM সহ ডিভাইসগুলিতে সরবরাহ করা হয় অথবা আপনি একটি মডেলের বিভিন্ন সংস্করণ বিভিন্ন ডিভাইসে সরবরাহ করতে পারেন।
আপনি ডিভাইসের বৈশিষ্ট্যগুলিকে লক্ষ্য করতে পারেন যেমন:
- চিপে সিস্টেম
- ডিভাইস মডেল
- ডিভাইসের র্যাম
- সিস্টেম বৈশিষ্ট্য
প্রয়োজনীয় পদক্ষেপগুলির সংক্ষিপ্ত বিবরণ
ডিভাইস টার্গেটিং সক্ষম করতে নিম্নলিখিত পদক্ষেপগুলি প্রয়োজন:
- একটি XML ফাইলে আপনার ডিভাইস গ্রুপগুলি সংজ্ঞায়িত করুন।
- আপনার বান্ডেলের কোন অংশগুলি কোন ডিভাইস গ্রুপে যাবে তা নির্দিষ্ট করুন।
- [ঐচ্ছিক] স্থানীয়ভাবে আপনার কনফিগারেশন পরীক্ষা করুন।
- আপনার বান্ডেল (XML ফাইল সম্বলিত) Google Play তে আপলোড করুন।
অ্যান্ড্রয়েড গ্রেডল প্লাগইন সংস্করণটি পরীক্ষা করুন
ডিভাইস টার্গেটিং ব্যবহার করার জন্য, নিশ্চিত করুন যে আপনার Android Gradle Plugin (AGP) সংস্করণটি কমপক্ষে 8.10.0। এটি Android Studio (Meerkat 2 এবং পরবর্তী সংস্করণ) এর সাথে প্যাকেজ করা হয়েছে। Android Studio এর সর্বশেষ স্থিতিশীল সংস্করণটি ডাউনলোড করুন।
অ্যান্ড্রয়েড গ্রেডল প্লাগইনে এই বৈশিষ্ট্যটি সক্ষম করুন
আপনার gradle.properties ফাইলে ডিভাইস টার্গেটিং স্পষ্টভাবে সক্ষম করতে হবে:
android.experimental.enableDeviceTargetingConfigApi=true
একটি ডিভাইস টার্গেটিং কনফিগারেশন XML ফাইল তৈরি করুন
ডিভাইস টার্গেটিং কনফিগারেশন ফাইল হল একটি XML ফাইল যেখানে আপনি আপনার কাস্টম ডিভাইস গ্রুপগুলি সংজ্ঞায়িত করতে পারেন। উদাহরণস্বরূপ, আপনি qti_v79 নামক একটি ডিভাইস গ্রুপ সংজ্ঞায়িত করতে পারেন যেখানে চিপে Qualcomm SM8750 সিস্টেম সহ সমস্ত ডিভাইস রয়েছে:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="qti_v79">
<config:device-selector>
<config:system-on-chip manufacturer="QTI" model="SM8750"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
একটি ডিভাইস গ্রুপে সর্বোচ্চ ৫টি ডিভাইস সিলেক্টর থাকে। একটি ডিভাইস যদি তার যেকোনো ডিভাইস সিলেক্টরকে সন্তুষ্ট করে তবে তাকে ডিভাইস গ্রুপে অন্তর্ভুক্ত করা হয়।
একটি ডিভাইস নির্বাচকের এক বা একাধিক ডিভাইস বৈশিষ্ট্য থাকতে পারে। একটি ডিভাইস নির্বাচন করা হয় যদি এটি নির্বাচকের সমস্ত ডিভাইস বৈশিষ্ট্যের সাথে মেলে।
যদি কোনও ডিভাইস একাধিক গ্রুপের সাথে মেলে, তাহলে XML ফাইলে প্রথমে সংজ্ঞায়িত গ্রুপের সামগ্রীটি পরিবেশন করা হবে। XML ফাইলে আপনি যে ক্রমটি গ্রুপ সংজ্ঞায়িত করবেন তা হল আপনার অগ্রাধিকার ক্রম।
যদি কোনও ডিভাইস কোনও গ্রুপের সাথে মেলে না, তাহলে এটি ডিফল্ট "অন্যান্য" গ্রুপটি পাবে। এই গ্রুপটি স্বয়ংক্রিয়ভাবে তৈরি হয় এবং স্পষ্টভাবে সংজ্ঞায়িত করা উচিত নয়।
উপলব্ধ ডিভাইসের বৈশিষ্ট্য
- device_ram : ডিভাইসের RAM এর প্রয়োজনীয়তা
- min_bytes ( সহ) : ন্যূনতম প্রয়োজনীয় RAM (বাইটে)
- max_bytes ( এক্সক্লুসিভ) : সর্বাধিক প্রয়োজনীয় RAM (বাইটে)
- included_device_ids : এই নির্বাচকটিতে ডিভাইস মডেলগুলি অন্তর্ভুক্ত করা হবে (প্রতি গ্রুপে সর্বোচ্চ ১০০০০ device_ids) । তালিকার যেকোনো device_id এর সাথে ডিভাইসটি মিললে এই বৈশিষ্ট্যটি সন্তুষ্ট হবে।
- build_brand : ডিভাইস প্রস্তুতকারক
- build_device : ডিভাইস মডেল কোড
- excluded_device_ids : এই নির্বাচক থেকে ডিভাইস মডেল বাদ দেওয়া হবে (প্রতি গ্রুপে সর্বোচ্চ ১০০০০ device_ids) । যদি ডিভাইসটি তালিকায় কোন device_id এর সাথে মেলে না, তাহলে এই বৈশিষ্ট্যটি পূরণ করা হবে।
- build_brand : ডিভাইস প্রস্তুতকারক
- build_device : ডিভাইস মডেল কোড
required_system_features : একটি ডিভাইসে যে বৈশিষ্ট্যগুলি থাকা আবশ্যক সেগুলি এই নির্বাচক দ্বারা অন্তর্ভুক্ত করা উচিত (প্রতিটি গ্রুপে সর্বাধিক ১০০টি বৈশিষ্ট্য) । এই বৈশিষ্ট্যটি পূরণ করার জন্য একটি ডিভাইসে এই তালিকায় সমস্ত সিস্টেম বৈশিষ্ট্য থাকা প্রয়োজন।
সিস্টেম বৈশিষ্ট্যের রেফারেন্স
- নাম : একটি সিস্টেম বৈশিষ্ট্য
forbidden_system_features : এমন বৈশিষ্ট্য যা একটি ডিভাইসে এই নির্বাচক দ্বারা অন্তর্ভুক্ত করা উচিত নয় (প্রতি গ্রুপে সর্বোচ্চ ১০০টি বৈশিষ্ট্য) । যদি একটি ডিভাইসে এই তালিকার যেকোনো সিস্টেম বৈশিষ্ট্য থাকে তবে এটি এই বৈশিষ্ট্যটি পূরণ করে না।
সিস্টেম বৈশিষ্ট্যের রেফারেন্স
- নাম : একটি সিস্টেম বৈশিষ্ট্য
system-on-chip : এই নির্বাচকের মধ্যে সিস্টেম অন চিপ অন্তর্ভুক্ত করতে হবে। এই বৈশিষ্ট্যটি পূরণ করার জন্য একটি ডিভাইসে এই তালিকায় যেকোনো চিপ থাকা প্রয়োজন।
- প্রস্তুতকারক : সিস্টেম অন চিপ প্রস্তুতকারক
- মডেল : সিস্টেম অন চিপ মডেল
এখানে সমস্ত সম্ভাব্য ডিভাইস বৈশিষ্ট্য দেখানোর একটি উদাহরণ দেওয়া হল:
<config:device-targeting-config
xmlns:config="http://schemas.android.com/apk/config">
<config:device-group name="myCustomGroup1">
<config:device-selector ram-min-bytes="8000000000">
<config:included-device-id brand="google" device="redfin"/>
<config:included-device-id brand="google" device="sailfish"/>
<config:included-device-id brand="good-brand"/>
<config:excluded-device-id brand="google" device="caiman"/>
<config:system-on-chip manufacturer="Sinclair" model="ZX80"/>
<config:system-on-chip manufacturer="Commodore" model="C64"/>
</config:device-selector>
<config:device-selector ram-min-bytes="16000000000"/>
</config:device-group>
<config:device-group name="myCustomGroup2">
<config:device-selector ram-min-bytes="4000000000" ram-max-bytes="8000000000">
<config:required-system-feature name="android.hardware.bluetooth"/>
<config:required-system-feature name="android.hardware.location"/>
<config:forbidden-system-feature name="android.hardware.camera"/>
<config:forbidden-system-feature name="mindcontrol.laser"/>
</config:device-selector>
</config:device-group>
</config:device-targeting-config>
অফিসিয়াল ডিভাইস প্রস্তুতকারক এবং ডিভাইস মডেল কোড
আপনি Google Play Console-এর ডিভাইস ক্যাটালগ ব্যবহার করে ডিভাইস প্রস্তুতকারক এবং মডেল কোডের সঠিক ফর্ম্যাটিং খুঁজে পেতে পারেন, যে কোনও একটির মাধ্যমে:
ডিভাইস ক্যাটালগ ব্যবহার করে পৃথক ডিভাইসগুলি পরিদর্শন করা এবং নীচের উদাহরণে দেখানো অবস্থানগুলিতে প্রস্তুতকারক এবং মডেল কোড খুঁজে বের করা (একটি Google Pixel 4a এর জন্য, প্রস্তুতকারক হল "Google" এবং মডেল কোড হল "sunfish")'


সমর্থিত ডিভাইসের একটি CSV ডাউনলোড করা এবং যথাক্রমে build_brand এবং build_device ফিল্ডের জন্য প্রস্তুতকারক এবং মডেল কোড ব্যবহার করা।
আপনার অ্যাপ বান্ডেলে আপনার ডিভাইস টার্গেটিং কনফিগারেশন ফাইল অন্তর্ভুক্ত করুন
আপনার প্রধান মডিউলের build.gradle ফাইলে নিম্নলিখিতটি যোগ করুন:
android {
...
bundle {
deviceTargetingConfig = file('device_targeting_config.xml')
deviceGroup {
enableSplit = true // split bundle by #group
defaultGroup = "other" // group used for standalone APKs
}
}
...
}
device_targeting_config.xml হল আপনার কনফিগারেশন ফাইলের পাথ যা মূল মডিউলের সাথে সম্পর্কিত। এটি নিশ্চিত করে যে আপনার কনফিগারেশন ফাইলটি আপনার অ্যাপ বান্ডেলের সাথে প্যাকেজ করা আছে।
deviceGroup ধারাটি নিশ্চিত করে যে আপনার বান্ডেল থেকে তৈরি APK গুলি ডিভাইস গ্রুপ দ্বারা বিভক্ত।
আপনার এআই প্যাকগুলির জন্য ডিভাইস টার্গেটিং ব্যবহার করুন
আপনার বড় মডেলগুলো কেবল এমন ডিভাইসে সরবরাহ করে যেখানে সেগুলো চালানো যায়, আপনি ডিভাইসের আকার অপ্টিমাইজ রাখতে পারেন।
শেষ ধাপে তৈরি বিদ্যমান AI প্যাক ডিরেক্টরিগুলি গ্রহণ করে এবং #group_myCustomGroup1, #group_myCustomGroup2, ইত্যাদি ব্যবহার করে উপযুক্ত ফোল্ডারগুলি (নীচে বর্ণিত হিসাবে) সংশোধন করে আপনার AI প্যাকগুলিকে ডিভাইস গ্রুপ অনুসারে উপবিভক্ত করুন। আপনার অ্যাপে AI প্যাকগুলি ব্যবহার করার সময়, আপনাকে পোস্টফিক্স দ্বারা ফোল্ডারগুলিকে সম্বোধন করতে হবে না (অন্য কথায়, বিল্ড প্রক্রিয়া চলাকালীন পোস্টফিক্স স্বয়ংক্রিয়ভাবে ছিনিয়ে নেওয়া হয়)।
পূর্ববর্তী ধাপের পরে, এটি দেখতে এরকম হতে পারে:
...
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup1/
.../ai-pack-name/src/main/assets/image-classifier#group_myCustomGroup2/
...
এই উদাহরণে, আপনি কোনও পোস্টফিক্স ছাড়াই ai-pack-name/assets/image-classifier/ উল্লেখ করবেন।
myCustomGroup1 এর ডিভাইসগুলি image-classifier#group_myCustomGroup1/ অধীনে সমস্ত সম্পদ পাবে, যেখানে myCustomGroup2 এর ডিভাইসগুলি image-classifier#group_myCustomGroup2/ অধীনে সমস্ত সম্পদ পাবে।
যেসব ডিভাইস myCustomGroup1 বা myCustomGroup2 এর অন্তর্গত নয়, তারা একটি খালি ai-pack-name প্যাক পাবে।
এর কারণ হল যে ডিভাইসগুলি কোনও ডিভাইস গ্রুপের সাথে মেলে না সেগুলি আপনার AI প্যাকের ডিফল্ট ভেরিয়েন্ট পাবে। এর মধ্যে এমন কিছু অন্তর্ভুক্ত রয়েছে যা #group_suffix সহ কোনও ডিরেক্টরির মধ্যে নেই।
একবার আপনি AI প্যাকটি ডাউনলোড করে ফেললে, আপনি ইনস্টল-টাইম প্যাকের জন্য AssetManager অথবা ফাস্ট-ফলো এবং অন-ডিমান্ড প্যাকের জন্য AiPackManager ব্যবহার করে আপনার মডেলটি উপস্থিত কিনা তা পরীক্ষা করতে পারেন। নমুনা অ্যাপে সমস্ত ডেলিভারি মোডের জন্য এটি করার উদাহরণ দেখানো হয়েছে।
আপনার ফিচার মডিউলের জন্য ডিভাইস টার্গেটিং ব্যবহার করুন
আপনি ফিচার মডিউলের জন্য ডিভাইস টার্গেটিংও ব্যবহার করতে পারেন। ডিভাইস গ্রুপ অনুসারে ফিচার মডিউলগুলিকে উপবিভক্ত করার পরিবর্তে, আপনি ডিভাইস গ্রুপ সদস্যতার উপর ভিত্তি করে সম্পূর্ণ মডিউলটি সরবরাহ করা উচিত কিনা তা নির্দিষ্ট করুন।
myCustomGroup1 অথবা myCustomGroup2 এর অন্তর্গত ডিভাইসগুলিতে একটি বৈশিষ্ট্য মডিউল সরবরাহ করতে, এর AndroidManifest.xml পরিবর্তন করুন:
<manifest ...>
...
<dist:module dist:title="...">
<dist:delivery>
<dist:install-time>
<dist:conditions>
<dist:device-groups>
<dist:device-group dist:name="myCustomGroup1"/>
<dist:device-group dist:name="myCustomGroup2"/>
</dist:device-groups>
...
</dist:conditions>
</dist:install-time>
</dist:delivery>
</dist:module>
...
</manifest>
স্থানীয়ভাবে পরীক্ষা করুন
আপনার নতুন বান্ডেলের জন্য একটি রিলিজ তৈরি করার আগে, আপনি অভ্যন্তরীণ অ্যাপ শেয়ারিং অথবা বান্ডেলটুল দিয়ে স্থানীয়ভাবে পরীক্ষা করতে পারেন।
অভ্যন্তরীণ অ্যাপ শেয়ারিং
অভ্যন্তরীণ অ্যাপ শেয়ারিং আপনাকে একটি অ্যাপ বান্ডেল ব্যবহার করে দ্রুত একটি URL তৈরি করতে দেয় যা আপনি একটি স্থানীয় ডিভাইসে ট্যাপ করে ইনস্টল করতে পারেন যা Google Play সেই ডিভাইসের জন্য ঠিক একইভাবে ইনস্টল করবে যদি অ্যাপটির সেই সংস্করণটি একটি পরীক্ষামূলক বা প্রোড ট্র্যাকে লাইভ থাকে।
অভ্যন্তরীণ অ্যাপ শেয়ারিং নির্দেশাবলী একবার দেখুন।
বান্ডেলটুল
বিকল্পভাবে, আপনি bundletool (1.18.0 বা তার উপরে) ব্যবহার করে APK তৈরি করতে পারেন এবং সেগুলিকে আপনার ডিভাইসে সাইডলোড করতে পারেন। bundletool ব্যবহার করে স্থানীয়ভাবে আপনার অ্যাপ পরীক্ষা করতে এই পদক্ষেপগুলি অনুসরণ করুন:
অ্যান্ড্রয়েড স্টুডিও অথবা বান্ডেলটুল দিয়ে আপনার অ্যাপ বান্ডেল তৈরি করুন।
--local-testingপতাকা ব্যবহার করে APK তৈরি করুন:java -jar bundletool-all.jar build-apks --bundle=path/to/your/bundle.aab \ --output=output.apks --local-testing
একটি ডিভাইস সংযুক্ত করুন এবং APK গুলি সাইডলোড করার জন্য
bundletoolচালান:# Example without Device Targeting Configuration java -jar bundletool.jar install-apks --apks=output.apks
# Example with Device Targeting Configuration (you must specify which groups the connected device belongs to) java -jar bundletool.jar install-apks --apks=output.apks --device-groups=myCustomGroup1,myCustomGroup2
বান্ডেলটুল ব্যবহার করে স্থানীয় পরীক্ষার সীমাবদ্ধতা
bundletool ব্যবহার করে স্থানীয় পরীক্ষার সীমাবদ্ধতাগুলি নিম্নরূপ:
-
fast-followপ্যাকগুলিon-demandপ্যাকের মতো আচরণ করে। অর্থাৎ, অ্যাপটি সাইডলোড করার সময় এগুলি স্বয়ংক্রিয়ভাবে আনা হবে না। অ্যাপটি শুরু হওয়ার সময় ডেভেলপারদের ম্যানুয়ালি অনুরোধ করতে হবে; এর জন্য আপনার অ্যাপে কোনও কোড পরিবর্তনের প্রয়োজন হয় না। - প্যাকগুলি Play এর পরিবর্তে বহিরাগত স্টোরেজ থেকে আনা হয়, তাই নেটওয়ার্ক ত্রুটির ক্ষেত্রে আপনার কোড কীভাবে আচরণ করে তা আপনি পরীক্ষা করতে পারবেন না।
- স্থানীয় পরীক্ষা-নিরীক্ষা ওয়াই-ফাই-এর জন্য অপেক্ষা করার পরিস্থিতির আওতাভুক্ত নয়।
- আপডেটগুলি সমর্থিত নয়। আপনার বিল্ডের একটি নতুন সংস্করণ ইনস্টল করার আগে, পূর্ববর্তী সংস্করণটি ম্যানুয়ালি আনইনস্টল করুন।
সঠিক APK গুলি ইনস্টল করা হচ্ছে কিনা তা যাচাই করুন।
ডিভাইসে শুধুমাত্র সঠিক APK গুলি ইনস্টল করা আছে কিনা তা নিশ্চিত করতে নিম্নলিখিত পদ্ধতিটি ব্যবহার করুন
adb shell pm path {packageName}
তোমার এরকম কিছু দেখা উচিত:
package:{...}/base.apk
package:{...}/split_config.en.apk
package:{...}/split_config.xxhdpi.apk
package:{...}/split_main_ai-pack-name.apk
package:{...}/split_main_ai-pack-name.config.group_myCustomGroup1.apk
মনে রাখবেন যে আপনি এই তালিকায় শুধুমাত্র APK দেখতে পাবেন, যেগুলি ফিচার মডিউল এবং ইনস্টল-টাইম AI প্যাক থেকে তৈরি। অন-ডিমান্ড এবং ফাস্ট-ফলো AI প্যাকগুলি APK হিসাবে ইনস্টল করা হয় না।
Google Play তে পরীক্ষা করে প্রকাশ করুন
আমরা আপনাকে একটি অভ্যন্তরীণ পরীক্ষামূলক ট্র্যাক ব্যবহার করে Google Play তে আপনার অ্যাপটি এন্ড টু এন্ড পরীক্ষা করার পরামর্শ দিচ্ছি।
একবার এটি করার পরে, আপনি পর্যায়ক্রমে রোল-আউট ব্যবহার করে আপনার অ্যাপ আপডেটটি উৎপাদনে প্রকাশ করতে পারবেন।
Play for On-device AI ব্যবহার করে নমুনা অ্যাপ
নমুনা অ্যাপটি ডাউনলোড করুন।
এটি প্রতিটি ডেলিভারি মোডের পাশাপাশি ডিভাইস টার্গেটিং কনফিগারেশন কীভাবে ব্যবহার করতে হয় তা প্রদর্শন করে। শুরু করতে স্থানীয় পরীক্ষা বিভাগটি দেখুন।
সম্পর্কিত বিষয়বস্তু
অ্যান্ড্রয়েড অ্যাপ বান্ডেল সম্পর্কে আরও জানুন এবং AI ডেলিভারি SDK এর রেফারেন্সগুলি পড়ুন।