কমান্ড লাইন থেকে আপনার অ্যাপ তৈরি করা

Gradle wrapper কমান্ড লাইন টুল ব্যবহার করে আপনি Android প্রোজেক্টের জন্য উপলভ্য সব বিল্ড টাস্ক এক্সিকিউট করতে পারবেন। এটি Windows (gradlew.bat)-এর জন্য ব্যাচ ফাইল এবং Linux ও Mac (gradlew.sh)-এর জন্য শেল স্ক্রিপ্ট হিসেবে উপলভ্য এবং Android Studio-এর মাধ্যমে তৈরি করা প্রতিটি প্রজেক্টের রুট থেকে এটি অ্যাক্সেস করা যায়।

র‍্যাপারের সাথে টাস্ক রান করাতে, কোনও টার্মিনাল উইন্ডো (Android Studio থেকে, দেখুন > টুল উইন্ডো > টার্মিনাল) থেকে নিম্নলিখিত কমান্ডগুলির মধ্যে একটি ব্যবহার করুন:

  • Windows কমান্ড শেলে:
    gradlew task-name
  • Mac, Linux বা Windows PowerShell-এ:
    ./gradlew task-name

আপনার প্রোজেক্টের জন্য উপলভ্য সব বিল্ড টাস্কের তালিকা দেখতে, tasksএক্সিকিউট করুন:

gradlew tasks

এই পৃষ্ঠার বাকি অংশে Gradle র‍্যাপার ব্যবহার করে আপনার অ্যাপ তৈরি ও চালানোর মূল বিষয়গুলি বর্ণনা করা হয়েছে। আপনার Android বিল্ড কীভাবে সেট-আপ করবেন সেই সম্পর্কে আরও তথ্য পেতে, আপনার বিল্ড কনফিগার করুন দেখুন।

আপনি যদি কমান্ড লাইন টুলের পরিবর্তে Android Studio টুল ব্যবহার করতে চান, তাহলে আপনার অ্যাপ তৈরি ও রান করুন দেখুন।

বিল্ডের ধরন সম্পর্কে

ডিফল্ট হিসেবে, প্রতিটি Android অ্যাপের জন্য দুটি বিল্ডের ধরন উপলভ্য থাকে: একটি আপনার অ্যাপ ডিবাগ করার জন্য—ডিবাগ বিল্ড—এবং একটি আপনার অ্যাপ ব্যবহারকারীদের কাছে রিলিজ করার জন্য—রিলিজ বিল্ড। প্রতিটি বিল্ডের ফলাফলকে কোনও ডিভাইসে অ্যাপ ডিপ্লয় করার আগে একটি সার্টিফিকেট দিয়ে সাইন করতে হবে। SDK টুল দ্বারা প্রদত্ত ডিবাগ কী দিয়ে ডিবাগ বিল্ড অটোমেটিক সাইন করা হয় (এটি সুরক্ষিত নয় এবং আপনি এটি দিয়ে Google Play Store-এ প্রকাশ করতে পারবেন না) এবং রিলিজ বিল্ড অবশ্যই আপনার নিজস্ব ব্যক্তিগত কী দিয়ে সাইন করতে হবে।

আপনি রিলিজ করার জন্য অ্যাপ তৈরি করতে চাইলে, উপযুক্ত সই করার কী ব্যবহার করে আপনার অ্যাপে সই করা গুরুত্বপূর্ণ। তবে, আপনি যদি সবেমাত্র শুরু করে থাকেন, তাহলে একটি ডিবাগ APK তৈরি করে এমুলেটর বা কানেক্ট করা ডিভাইসে দ্রুত আপনার অ্যাপ চালাতে পারবেন।

এছাড়াও, আপনি নিজের build.gradle.kts ফাইলে কাস্টম বিল্ডের ধরন নির্ধারণ করতে এবং debuggable true যোগ করে এটিকে ডিবাগ বিল্ড হিসেবে সাইন করার জন্য কনফিগার করতে পারবেন। আরও তথ্যের জন্য, বিল্ড ভ্যারিয়েন্ট কনফিগার করা দেখুন।

APK তৈরি ও ডিপ্লয় করা

যদিও অ্যাপ বান্ডেল তৈরি করা হল আপনার অ্যাপকে প্যাকেজ করা এবং Play Console-এ আপলোড করার সবচেয়ে ভালো উপায়, তবে APK তৈরি করা তখন বেশি উপযুক্ত হয় যখন আপনি দ্রুত কোনও ডিবাগ বিল্ড পরীক্ষা করতে চান অথবা আপনার অ্যাপকে অন্যদের সাথে ডিপ্লয় করার উপযুক্ত আর্টিফ্যাক্ট হিসেবে শেয়ার করতে চান।

