বেজেল টিউটোরিয়াল: একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করুন

এই টিউটোরিয়ালটি ব্যাজেল ব্যবহার করে কীভাবে একটি সাধারণ অ্যান্ড্রয়েড অ্যাপ তৈরি করতে হয় তা কভার করে।

বেজেল অ্যান্ড্রয়েড নিয়ম ব্যবহার করে অ্যান্ড্রয়েড অ্যাপ তৈরি করা সমর্থন করে।

এই টিউটোরিয়ালটি Windows, macOS এবং Linux ব্যবহারকারীদের জন্য তৈরি এবং Bazel বা Android অ্যাপ বিকাশের অভিজ্ঞতার প্রয়োজন নেই। এই টিউটোরিয়ালে আপনাকে কোন Android কোড লিখতে হবে না।

আপনি কি শিখবেন

এই টিউটোরিয়ালে আপনি শিখবেন কিভাবে:

  • Bazel এবং Android Studio ইনস্টল করে এবং নমুনা প্রকল্প ডাউনলোড করে আপনার পরিবেশ সেট আপ করুন।
  • একটি Bazel ওয়ার্কস্পেস সেট আপ করুন যাতে অ্যাপের জন্য সোর্স কোড থাকে এবং একটি WORKSPACE ফাইল থাকে যা ওয়ার্কস্পেস ডিরেক্টরির শীর্ষ স্তর চিহ্নিত করে৷
  • Android SDK-এর মতো প্রয়োজনীয় বাহ্যিক নির্ভরতাগুলির রেফারেন্সগুলি ধারণ করতে WORKSPACE ফাইলটি আপডেট করুন৷
  • একটি BUILD ফাইল তৈরি করুন।
  • Bazel দিয়ে অ্যাপটি তৈরি করুন।
  • একটি অ্যান্ড্রয়েড এমুলেটর বা শারীরিক ডিভাইসে অ্যাপটি স্থাপন এবং চালান।

তুমি শুরু করার আগে

Bazel ইনস্টল করুন

আপনি টিউটোরিয়াল শুরু করার আগে, নিম্নলিখিত সফ্টওয়্যার ইনস্টল করুন:

  • বাজেল। ইনস্টল করতে, ইনস্টলেশন নির্দেশাবলী অনুসরণ করুন।
  • অ্যান্ড্রয়েড স্টুডিও। ইনস্টল করতে, Android স্টুডিও ডাউনলোড করার ধাপগুলি অনুসরণ করুন। SDK ডাউনলোড করতে এবং আপনার পরিবেশ কনফিগার করতে সেটআপ উইজার্ডটি চালান।
  • (ঐচ্ছিক) গিট। অ্যান্ড্রয়েড অ্যাপ প্রকল্প ডাউনলোড করতে git ব্যবহার করুন।

নমুনা প্রকল্প পান

নমুনা প্রকল্পের জন্য, Bazel এর উদাহরণ সংগ্রহস্থলে একটি মৌলিক Android অ্যাপ প্রকল্প ব্যবহার করুন।

এই অ্যাপটিতে একটি একক বোতাম রয়েছে যা ক্লিক করলে একটি অভিবাদন প্রিন্ট করে:

Button greeting

চিত্র 1. অ্যান্ড্রয়েড অ্যাপ বোতাম শুভেচ্ছা।

git দিয়ে সংগ্রহস্থল ক্লোন করুন (বা সরাসরি জিপ ফাইল ডাউনলোড করুন ):

git clone https://github.com/bazelbuild/examples

এই টিউটোরিয়ালের নমুনা প্রকল্পটি examples/android/tutorial এ রয়েছে। টিউটোরিয়ালের বাকি অংশের জন্য, আপনি এই ডিরেক্টরিতে কমান্ডগুলি চালাবেন।

উৎস ফাইল পর্যালোচনা

অ্যাপটির জন্য সোর্স ফাইলগুলো দেখে নিন।

