এই টিউটোরিয়ালটি ব্যাজেল ব্যবহার করে কীভাবে একটি সাধারণ অ্যান্ড্রয়েড অ্যাপ তৈরি করতে হয় তা কভার করে।
বেজেল অ্যান্ড্রয়েড নিয়ম ব্যবহার করে অ্যান্ড্রয়েড অ্যাপ তৈরি করা সমর্থন করে।
এই টিউটোরিয়ালটি Windows, macOS এবং Linux ব্যবহারকারীদের জন্য তৈরি এবং Bazel বা Android অ্যাপ বিকাশের অভিজ্ঞতার প্রয়োজন নেই। এই টিউটোরিয়ালে আপনাকে কোন Android কোড লিখতে হবে না।
আপনি কি শিখবেন
এই টিউটোরিয়ালে আপনি শিখবেন কিভাবে:
- Bazel এবং Android Studio ইনস্টল করে এবং নমুনা প্রকল্প ডাউনলোড করে আপনার পরিবেশ সেট আপ করুন।
- একটি Bazel ওয়ার্কস্পেস সেট আপ করুন যাতে অ্যাপের জন্য সোর্স কোড থাকে এবং একটি
WORKSPACE
ফাইল থাকে যা ওয়ার্কস্পেস ডিরেক্টরির শীর্ষ স্তর চিহ্নিত করে৷ - Android SDK-এর মতো প্রয়োজনীয় বাহ্যিক নির্ভরতাগুলির রেফারেন্সগুলি ধারণ করতে
WORKSPACE
ফাইলটি আপডেট করুন৷ - একটি
BUILD
ফাইল তৈরি করুন। - Bazel দিয়ে অ্যাপটি তৈরি করুন।
- একটি অ্যান্ড্রয়েড এমুলেটর বা শারীরিক ডিভাইসে অ্যাপটি স্থাপন এবং চালান।
তুমি শুরু করার আগে
Bazel ইনস্টল করুন
আপনি টিউটোরিয়াল শুরু করার আগে, নিম্নলিখিত সফ্টওয়্যার ইনস্টল করুন:
- বাজেল। ইনস্টল করতে, ইনস্টলেশন নির্দেশাবলী অনুসরণ করুন।
- অ্যান্ড্রয়েড স্টুডিও। ইনস্টল করতে, Android স্টুডিও ডাউনলোড করার ধাপগুলি অনুসরণ করুন। SDK ডাউনলোড করতে এবং আপনার পরিবেশ কনফিগার করতে সেটআপ উইজার্ডটি চালান।
- (ঐচ্ছিক) গিট। অ্যান্ড্রয়েড অ্যাপ প্রকল্প ডাউনলোড করতে
git
ব্যবহার করুন।
নমুনা প্রকল্প পান
নমুনা প্রকল্পের জন্য, Bazel এর উদাহরণ সংগ্রহস্থলে একটি মৌলিক Android অ্যাপ প্রকল্প ব্যবহার করুন।
এই অ্যাপটিতে একটি একক বোতাম রয়েছে যা ক্লিক করলে একটি অভিবাদন প্রিন্ট করে:
চিত্র 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
এর পরে, "বেজেল টিউটোরিয়াল অ্যাপ" খুঁজুন এবং চালু করুন:
চিত্র 2. Bazel টিউটোরিয়াল অ্যাপ।
অভিনন্দন! আপনি এইমাত্র আপনার প্রথম Bazel-নির্মিত Android অ্যাপ ইনস্টল করেছেন৷
মনে রাখবেন যে mobile-install
--incremental
সমর্থন করে যা অ্যাপের শুধুমাত্র সেই অংশগুলি স্থাপন করতে ব্যবহার করা যেতে পারে যা শেষ স্থাপনার পর থেকে পরিবর্তিত হয়েছে।
এটি ইনস্টল করার সাথে সাথেই অ্যাপটি শুরু করতে --start_app
সমর্থন করে।
আরও পড়া
আরো বিস্তারিত জানার জন্য, এই পৃষ্ঠাগুলি দেখুন:
- গিটহাবে সমস্যা খুলুন
- মোবাইল-ইনস্টল সম্পর্কে আরও তথ্য
- Rules_jvm_external ব্যবহার করে Maven সংগ্রহস্থল থেকে AppCompat, Guava এবং JUnit এর মত বাহ্যিক নির্ভরতা একত্রিত করুন
- রোবোলেক্ট্রিক-বেজেল ইন্টিগ্রেশন সহ রোবোলেক্ট্রিক পরীক্ষা চালান।
- অ্যান্ড্রয়েড ইন্সট্রুমেন্টেশন পরীক্ষার মাধ্যমে আপনার অ্যাপ পরীক্ষা করা হচ্ছে
- NDK- এর সাথে আপনার Android অ্যাপে C এবং C++ কোড একীভূত করা হচ্ছে
- আরও Bazel উদাহরণ প্রকল্প দেখুন:
শুভ বিল্ডিং!