ডিবাগ APK তৈরি করা

অবিলম্বে অ্যাপ পরীক্ষা ও ডিবাগ করার জন্য, আপনি একটি ডিবাগ APK তৈরি করতে পারেন। SDK টুলের দেওয়া ডিবাগ কী দিয়ে ডিবাগ APK সাইন করা হয় এবং adb-এর মাধ্যমে ডিবাগ করার অনুমতি দেয়।

একটি ডিবাগ APK তৈরি করতে, একটি কমান্ড লাইন খুলুন এবং আপনার প্রোজেক্ট ডিরেক্টরির রুটে নেভিগেট করুন। একটি ডিবাগ বিল্ড শুরু করতে, assembleDebug টাস্কটি ইনভোক করুন:

gradlew assembleDebug

এটি project_name/module_name/build/outputs/apk/-এ module_name-debug.apk নামের একটি APK তৈরি করে। ফাইলটি আগে থেকেই ডিবাগ কী দিয়ে সাইন করা আছে এবং zipalign-এর সাথে অ্যালাইন করা আছে, তাই আপনি সেটি কোনও ডিভাইসে অবিলম্বে ইনস্টল করতে পারবেন।

অথবা APK তৈরি করে সাথে সাথেই চালু থাকা এমুলেটর বা কানেক্ট করা ডিভাইসে ইনস্টল করতে, installDebug কমান্ড ব্যবহার করুন:

gradlew installDebug

উপরের টাস্কের নামে "Debug" অংশটি হল বিল্ড ভ্যারিয়েন্ট নামের ক্যামেল-কেস ভার্সন, তাই আপনি যে বিল্ড টাইপ বা ভ্যারিয়েন্ট অ্যাসেম্বল বা ইনস্টল করতে চান, সেটি দিয়ে এটিকে পরিবর্তন করা যেতে পারে। যেমন, আপনার কাছে "ডেমো" প্রোডাক্ট ফ্লেভার থাকলে, আপনি assembleDemoDebug টাস্কের মাধ্যমে ডিবাগ ভার্সন তৈরি করতে পারবেন।

প্রতিটি ভেরিয়েন্টের জন্য উপলভ্য সব বিল্ড ও ইনস্টল টাস্ক (আনইনস্টল টাস্ক সহ) দেখতে, tasks টাস্ক রান করান।

এছাড়াও, কীভাবে এমুলেটরে আপনার অ্যাপ রান করাবেন এবং ডিভাইসে আপনার অ্যাপ রান করাবেন সেই সম্পর্কিত বিভাগটি দেখুন।

রিলিজ বান্ডেল বা APK তৈরি করা

আপনার অ্যাপ রিলিজ ও ডিস্ট্রিবিউট করার জন্য রেডি হলে, আপনাকে অবশ্যই একটি রিলিজ বান্ডেল বা APK তৈরি করতে হবে যেটি আপনার ব্যক্তিগত কী দিয়ে সাইন করা হয়েছে। আরও তথ্যের জন্য, কীভাবে কমান্ড লাইন থেকে আপনার অ্যাপে সাইন-ইন করবেন সেই সম্পর্কিত বিভাগে যান।

এমুলেটরে আপনার অ্যাপ ডিপ্লয় করা

Android এমুলেটর ব্যবহার করতে, আপনাকে Android Studio ব্যবহার করে Android ভার্চুয়াল ডিভাইস (AVD) তৈরি করতে হবে।

AVD হয়ে গেলে, Android Emulator চালু করুন এবং আপনার অ্যাপ এগুলি অনুসরণ করে ইনস্টল করুন:

  1. কমান্ড লাইনে, android_sdk/tools/-এ নেভিগেট করুন এবং আপনার AVD নির্দিষ্ট করে ইমুলেটর চালু করুন:

    emulator -avd avd_name

    AVD-র নাম সম্পর্কে নিশ্চিত না হলে, emulator -list-avds এক্সিকিউট করুন।

  2. আপনি এখন কীভাবে একটি ডিবাগ APK তৈরি করবেন সেই সম্পর্কে বিভাগে উল্লেখ করা Gradle ইনস্টল টাস্কের যেকোনও একটি ব্যবহার করে অথবা adb টুল ব্যবহার করে আপনার অ্যাপ ইনস্টল করতে পারবেন।

    ডেভেলপার প্রিভিউ SDK ব্যবহার করে APK তৈরি করা হলে (targetSdkVersion যদি কোনও সংখ্যা না হয়ে অক্ষর হয়), তাহলে আপনাকে অবশ্যই টেস্ট APK ইনস্টল করার জন্য install কমান্ডের সাথে -t বিকল্প অন্তর্ভুক্ত করতে হবে।

    adb install path/to/your_app.apk
    

    আপনার তৈরি করা সব APK project_name/module_name/build/outputs/apk/-এ সেভ করা হয়।