.
├── README.md
└── src
    └── main
        ├── AndroidManifest.xml
        └── java
            └── com
                └── example
                    └── bazel
                        ├── AndroidManifest.xml
                        ├── Greeter.java
                        ├── MainActivity.java
                        └── res
                            ├── layout
                            │   └── activity_main.xml
                            └── values
                                ├── colors.xml
                                └── strings.xml

মূল ফাইল এবং ডিরেক্টরি হল:

নাম অবস্থান
অ্যান্ড্রয়েড ম্যানিফেস্ট ফাইল src/main/AndroidManifest.xml এবং src/main/java/com/example/bazel/AndroidManifest.xml
অ্যান্ড্রয়েড সোর্স ফাইল src/main/java/com/example/bazel/MainActivity.java এবং Greeter.java
রিসোর্স ফাইল ডিরেক্টরি src/main/java/com/example/bazel/res/

বেজেল দিয়ে তৈরি করুন

ওয়ার্কস্পেস সেট আপ করুন

একটি ওয়ার্কস্পেস হল একটি ডিরেক্টরি যাতে এক বা একাধিক সফ্টওয়্যার প্রকল্পের জন্য সোর্স ফাইল থাকে এবং এর মূলে একটি WORKSPACE ফাইল থাকে।

WORKSPACE ফাইলটি খালি হতে পারে বা আপনার প্রকল্প তৈরি করার জন্য প্রয়োজনীয় বাহ্যিক নির্ভরতার উল্লেখ থাকতে পারে।

প্রথমে, একটি খালি WORKSPACE ফাইল তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

ওএস আদেশ
লিনাক্স, ম্যাকোস touch WORKSPACE
উইন্ডোজ (কমান্ড প্রম্পট) type nul > WORKSPACE
উইন্ডোজ (পাওয়ারশেল) New-Item WORKSPACE -ItemType file

Bazel চলমান

আপনি এখন কমান্ড দিয়ে Bazel সঠিকভাবে চলছে কিনা তা পরীক্ষা করতে পারেন:

bazel info workspace

যদি Bazel বর্তমান ডিরেক্টরির পথ প্রিন্ট করে, আপনি যেতে ভাল! WORKSPACE ফাইলটি বিদ্যমান না থাকলে, আপনি একটি ত্রুটি বার্তা দেখতে পারেন যেমন:

ERROR: The 'info' command is only supported from within a workspace.

Android SDK-এর সাথে একীভূত করুন

অ্যাপটি তৈরি করতে Bazel-এর Android SDK বিল্ড টুল চালাতে হবে। এর মানে হল যে আপনাকে আপনার WORKSPACE ফাইলে কিছু তথ্য যোগ করতে হবে যাতে Bazel জানতে পারে সেগুলি কোথায় পাওয়া যাবে।

আপনার WORKSPACE ফাইলে নিম্নলিখিত লাইন যোগ করুন:

android_sdk_repository(name = "androidsdk")

এটি ANDROID_HOME এনভায়রনমেন্ট ভেরিয়েবল দ্বারা নির্দেশিত পথে Android SDK ব্যবহার করবে এবং স্বয়ংক্রিয়ভাবে সর্বোচ্চ API স্তর এবং সেই অবস্থানের মধ্যে ইনস্টল করা বিল্ড টুলগুলির সর্বশেষ সংস্করণ সনাক্ত করবে৷

আপনি Android SDK-এর অবস্থানে ANDROID_HOME ভেরিয়েবল সেট করতে পারেন৷ অ্যান্ড্রয়েড স্টুডিওর SDK ম্যানেজার ব্যবহার করে ইনস্টল করা SDK-এর পথ খুঁজুন। ধরে নিই যে SDK ডিফল্ট অবস্থানে ইনস্টল করা আছে, আপনি ANDROID_HOME ভেরিয়েবল সেট করতে নিম্নলিখিত কমান্ডগুলি ব্যবহার করতে পারেন:

ওএস আদেশ
লিনাক্স export ANDROID_HOME=$HOME/Android/Sdk/
ম্যাক অপারেটিং সিস্টেম export ANDROID_HOME=$HOME/Library/Android/sdk
উইন্ডোজ (কমান্ড প্রম্পট) set ANDROID_HOME=%LOCALAPPDATA%\Android\Sdk
উইন্ডোজ (পাওয়ারশেল) $env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk"