আরও তথ্যের জন্য, Android এমুলেটরে অ্যাপ রান করানো দেখুন।

ফিজিক্যাল ডিভাইসে আপনার অ্যাপ ডেপ্লয় করা

কোনও ডিভাইসে আপনার অ্যাপ চালানোর আগে, আপনাকে ডিভাইসে USB ডিবাগিং চালু করতে হবে। আপনি এই বিকল্পটি সেটিংস > ডেভেলপার বিকল্প-এর অধীনে খুঁজে পাবেন।

মনে রাখবেন: Android 4.2 ও এর পরের যেকোনও ভার্সনে, ডেভেলপার বিকল্প ডিফল্ট হিসেবে লুকানো থাকে। এটি উপলভ্য করতে, সেটিংস > ফোন সম্পর্কে বিকল্পে যান এবং বিল্ড নম্বর বিকল্পে সাতবার ট্যাপ করুন। ডেভেলপার বিকল্প খুঁজে পেতে আগের স্ক্রিনে ফিরে যান।

USB-এর মাধ্যমে আপনার ডিভাইস সেট-আপ ও কানেক্ট করা হয়ে গেলে, আপনি একটি ডিবাগ APK তৈরি করা সংক্রান্ত বিভাগে উল্লেখ করা Gradle ইনস্টল টাস্ক অথবা adb টুল ব্যবহার করে আপনার অ্যাপ ইনস্টল করতে পারবেন:

adb -d install path/to/your_app.apk

আপনার তৈরি করা সব APK project_name/module_name/build/outputs/apk/-এ সেভ করা হয়।

আরও তথ্যের জন্য, হার্ডওয়্যার ডিভাইসে অ্যাপ রান করানো দেখুন।

অ্যাপ বান্ডেল তৈরি করা

Android অ্যাপ বান্ডেলে আপনার অ্যাপের সব কম্পাইল করা কোড ও রিসোর্স অন্তর্ভুক্ত থাকে, কিন্তু APK তৈরি ও সাইন করার কাজটি Google Play-এর উপর ছেড়ে দেওয়া হয়। APK-এর মতো, আপনি সরাসরি কোনও ডিভাইসে অ্যাপ বান্ডেল ডেপ্লয় করতে পারবেন না। তাই, আপনি যদি অন্য কারও সাথে দ্রুত কোনও APK পরীক্ষা বা শেয়ার করতে চান, তাহলে আপনাকে পরিবর্তে APK তৈরি করতে হবে।

অ্যাপ বান্ডেল তৈরি করার সবচেয়ে সহজ উপায় হল Android Studio ব্যবহার করা। তবে, কমান্ড লাইন থেকে অ্যাপ বান্ডেল তৈরি করতে চাইলে, নিচে উল্লেখ করা বিভাগ অনুযায়ী, আপনি Gradle বা bundletool ব্যবহার করে তা করতে পারবেন।

Gradle-এর সাহায্যে অ্যাপ বান্ডেল তৈরি করা

আপনি কমান্ড লাইন থেকে অ্যাপ বান্ডেল তৈরি করতে চাইলে, আপনার অ্যাপের বেস মডিউলে bundleVariant Gradle টাস্ক রান করান। যেমন, নিম্নলিখিত কমান্ডটি বেস মডিউলের ডিবাগ ভার্সনের জন্য একটি অ্যাপ বান্ডেল তৈরি করে:

./gradlew :base:bundleDebug

Play Console-এ আপলোড করার জন্য সাইন করা বান্ডেল তৈরি করতে চাইলে, আপনাকে প্রথমে বেস মডিউলের build.gradle.kts ফাইলটি আপনার অ্যাপের সাইন করার তথ্য দিয়ে কনফিগার করতে হবে। আরও জানতে, কীভাবে আপনার অ্যাপ সাইন করার জন্য Gradle কনফিগার করবেন সেই সম্পর্কে বিভাগে যান। তারপরে, আপনি যেমন, আপনার অ্যাপের রিলিজ ভার্সন তৈরি করতে পারবেন এবং Gradle অটোমেটিক অ্যাপ বান্ডেল তৈরি করে এবং build.gradle.kts ফাইলে আপনার দেওয়া সাইন করার তথ্য দিয়ে এটি সাইন করে।

আপনি যদি আলাদা ধাপ হিসেবে অ্যাপ বান্ডেল সাইন করতে চান, তাহলে কমান্ড লাইন থেকে অ্যাপ বান্ডেল সাইন করতে jarsigner ব্যবহার করতে পারেন। অ্যাপ বান্ডেল তৈরি করার কমান্ড হল:

jarsigner -keystore pathToKeystore app-release.aab keyAlias

bundletool ব্যবহার করে অ্যাপ বান্ডেল তৈরি করা

bundletool হল একটি কমান্ড লাইন টুল যা Android Studio, Android Gradle প্লাগ-ইন এবং Google Play আপনার অ্যাপের কম্পাইল করা কোড এবং রিসোর্সকে অ্যাপ বান্ডেলে কনভার্ট করতে এবং সেইসব বান্ডেল থেকে ডিপ্লয় করা যায় এমন APK তৈরি করতে ব্যবহার করে।

তাই, bundletool-এর মাধ্যমে অ্যাপ বান্ডেল পরীক্ষা করা এবং Google Play কীভাবে APK তৈরি করে তা লোকালি রিক্রিয়েট করা উপযোগী হলেও, সাধারণত আপনাকে অ্যাপ বান্ডেল তৈরি করার জন্য bundletool ইনভোক করতে হবে না—এর পরিবর্তে আপনাকে Android Studio বা Gradle টাস্ক ব্যবহার করতে হবে, যেমনটি আগের বিভাগে বর্ণনা করা হয়েছে।

তবে, আপনি যদি বান্ডেল তৈরি করার জন্য Android Studio বা Gradle টাস্ক ব্যবহার করতে না চান—যেমন, আপনি যদি কাস্টম বিল্ড টুলচেন ব্যবহার করেন—তাহলে আপনি bundletool কমান্ড লাইন থেকে প্রি-কম্পাইল করা কোড এবং রিসোর্স থেকে অ্যাপ বান্ডেল তৈরি করতে পারেন। আপনি এখনও এটি না করে থাকলে, GitHub রিপোজিটরি থেকে bundletool ডাউনলোড করুন।

এই বিভাগে আপনার অ্যাপের কম্পাইল করা কোড ও রিসোর্স কীভাবে প্যাকেজ করতে হয়, এবং কীভাবে bundletool কমান্ড লাইন থেকে ব্যবহার করে সেগুলিকে Android অ্যাপ বান্ডেলে কনভার্ট করতে হয় তা বর্ণনা করা হয়েছে।

প্রোটো ফর্ম্যাটে ম্যানিফেস্ট ও রিসোর্স তৈরি করা

bundletool-এর জন্য আপনার অ্যাপ প্রোজেক্ট সম্পর্কে নির্দিষ্ট তথ্য প্রয়োজন, যেমন অ্যাপের ম্যানিফেস্ট ও রিসোর্স, যা Google-এর প্রোটোকল বাফার ফর্ম্যাটে থাকতে হবে—এটি "protobuf" নামেও পরিচিত এবং *.pb ফাইল এক্সটেনশন ব্যবহার করে। স্ট্রাকচার্ড ডেটা সিরিয়ালাইজ করার জন্য Protobufs একটি ভাষা-নিরপেক্ষ, প্ল্যাটফর্ম-নিরপেক্ষ এবং এক্সটেনসিবল মেকানিজম প্রদান করে—এটি XML-এর মতো, তবে ছোট, দ্রুত এবং সহজ।

AAPT2 ডাউনলোড করুন

আপনি Google Maven repository থেকে AAPT2-এর লেটেস্ট ভার্সন ব্যবহার করে protobuf ফর্ম্যাটে আপনার অ্যাপের ম্যানিফেস্ট ফাইল ও রিসোর্স টেবিল তৈরি করতে পারবেন।