উপরের কমান্ডগুলি শুধুমাত্র বর্তমান শেল সেশনের জন্য পরিবর্তনশীল সেট করে। তাদের স্থায়ী করতে, নিম্নলিখিত কমান্ডগুলি চালান:

ওএস আদেশ
লিনাক্স echo "export ANDROID_HOME=$HOME/Android/Sdk/" >> ~/.bashrc
ম্যাক অপারেটিং সিস্টেম echo "export ANDROID_HOME=$HOME/Library/Android/Sdk/" >> ~/.bashrc
উইন্ডোজ (কমান্ড প্রম্পট) setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk"
উইন্ডোজ (পাওয়ারশেল) [System.Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", [System.EnvironmentVariableTarget]::User)

এছাড়াও আপনি path , api_level , এবং build_tools_version বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে Android SDK-এর পরম পথ, API স্তর, এবং বিল্ড সরঞ্জামগুলির সংস্করণ ব্যবহার করার জন্য স্পষ্টভাবে নির্দিষ্ট করতে পারেন৷ api_level এবং build_tools_version নির্দিষ্ট না থাকলে, android_sdk_repository নিয়মটি SDK-এ উপলব্ধ সংশ্লিষ্ট সর্বশেষ সংস্করণ ব্যবহার করবে। আপনি এই বৈশিষ্ট্যগুলির যেকোনো সমন্বয় নির্দিষ্ট করতে পারেন, যতক্ষণ না তারা SDK-তে উপস্থিত থাকে, উদাহরণস্বরূপ:

android_sdk_repository(
    name = "androidsdk",
    path = "/path/to/Android/sdk",
    api_level = 25,
    build_tools_version = "30.0.3"
)

উইন্ডোজে, লক্ষ্য করুন যে path অ্যাট্রিবিউটটি অবশ্যই মিশ্র-স্টাইল পাথ ব্যবহার করবে, অর্থাৎ, ফরোয়ার্ড স্ল্যাশ সহ একটি উইন্ডোজ পাথ:

android_sdk_repository(
    name = "androidsdk",
    path = "c:/path/to/Android/sdk",
)

ঐচ্ছিক: আপনি যদি আপনার অ্যান্ড্রয়েড অ্যাপে নেটিভ কোড কম্পাইল করতে চান, তাহলে আপনাকে অ্যান্ড্রয়েড এনডিকে ডাউনলোড করতে হবে এবং আপনার WORKSPACE ফাইলে নিম্নলিখিত লাইনটি যোগ করে এটি কোথায় পাবেন তা Bazel-কে জানাতে হবে:

android_ndk_repository(name = "androidndk")

android_sdk_repository এর মতই, Android NDK-এর পথ ডিফল্টরূপে ANDROID_NDK_HOME এনভায়রনমেন্ট ভেরিয়েবল থেকে অনুমান করা হয়েছে। পাথটি android_ndk_repository এ একটি path অ্যাট্রিবিউট দিয়েও স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে।

আরও তথ্যের জন্য, Bazel এর সাথে Android নেটিভ ডেভেলপমেন্ট কিট ব্যবহার করে পড়ুন।

api_level হল Android API এর একটি সংস্করণ যা SDK এবং NDK লক্ষ্য করে - উদাহরণস্বরূপ, Android 6.0 এর জন্য 23 এবং Android 7.1 এর জন্য 25৷ যদি স্পষ্টভাবে সেট করা না থাকে, তাহলে android_sdk_repository এবং android_ndk_repository এর জন্য api_level সর্বোচ্চ উপলব্ধ API স্তরে ডিফল্ট হয়।

SDK এবং NDK-এর জন্য API স্তরগুলিকে একই মান সেট করার প্রয়োজন নেই৷ এই পৃষ্ঠায় Android রিলিজ থেকে NDK-সমর্থিত API স্তর পর্যন্ত একটি মানচিত্র রয়েছে।

একটি বিল্ড ফাইল তৈরি করুন

একটি BUILD ফাইল বিল্ড আউটপুটগুলির একটি সেটের মধ্যে সম্পর্ক বর্ণনা করে, যেমন aapt থেকে কম্পাইল করা অ্যান্ড্রয়েড সংস্থান বা javac থেকে ক্লাস ফাইল এবং তাদের নির্ভরতা। এই নির্ভরতাগুলি আপনার ওয়ার্কস্পেস বা অন্যান্য বিল্ড আউটপুটগুলিতে সোর্স ফাইল (জাভা, সি++) হতে পারে। BUILD ফাইলগুলি স্টারলার্ক নামে একটি ভাষায় লেখা হয়।

BUILD ফাইলগুলি ব্যাজেলের একটি ধারণার অংশ যা প্যাকেজ শ্রেণিবিন্যাস নামে পরিচিত। প্যাকেজ শ্রেণিবিন্যাস হল একটি যৌক্তিক কাঠামো যা আপনার কর্মক্ষেত্রে ডিরেক্টরি কাঠামোকে ওভারলে করে। প্রতিটি প্যাকেজ হল একটি ডিরেক্টরি (এবং এর সাব-ডিরেক্টরি) যাতে সোর্স ফাইলের একটি সম্পর্কিত সেট এবং একটি BUILD ফাইল থাকে। প্যাকেজটি তাদের নিজস্ব BUILD ফাইল ধারণ করে এমন সাবডিরেক্টরিগুলি বাদ দিয়ে যেকোন সাবডিরেক্টরিগুলিও অন্তর্ভুক্ত করে৷ প্যাকেজ নামটি WORKSPACE এর সাথে সম্পর্কিত BUILD ফাইলের পথ।

মনে রাখবেন যে Bazel-এর প্যাকেজ অনুক্রমটি আপনার Android App ডিরেক্টরির Java প্যাকেজ অনুক্রমের থেকে ধারণাগতভাবে আলাদা যেখানে BUILD ফাইলটি অবস্থিত, যদিও ডিরেক্টরিগুলি একইভাবে সংগঠিত হতে পারে।

এই টিউটোরিয়ালে সহজ অ্যান্ড্রয়েড অ্যাপের জন্য, src/main/ -এ সোর্স ফাইলগুলি একটি একক Bazel প্যাকেজ নিয়ে গঠিত। একটি আরও জটিল প্রকল্পে অনেক নেস্টেড প্যাকেজ থাকতে পারে।

একটি android_library নিয়ম যোগ করুন

একটি BUILD ফাইলে Bazel-এর জন্য বিভিন্ন ধরনের ঘোষণা রয়েছে। সবচেয়ে গুরুত্বপূর্ণ ধরন হল বিল্ড রুল , যা Bazel কে বলে যে কিভাবে সোর্স ফাইল বা অন্যান্য নির্ভরতা থেকে একটি মধ্যবর্তী বা চূড়ান্ত সফ্টওয়্যার আউটপুট তৈরি করতে হয়। Bazel দুটি বিল্ড নিয়ম প্রদান করে, android_library এবং android_binary , যা আপনি একটি Android অ্যাপ তৈরি করতে ব্যবহার করতে পারেন।

এই টিউটোরিয়ালটির জন্য, আপনি প্রথমে android_library নিয়মটি ব্যবহার করবেন যাতে Bazel কে অ্যাপ সোর্স কোড এবং রিসোর্স ফাইল থেকে একটি Android লাইব্রেরি মডিউল তৈরি করতে বলবেন। তারপরে আপনি বেজেলকে কীভাবে Android অ্যাপ্লিকেশন প্যাকেজ তৈরি করবেন তা জানাতে android_binary নিয়মটি ব্যবহার করবেন।

src/main/java/com/example/bazel ডিরেক্টরিতে একটি নতুন BUILD ফাইল তৈরি করুন এবং একটি নতুন android_library লক্ষ্য ঘোষণা করুন:

src/main/java/com/example/bazel/BUILD :

package(
    default_visibility = ["//src:__subpackages__"],
)

android_library(
    name = "greeter_activity",
    srcs = [
        "Greeter.java",
        "MainActivity.java",
    ],
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
)

android_library বিল্ড নিয়মে বৈশিষ্ট্যগুলির একটি সেট রয়েছে যা সোর্স ফাইলগুলি থেকে একটি লাইব্রেরি মডিউল তৈরি করতে Bazel-এর প্রয়োজনীয় তথ্যগুলি নির্দিষ্ট করে৷ আরও উল্লেখ্য যে নিয়মটির নাম হল greeter_activity । আপনি android_binary নিয়মে নির্ভরতা হিসাবে এই নামটি ব্যবহার করে নিয়মটি উল্লেখ করবেন।

একটি android_binary নিয়ম যোগ করুন

android_binary নিয়ম আপনার অ্যাপের জন্য Android অ্যাপ্লিকেশন প্যাকেজ ( .apk ফাইল) তৈরি করে।

src/main/ ডিরেক্টরিতে একটি নতুন BUILD ফাইল তৈরি করুন এবং একটি নতুন android_binary লক্ষ্য ঘোষণা করুন:

src/main/BUILD :

android_binary(
    name = "app",
    manifest = "AndroidManifest.xml",
    deps = ["//src/main/java/com/example/bazel:greeter_activity"],
)

এখানে, deps অ্যাট্রিবিউটটি উপরের BUILD ফাইলে আপনার যোগ করা greeter_activity নিয়মের আউটপুট উল্লেখ করে। এর মানে হল যে যখন Bazel এই নিয়মের আউটপুট তৈরি করে তখন এটি প্রথমে চেক করে যে greeter_activity লাইব্রেরি নিয়মের আউটপুট তৈরি করা হয়েছে এবং আপ-টু-ডেট কিনা। যদি না হয়, Bazel এটি তৈরি করে এবং তারপর অ্যাপ্লিকেশন প্যাকেজ ফাইল তৈরি করতে সেই আউটপুটটি ব্যবহার করে।

এখন, ফাইলটি সংরক্ষণ করুন এবং বন্ধ করুন।

অ্যাপটি তৈরি করুন

অ্যাপ তৈরি করার চেষ্টা করুন! android_binary টার্গেট তৈরি করতে নিম্নলিখিত কমান্ডটি চালান:

bazel build //src/main:app

build সাবকমান্ড বেজেলকে নিম্নলিখিত লক্ষ্য তৈরি করতে নির্দেশ দেয়। আপনার ওয়ার্কস্পেস ডিরেক্টরির সাথে সম্পর্কিত প্যাকেজ পাথ সহ একটি BUILD ফাইলের ভিতরে একটি বিল্ড নিয়মের নাম হিসাবে লক্ষ্যটি নির্দিষ্ট করা হয়েছে। এই উদাহরণের জন্য, লক্ষ্য হল app এবং প্যাকেজ পাথ হল //src/main/

লক্ষ্য করুন যে আপনি কখনও কখনও প্যাকেজ পাথ বা লক্ষ্যের নাম বাদ দিতে পারেন, কমান্ড লাইনে আপনার বর্তমান কার্যকারী ডিরেক্টরি এবং লক্ষ্যের নামের উপর নির্ভর করে। লক্ষ্য লেবেল এবং পাথ সম্পর্কে আরও বিশদ বিবরণের জন্য, লেবেল দেখুন।

বেজেল নমুনা অ্যাপ তৈরি করা শুরু করবে। বিল্ড প্রক্রিয়া চলাকালীন, এর আউটপুট নিম্নলিখিতগুলির মতো প্রদর্শিত হবে:

INFO: Analysed target //src/main:app (0 packages loaded, 0 targets configured).
INFO: Found 1 target...
Target //src/main:app up-to-date:
  bazel-bin/src/main/app_deploy.jar
  bazel-bin/src/main/app_unsigned.apk
  bazel-bin/src/main/app.apk

বিল্ড আউটপুট সনাক্ত করুন

ব্যাজেল প্রতি-ব্যবহারকারী, প্রতি-ওয়ার্কস্পেস আউটপুট ডিরেক্টরিগুলির একটি সেটে মধ্যবর্তী এবং চূড়ান্ত উভয় বিল্ড অপারেশনের আউটপুট রাখে। এই ডিরেক্টরিগুলি প্রজেক্ট ডিরেক্টরির শীর্ষ-স্তরের নিম্নলিখিত অবস্থানগুলি থেকে সিমলিঙ্ক করা হয়েছে, যেখানে WORKSPACE হল:

  • bazel-bin বাইনারি এক্সিকিউটেবল এবং অন্যান্য রানেবল বিল্ড আউটপুট সঞ্চয় করে
  • bazel-genfiles মধ্যস্থতাকারী উৎস ফাইল সংরক্ষণ করে যেগুলি Bazel নিয়ম দ্বারা উত্পন্ন হয়
  • bazel-out অন্যান্য ধরনের বিল্ড আউটপুট সঞ্চয় করে

Bazel android_binary নিয়ম ব্যবহার করে তৈরি করা Android .apk ফাইলটিকে bazel-bin/src/main ডিরেক্টরিতে সংরক্ষণ করে, যেখানে সাবডিরেক্টরি নাম src/main Bazel প্যাকেজের নাম থেকে নেওয়া হয়েছে।

একটি কমান্ড প্রম্পটে, এই ডিরেক্টরির বিষয়বস্তু তালিকাভুক্ত করুন এবং app.apk ফাইলটি খুঁজুন:

ওএস আদেশ
লিনাক্স, ম্যাকোস ls bazel-bin/src/main
উইন্ডোজ (কমান্ড প্রম্পট) dir bazel-bin\src\main
উইন্ডোজ (পাওয়ারশেল) ls bazel-bin\src\main

অ্যাপটি চালান

আপনি এখন bazel mobile-install কমান্ড ব্যবহার করে কমান্ড লাইন থেকে একটি সংযুক্ত Android ডিভাইস বা এমুলেটরে অ্যাপটি স্থাপন করতে পারেন। এই কমান্ডটি ডিভাইসের সাথে যোগাযোগ করতে Android ডিবাগ ব্রিজ ( adb ) ব্যবহার করে। ডিপ্লয়মেন্ট করার আগে Android ডিবাগ ব্রিজে নির্দেশাবলী অনুসরণ করে adb ব্যবহার করার জন্য আপনাকে অবশ্যই আপনার ডিভাইস সেট আপ করতে হবে। আপনি অ্যান্ড্রয়েড স্টুডিওতে অন্তর্ভুক্ত অ্যান্ড্রয়েড এমুলেটরে অ্যাপটি ইনস্টল করতেও বেছে নিতে পারেন। নিচের কমান্ডটি কার্যকর করার আগে নিশ্চিত করুন যে এমুলেটর চলছে।

নিম্নলিখিত প্রবেশ:

bazel mobile-install //src/main:app

এর পরে, "বেজেল টিউটোরিয়াল অ্যাপ" খুঁজুন এবং চালু করুন:

Bazel tutorial app

চিত্র 2. Bazel টিউটোরিয়াল অ্যাপ।

অভিনন্দন! আপনি এইমাত্র আপনার প্রথম Bazel-নির্মিত Android অ্যাপ ইনস্টল করেছেন৷

মনে রাখবেন যে mobile-install --incremental সমর্থন করে যা অ্যাপের শুধুমাত্র সেই অংশগুলি স্থাপন করতে ব্যবহার করা যেতে পারে যা শেষ স্থাপনার পর থেকে পরিবর্তিত হয়েছে।

এটি ইনস্টল করার সাথে সাথেই অ্যাপটি শুরু করতে --start_app সমর্থন করে।

আরও পড়া

আরো বিস্তারিত জানার জন্য, এই পৃষ্ঠাগুলি দেখুন:

শুভ বিল্ডিং!