Google-এর Maven রিপোজিটরি থেকে AAPT2 ডাউনলোড করতে, নিম্নলিখিত ধাপগুলি অনুসরণ করুন:

  1. রেপোজিটরি ইনডেক্স-এ গিয়ে com.android.tools.build > aapt2-এ নেভিগেট করুন।
  2. AAPT2-এর লেটেস্ট ভার্সনের নাম কপি করুন।
  3. আপনি যে ভার্সনের নাম কপি করেছেন সেটি নিম্নলিখিত URL-এ লিখুন এবং আপনার টার্গেট অপারেটিং সিস্টেম উল্লেখ করুন: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/aapt2-version/aapt2-aapt2-version-[windows | linux | osx].jar

    যেমন, Windows-এর জন্য 3.2.0-alpha18-4804415 ভার্সন ডাউনলোড করতে, আপনাকে এটি ব্যবহার করতে হবে: https://dl.google.com/dl/android/maven2/com/android/tools/build/aapt2/3.2.0-alpha18-4804415/aapt2-3.2.0-alpha18-4804415-windows.jar

  4. ব্রাউজারে URL-এ নেভিগেট করুন—AAPT2 শীঘ্রই ডাউনলোড হওয়া শুরু হয়ে যাবে।

  5. এইমাত্র ডাউনলোড করা JAR ফাইলটি আনপ্যাক করুন।

নিম্নলিখিত কমান্ডের মাধ্যমে আপনার অ্যাপের রিসোর্স কম্পাইল করতে AAPT2 ব্যবহার করুন:

aapt2 compile \
project_root/module_root/src/main/res/drawable/Image1.png \
project_root/module_root/src/main/res/drawable/Image2.png \
-o compiled_resources/

লিঙ্ক করার ফেজে, যেখানে AAPT2 আপনার বিভিন্ন কম্পাইল করা রিসোর্সকে একটি সিঙ্গেল APK-তে লিঙ্ক করে, সেখানে AAPT2-কে আপনার অ্যাপের ম্যানিফেস্ট ও কম্পাইল করা রিসোর্সকে --proto-format ফ্ল্যাগ যোগ করে protobuf ফর্ম্যাটে কনভার্ট করার নির্দেশ দিন, যেমনটি নিচে দেখানো হয়েছে:

aapt2 link --proto-format -o output.apk \
-I android_sdk/platforms/android_version/android.jar \
--manifest project_root/module_root/src/main/AndroidManifest.xml \
-R compiled_resources/*.flat \
--auto-add-overlay

তারপরে, আপনি আউটপুট APK থেকে কন্টেন্ট এক্সট্র্যাক্ট করতে পারবেন, যেমন আপনার অ্যাপের AndroidManifest.xml, resources.pb এবং অন্যান্য রিসোর্স ফাইল—এখন protobuf ফর্ম্যাটে। ইনপুট তৈরি করার সময় আপনার এইসব ফাইল প্রয়োজন bundletool নিম্নলিখিত বিভাগে যেভাবে বর্ণনা করা হয়েছে, সেইভাবে আপনার অ্যাপ বান্ডেল তৈরি করতে হবে।

প্যাকেজ প্রি-কম্পাইল করা কোড ও রিসোর্স

আপনার অ্যাপের জন্য অ্যাপ বান্ডেল জেনারেট করতে bundletool ব্যবহার করার আগে, আপনাকে অবশ্যই প্রথমে ZIP ফাইল দিতে হবে যার প্রত্যেকটিতে কোনও নির্দিষ্ট অ্যাপ মডিউলের জন্য কম্পাইল করা কোড ও রিসোর্স থাকে। প্রতিটি মডিউলের ZIP ফাইলের কন্টেন্ট ও সংগঠন Android অ্যাপ বান্ডেল ফর্ম্যাটের সাথে খুব মিল আছে। যেমন, আপনার অ্যাপের বেস মডিউলের জন্য আপনাকে একটি base.zip ফাইল তৈরি করতে হবে এবং এর কন্টেন্টকে এইভাবে সাজাতে হবে:

ফাইল বা ডিরেক্টরি বর্ণনা
manifest/AndroidManifest.xml মডিউলের ম্যানিফেস্ট protobuf ফর্ম্যাটে।
dex/... আপনার অ্যাপের কম্পাইল করা এক বা একাধিক DEX ফাইল সহ ডিরেক্টরি। এইসব ফাইলের নাম নিম্নলিখিতভাবে হতে হবে: classes.dex, classes2.dex, classes3.dex, ইত্যাদি।
res/... সব ডিভাইস কনফিগারেশনের জন্য মডিউলের রিসোর্স protobuf ফর্ম্যাটে থাকে। সাবডাইরেক্টরি ও ফাইলগুলি সাধারণ APK-এর মতো করে সাজানো থাকতে হবে।
root/..., assets/... ও lib/... এইসব ডিরেক্টরি Android অ্যাপ বান্ডেল ফর্ম্যাট সংক্রান্ত বিভাগে বর্ণিত ডিরেক্টরির মতো।
resources.pb protobuf ফর্ম্যাটে আপনার অ্যাপের রিসোর্স টেবিল।

আপনার অ্যাপের প্রতিটি মডিউলের জন্য ZIP ফাইল তৈরি করার পরে, আপনি সেগুলি bundletool-এ পাঠাতে পারেন, যাতে আপনার অ্যাপ বান্ডেল তৈরি করা যায়। এটি নিম্নলিখিত বিভাগে বর্ণনা করা হয়েছে।

bundletool ব্যবহার করে আপনার অ্যাপ বান্ডেল তৈরি করা

আপনার অ্যাপ বান্ডেল তৈরি করতে, আপনি bundletool build-bundle কমান্ড ব্যবহার করেন, যেমন নিচে দেখানো হয়েছে:

bundletool build-bundle --modules=base.zip --output=mybundle.aab

নিচের সারণীতে build-bundle কমান্ডের ফ্ল্যাগ সম্পর্কে আরও বিস্তারিত বিবরণ দেওয়া হল:

পতাকা বর্ণনা
--modules=path-to-base.zip, path-to-module2.zip,path-to-module3.zip আপনার অ্যাপ বান্ডেল তৈরি করতে bundletool ব্যবহার করতে হবে এমন মডিউল ZIP ফাইলের তালিকা নির্দিষ্ট করে।
--output=path-to-output.aab আউটপুট *.aab ফাইলের পাথ ও ফাইলের নাম নির্দিষ্ট করে।
--config=path-to-BundleConfig.json বিল্ড প্রসেস কাস্টমাইজ করতে আপনি যে ঐচ্ছিক কনফিগারেশন ফাইল ব্যবহার করতে পারেন সেটির পাথ নির্দিষ্ট করে। আরও জানতে, ডাউনস্ট্রিম APK জেনারেশন কাস্টমাইজ করা সম্পর্কিত বিভাগটি দেখুন।
--metadata-file=target-bundle-path:local-file-path আপনার অ্যাপ বান্ডেলের মধ্যে bundletool একটি ঐচ্ছিক মেটাডেটা ফাইল প্যাকেজ করার নির্দেশ দেয়। আপনি এই ফাইলটি ডেটা অন্তর্ভুক্ত করতে ব্যবহার করতে পারেন, যেমন ProGuard ম্যাপিং বা আপনার অ্যাপের DEX ফাইলের সম্পূর্ণ তালিকা, যা আপনার টুলচেন বা অ্যাপ স্টোরের অন্যান্য ধাপের জন্য সহায়ক হতে পারে।

target-bundle-path অ্যাপ বান্ডেলের রুট সম্পর্কিত একটি পাথ নির্দিষ্ট করে, যেখানে আপনি মেটাডেটা ফাইল প্যাকেজ করতে চান এবং local-file-path লোকাল মেটাডেটা ফাইলের পাথ নির্দিষ্ট করে ।

ডাউনস্ট্রিম APK জেনারেশন কাস্টমাইজ করা

অ্যাপ বান্ডেলে একটি BundleConfig.pb ফাইল থাকে যা অ্যাপ স্টোর, যেমন Google Play-এর মতো অ্যাপের জন্য মেটাডেটা প্রদান করে। বান্ডেল থেকে APK তৈরি করার সময় এটি প্রয়োজন হয়। যদিও bundletool আপনার জন্য এই ফাইল তৈরি করে, আপনি BundleConfig.json ফাইলে মেটাডেটার কিছু দিক কনফিগার করতে পারেন এবং এটি bundletool build-bundle কমান্ডে পাস করতে পারেন—bundletool পরে এই ফাইলটিকে প্রতিটি অ্যাপ বান্ডেলে অন্তর্ভুক্ত protobuf ভার্সনে কনভার্ট ও মার্জ করে।

যেমন, আপনি কোন কোন ক্যাটেগরির কনফিগারেশন APK চালু বা বন্ধ করবেন তা নিয়ন্ত্রণ করতে পারবেন। BundleConfig.json ফাইলের নিম্নলিখিত উদাহরণটি কনফিগারেশন APK বন্ধ করে দেয় যেগুলি প্রত্যেকটি আলাদা আলাদা ভাষাকে টার্গেট করে (অর্থাৎ, সব ভাষার রিসোর্স তাদের নিজ নিজ বেস বা ফিচার APK-তে অন্তর্ভুক্ত থাকে):

{
  "optimizations": {
    "splitsConfig": {
      "splitDimension": [{
        "value": "LANGUAGE",
        "negate": true
      }]
    }
  }
}

এছাড়াও, আপনার BundleConfig.json ফাইলে, আপনি কোন ধরনের ফাইলকে গ্লোব প্যাটার্ন ব্যবহার করে APK প্যাকেজ করার সময় কমপ্রেস না করে রাখতে চান তা উল্লেখ করতে পারেন, যেমন:

{
  "compression": {
    "uncompressedGlob": ["res/raw/**", "assets/**.uncompressed"]
  }
}

মনে রাখবেন, ডিফল্ট হিসেবে, bundletool আপনার অ্যাপের নেটিভ লাইব্রেরি (Android 6.0 বা তার পরবর্তী যেকোনও ভার্সনে) এবং রিসোর্স টেবিল (resources.arsc) কম্প্রেস করে না। আপনার BundleConfig.json-এ আপনি কী কনফিগার করতে পারবেন তার সম্পূর্ণ বিবরণ পেতে, bundletool config.proto ফাইল চেক করুন, যা Proto3 সিনট্যাক্স ব্যবহার করে লেখা হয়।

অ্যাপ বান্ডেল থেকে আপনার অ্যাপ ডেপ্লয় করা

আপনি যদি কোনও অ্যাপ বান্ডেল তৈরি ও সাইন করে থাকেন, তাহলে APK তৈরি করতে bundletool ব্যবহার করুন এবং সেগুলি কোনও ডিভাইসে ডেপ্লয় করুন।

কমান্ড লাইন থেকে আপনার অ্যাপে সাইন-ইন করা

আপনার অ্যাপে সাইন-ইন করার জন্য Android Studio-এর প্রয়োজন নেই। আপনি কমান্ড লাইন থেকে আপনার অ্যাপে সাইন-ইন করতে পারবেন, এর জন্য APK-এর ক্ষেত্রে apksigner বা অ্যাপ বান্ডেলের ক্ষেত্রে jarsigner ব্যবহার করুন, অথবা বিল্ড করার সময় আপনার হয়ে সাইন-ইন করার জন্য Gradle কনফিগার করুন। যাই হোক, আপনাকে প্রথমে keytool ব্যবহার করে প্রাইভেট কী তৈরি করতে হবে, যেমন নিচে দেখানো হয়েছে:

keytool -genkey -v -keystore my-release-key.jks -keyalg RSA -keysize 2048 -validity 10000 -alias my-alias

উপরের উদাহরণে, আপনাকে কীস্টোর ও কী-এর পাসওয়ার্ড এবং আপনার কী-এর জন্য "স্বতন্ত্র নাম" ফিল্ডের পাসওয়ার্ড দিতে বলা হয়েছে। তারপরে এটি my-release-key.jks নামের একটি ফাইল হিসেবে কীস্টোর তৈরি করে এবং এটিকে বর্তমান ডিরেক্টরিতে সেভ করে (আপনি এটিকে যেখানে চান সেখানে সরাতে পারবেন)। কীস্টোরে একটি কী আছে যা ১০,০০০ দিন পর্যন্ত বৈধ।

নিচে উল্লেখ করা বিভাগ অনুযায়ী, এখন আপনি ম্যানুয়ালি APK বা অ্যাপ বান্ডেলে সাইন করতে পারবেন অথবা বিল্ড প্রসেস চলাকালীন আপনার অ্যাপে সাইন করার জন্য Gradle কনফিগার করতে পারবেন।

কমান্ড লাইন থেকে আপনার অ্যাপে ম্যানুয়ালি সাইন করা

আপনি কমান্ড লাইন থেকে অ্যাপ বান্ডেল সাইন করতে চাইলে, jarsigner ব্যবহার করতে পারবেন। এর পরিবর্তে, আপনি যদি কোনও APK-তে সই করতে চান, তাহলে আপনাকে নিচে বর্ণিত zipalign এবং apksigner ব্যবহার করতে হবে।

  1. কমান্ড লাইন খুলুন—Android Studio থেকে, দেখুন > টুল উইন্ডো > টার্মিনাল বিকল্প বেছে নিন—এবং সেই ডিরেক্টরিতে নেভিগেট করুন যেখানে আপনার স্বাক্ষরবিহীন APK অবস্থিত।
  2. zipalign ব্যবহার করে স্বাক্ষর না করা APK অ্যালাইন করুন:

    zipalign -v -p 4 my-app-unsigned.apk my-app-unsigned-aligned.apk
    

    zipalign নিশ্চিত করে যে সমস্ত আনকমপ্রেসড ডেটা ফাইলের শুরু থেকে আপেক্ষিক নির্দিষ্ট বাইট অ্যালাইনমেন্ট সহ শুরু হয়, যা কোনও অ্যাপের দ্বারা ব্যবহৃত RAM-এর পরিমাণ কমাতে পারে।

  3. apksigner ব্যবহার করে আপনার ব্যক্তিগত কী দিয়ে APK সাইন করুন:

    apksigner sign --ks my-release-key.jks --out my-app-release.apk my-app-unsigned-aligned.apk
    

    এই উদাহরণে, একটি ব্যক্তিগত কী ও সার্টিফিকেট দিয়ে সাইন করার পরে সাইন করা APK my-app-release.apk -এ আউটপুট করা হয়, এগুলি একটি সিঙ্গেল KeyStore ফাইলে সেভ করা থাকে: my-release-key.jks।

    apksigner টুলে অন্যান্য সাইনিং বিকল্প কাজ করে, এর মধ্যে রয়েছে আলাদা প্রাইভেট কী ও সার্টিফিকেট ফাইল ব্যবহার করে APK ফাইল সাইন করা এবং একাধিক সাইনার ব্যবহার করে APK সাইন করা। আরও বিবরণের জন্য, apksigner রেফারেন্স দেখুন।

    মনে রাখবেন: apksigner টুল ব্যবহার করতে হলে, আপনাকে অবশ্যই Android SDK Build Tools-এর 24.0.3 বা তার পরের যেকোনও ভার্সন ইনস্টল করতে হবে। আপনি SDK ম্যানেজার ব্যবহার করে এই প্যাকেজ আপডেট করতে পারবেন।

  4. আপনার APK সাইন করা আছে কিনা তা যাচাই করুন:

    apksigner verify my-app-release.apk
    

আপনার অ্যাপে সাইন-ইন করার জন্য Gradle কনফিগার করা

মডিউল-লেভেল build.gradle.kts ফাইল খুলুন এবং storeFile, storePassword, keyAlias ও keyPassword-এর এন্ট্রি সহ signingConfigs {} ব্লক যোগ করুন, তারপর সেই অবজেক্টটি আপনার বিল্ড টাইপের signingConfig প্রপার্টিতে পাস করুন। যেমন:

Kotlin

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        create("release") {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile = file("my-release-key.jks")
            storePassword = "password"
            keyAlias = "my-alias"
            keyPassword = "password"
        }
    }
    buildTypes {
        getByName("release") {
            signingConfig = signingConfigs.getByName("release")
            ...
        }
    }
}

গ্ৰুভি

android {
    ...
    defaultConfig { ... }
    signingConfigs {
        release {
            // You need to specify either an absolute path or include the
            // keystore file in the same directory as the build.gradle file.
            storeFile file("my-release-key.jks")
            storePassword "password"
            keyAlias "my-alias"
            keyPassword "password"
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

এখন, আপনি Gradle টাস্ক ইনভোক করে অ্যাপ তৈরি করলে, Gradle আপনার অ্যাপে সই করে (এবং zipalign রান করে)।

এছাড়াও, যেহেতু আপনি নিজের সাইনিং কী দিয়ে রিলিজ বিল্ড কনফিগার করেছেন, তাই সেই বিল্ডের ধরনের জন্য "ইনস্টল" টাস্ক উপলভ্য। তাই, আপনি এমুলেটর বা ডিভাইসে রিলিজ APK তৈরি, অ্যালাইন, সাইন ও ইনস্টল করতে পারবেন, এই সবকটিই installRelease টাস্কের মাধ্যমে করা যাবে।

আপনার ব্যক্তিগত কী দিয়ে সাইন করা অ্যাপ ডিস্ট্রিবিউট করার জন্য রেডি, কিন্তু আপনাকে প্রথমে আপনার অ্যাপ প্রকাশ করার পদ্ধতি সম্পর্কে আরও পড়তে হবে এবং Google Play লঞ্চ চেকলিস্ট পর্যালোচনা করতে হবে।