इस ट्यूटोरियल में Basel का इस्तेमाल करके, एक आसान Android ऐप्लिकेशन बनाने का तरीका बताया गया है.
Baज़ल, Android के नियमों का इस्तेमाल करके Android ऐप्लिकेशन बनाने की सुविधा देता है.
यह ट्यूटोरियल Windows, macOS, और Linux का इस्तेमाल करने वाले लोगों के लिए है. इसके लिए, Basel या Android ऐप्लिकेशन डेवलपमेंट का अनुभव होना ज़रूरी नहीं है. इस ट्यूटोरियल में आपको कोई Android कोड लिखने की ज़रूरत नहीं है.
आप इन चीज़ों के बारे में जानेंगे
इस ट्यूटोरियल में आपको ये काम करने का तरीका पता चलेगा:
- Basel और Android Studio इंस्टॉल करके और सैंपल प्रोजेक्ट डाउनलोड करके, अपना एनवायरमेंट सेट अप करें.
- बेज़ल वर्कस्पेस सेट अप करें. इसमें ऐप्लिकेशन का सोर्स कोड शामिल है. साथ ही, ऐसी
WORKSPACE
फ़ाइल सेट अप करें जो वर्कस्पेस डायरेक्ट्री के टॉप लेवल की पहचान करती हो. - ज़रूरी बाहरी डिपेंडेंसी के रेफ़रंस शामिल करने के लिए,
WORKSPACE
फ़ाइल को अपडेट करें, जैसे कि Android SDK टूल. BUILD
फ़ाइल बनाएं.- Basel की मदद से ऐप्लिकेशन बनाएं.
- किसी Android एम्युलेटर या फ़िज़िकल डिवाइस पर ऐप्लिकेशन को डिप्लॉय करें और चलाएं.
वेब कंटेनर इंस्टॉल करने से पहले
Basel इंस्टॉल करें
ट्यूटोरियल शुरू करने से पहले, नीचे दिया गया सॉफ़्टवेयर इंस्टॉल करें:
- Bazel. इंस्टॉल करने के लिए, इंस्टॉल करने के निर्देशों का पालन करें.
- Android Studio. इंस्टॉल करने के लिए, Android Studio डाउनलोड करने का तरीका अपनाएं. SDK टूल डाउनलोड करने और अपने एनवायरमेंट को कॉन्फ़िगर करने के लिए, सेटअप विज़र्ड का इस्तेमाल करें.
- (ज़रूरी नहीं) Git. Android ऐप्लिकेशन प्रोजेक्ट डाउनलोड करने के लिए,
git
का इस्तेमाल करें.
सैंपल प्रोजेक्ट डाउनलोड करें
सैंपल प्रोजेक्ट के लिए, Baze के सैंपल रिपॉज़िटरी में बेसिक Android ऐप्लिकेशन प्रोजेक्ट का इस्तेमाल करें.
इस ऐप्लिकेशन में एक बटन है, जो क्लिक करने पर अभिवादन प्रिंट करता है:
पहला डायग्राम. Android ऐप्लिकेशन के बटन का वेलकम मैसेज.
git
की मदद से डेटा स्टोर करने की जगह का क्लोन बनाएं (या सीधे ZIP फ़ाइल को डाउनलोड करें):
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
मुख्य फ़ाइलें और डायरेक्ट्री ये हैं:
नाम | जगह |
---|---|
Android मेनिफ़ेस्ट फ़ाइलें | src/main/AndroidManifest.xml और src/main/java/com/example/bazel/AndroidManifest.xml |
Android सोर्स फ़ाइलें | src/main/java/com/example/bazel/MainActivity.java और Greeter.java |
रिसॉर्स फ़ाइल डायरेक्ट्री | src/main/java/com/example/bazel/res/ |
बेज़ल के साथ बिल्ड
फ़ाइल फ़ोल्डर सेट अप करना
वर्कस्पेस एक ऐसी डायरेक्ट्री है जिसमें एक या उससे ज़्यादा सॉफ़्टवेयर प्रोजेक्ट की सोर्स फ़ाइलें होती हैं. साथ ही, इसके रूट में WORKSPACE
फ़ाइल होती है.
WORKSPACE
फ़ाइल खाली हो सकती है या इसमें आपका प्रोजेक्ट बनाने के लिए ज़रूरी बाहरी डिपेंडेंसी के रेफ़रंस हो सकते हैं.
सबसे पहले, खाली WORKSPACE
फ़ाइल बनाने के लिए, यहां दिया गया निर्देश चलाएं:
ओएस | आदेश |
---|---|
Linux और macOS | touch WORKSPACE |
Windows (कमांड प्रॉम्प्ट) | type nul > WORKSPACE |
Windows (PowerShell) | New-Item WORKSPACE -ItemType file |
रनिंग बेज़ल
अब आप यह देख सकते हैं कि Basel का निर्देश सही तरीके से चल रहा है या नहीं:
bazel info workspace
यदि बेज़ल वर्तमान निर्देशिका का पथ प्रिंट करता है, तो आप जाने के लिए तैयार हैं! अगर
WORKSPACE
फ़ाइल मौजूद नहीं है, तो आपको गड़बड़ी का इस तरह का मैसेज दिख सकता है:
ERROR: The 'info' command is only supported from within a workspace.
Android SDK के साथ इंटिग्रेट करना
ऐप्लिकेशन बनाने के लिए, Babel को Android SDK
बिल्ड टूल
चलाना होगा. इसका मतलब है कि आपको अपनी
WORKSPACE
फ़ाइल में कुछ जानकारी जोड़नी होगी, ताकि Basel को पता चल सके कि वे कहां मिल सकते हैं.
अपनी WORKSPACE
फ़ाइल में यह लाइन जोड़ें:
android_sdk_repository(name = "androidsdk")
यह ANDROID_HOME
एनवायरमेंट वैरिएबल से बताए गए पाथ पर, Android SDK का इस्तेमाल करेगा. साथ ही, उस जगह पर इंस्टॉल किए गए बिल्ड टूल के सबसे नए वर्शन और सबसे ज़्यादा एपीआई लेवल का अपने-आप पता लगाएगा.
ANDROID_HOME
वैरिएबल को Android SDK की जगह पर सेट किया जा सकता है. Android Studio के SDK Manager का इस्तेमाल करके, इंस्टॉल किए गए SDK टूल का पाथ खोजें.
अगर SDK टूल को डिफ़ॉल्ट लोकेशन पर इंस्टॉल किया गया है, तो ANDROID_HOME
वैरिएबल को सेट करने के लिए यहां दिए गए निर्देशों का इस्तेमाल किया जा सकता है:
ओएस | आदेश |
---|---|
Linux | export ANDROID_HOME=$HOME/Android/Sdk/ |
macOS | export ANDROID_HOME=$HOME/Library/Android/sdk |
Windows (कमांड प्रॉम्प्ट) | set ANDROID_HOME=%LOCALAPPDATA%\Android\Sdk |
Windows (PowerShell) | $env:ANDROID_HOME="$env:LOCALAPPDATA\Android\Sdk" |
ऊपर दिए गए निर्देश सिर्फ़ मौजूदा शेल सेशन के लिए वैरिएबल सेट करते हैं. उन्हें हमेशा के लिए बनाने के लिए, इन निर्देशों का पालन करें:
ओएस | आदेश |
---|---|
Linux | echo "export ANDROID_HOME=$HOME/Android/Sdk/" >> ~/.bashrc |
macOS | echo "export ANDROID_HOME=$HOME/Library/Android/Sdk/" >> ~/.bashrc |
Windows (कमांड प्रॉम्प्ट) | setx ANDROID_HOME "%LOCALAPPDATA%\Android\Sdk" |
Windows (PowerShell) | [System.Environment]::SetEnvironmentVariable('ANDROID_HOME', "$env:LOCALAPPDATA\Android\Sdk", [System.EnvironmentVariableTarget]::User) |
Android SDK के ऐब्सलूट पाथ, एपीआई लेवल, और बिल्ड टूल के वर्शन की जानकारी भी साफ़ तौर पर दी जा सकती है. इसके लिए, path
, api_level
, और build_tools_version
एट्रिब्यूट को शामिल करें. अगर 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"
)
Windows पर, ध्यान दें कि path
एट्रिब्यूट में मिक्स-स्टाइल पाथ का इस्तेमाल किया जाना चाहिए. इसका मतलब है कि यह पाथ, फ़ॉरवर्ड स्लैश वाला Windows पाथ होता है:
android_sdk_repository(
name = "androidsdk",
path = "c:/path/to/Android/sdk",
)
ज़रूरी नहीं: अगर आपको Android ऐप्लिकेशन में नेटिव कोड को इकट्ठा करना है, तो आपको
Android
NDK
डाउनलोड करना होगा. साथ ही, अपनी WORKSPACE
फ़ाइल में नीचे दी गई लाइन जोड़कर, Baze को बताना होगा कि वह कोड कहां मिलेगा:
android_ndk_repository(name = "androidndk")
android_sdk_repository
की तरह ही, Android एनडीके का पाथ डिफ़ॉल्ट रूप से ANDROID_NDK_HOME
एनवायरमेंट वैरिएबल से अनुमानित होता है. पाथ को android_ndk_repository
पर path
एट्रिब्यूट का इस्तेमाल करके भी साफ़ तौर पर बताया जा सकता है.
ज़्यादा जानकारी के लिए, Baze के साथ Android नेटिव डेवलपमेंट किट का इस्तेमाल करना लेख पढ़ें.
api_level
, Android API का वह वर्शन है जिसे SDK टूल और NDK
टारगेट करते हैं - उदाहरण के लिए, Android 6.0 के लिए 23 और Android 7.1 के लिए 25. अगर साफ़ तौर पर सेट नहीं किया गया है, तो api_level
, android_sdk_repository
और android_ndk_repository
के लिए डिफ़ॉल्ट तौर पर सबसे ज़्यादा एपीआई लेवल पर सेट होता है.
SDK टूल और एनडीके के लिए, एपीआई लेवल को एक जैसी वैल्यू पर सेट करना ज़रूरी नहीं है. इस पेज में Android रिलीज़ से लेकर एनडीके पर काम करने वाले एपीआई लेवल तक का मैप मौजूद है.
एक BUILD फ़ाइल बनाएं
BUILD
फ़ाइल बिल्ड आउटपुट के सेट के बीच संबंध की जानकारी देती है. जैसे, aapt
से इकट्ठा किए गए Android रिसॉर्स या javac
की क्लास फ़ाइलें और उनकी डिपेंडेंसी. ये डिपेंडेंसी आपके फ़ाइल फ़ोल्डर में मौजूद सोर्स फ़ाइलें (Java, C++) या अन्य बिल्ड आउटपुट हो सकती हैं. BUILD
फ़ाइलें
Starlark भाषा में लिखी जाती हैं.
BUILD
फ़ाइलें Basel में एक कॉन्सेप्ट का हिस्सा हैं, जिसे पैकेज हैरारकी के नाम से जाना जाता है.
पैकेज हैरारकी एक लॉजिकल स्ट्रक्चर है, जो आपके फ़ाइल फ़ोल्डर में डायरेक्ट्री स्ट्रक्चर को ओवरले करता है. हर पैकेज एक डायरेक्ट्री और उसकी सबडायरेक्ट्री होती है. इसमें सोर्स फ़ाइलों का मिलता-जुलता सेट और एक BUILD
फ़ाइल होती है. पैकेज में सभी सबडायरेक्ट्री भी शामिल होती हैं. इनमें वे सबडायरेक्ट्री शामिल नहीं होती हैं
जिनकी BUILD
फ़ाइल होती है. पैकेज का नाम, WORKSPACE
से जुड़ी BUILD
फ़ाइल का पाथ है.
ध्यान दें कि Basel की पैकेज की हैरारकी, आपकी Android ऐप्लिकेशन डायरेक्ट्री के Java पैकेज हैरारकी से अलग है, जहां BUILD
फ़ाइल मौजूद है. हालांकि, डायरेक्ट्री एक जैसी हो सकती हैं.
इस ट्यूटोरियल में बताए गए Android ऐप्लिकेशन में, आसानी से इस्तेमाल किए जाने वाले Android ऐप्लिकेशन के लिए, src/main/
में मौजूद सोर्स फ़ाइलों में एक Babel पैकेज को भी शामिल किया गया है. ज़्यादा जटिल प्रोजेक्ट में कई नेस्ट किए गए पैकेज हो सकते हैं.
android_library नियम जोड़ें
BUILD
फ़ाइल में, Basel के लिए अलग-अलग तरह के एलान शामिल होते हैं. सबसे ज़रूरी टाइप बिल्ड रूल है, जो बैजेल को सोर्स फ़ाइलों या अन्य डिपेंडेंसी के सेट से इंटरमीडिएट या फ़ाइनल सॉफ़्टवेयर आउटपुट बनाने का तरीका बताता है. Basel ने बिल्ड के दो नियमों
android_library
और
android_binary
के बारे में बताया है. इनका इस्तेमाल Android ऐप्लिकेशन बनाने के लिए किया जा सकता है.
इस ट्यूटोरियल के लिए आपको सबसे पहले
android_library
नियम का इस्तेमाल करके, बेज़ल को ऐप्लिकेशन के सोर्स कोड और रिसॉर्स फ़ाइलों से Android लाइब्रेरी
मॉड्यूल
बनाने का निर्देश देना होगा. इसके बाद, आपको
android_binary
नियम का इस्तेमाल करके, Basel को Android ऐप्लिकेशन पैकेज बनाने का तरीका बताना होगा.
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
नियम में एट्रिब्यूट का एक ऐसा सेट होता है जो यह जानकारी देता है कि बेज़ल को सोर्स फ़ाइलों से लाइब्रेरी मॉड्यूल बनाने के लिए किस जानकारी की ज़रूरत है.
ध्यान दें कि नियम का नाम 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
नियम के आउटपुट के बारे में बताया गया है. इसका मतलब है कि जब Baze इस नियम का आउटपुट
बनाता है, तब यह सबसे पहले यह देखता है कि
greeter_activity
लाइब्रेरी के नियम का आउटपुट बनाया गया है या नहीं और वह अप-टू-डेट है या नहीं. अगर नहीं, तो Basel इसे बनाता है और फिर उस आउटपुट का इस्तेमाल ऐप्लिकेशन पैकेज फ़ाइल बनाने के लिए करता है.
अब फ़ाइल को सेव करें और बंद करें.
ऐप्लिकेशन बनाएं
ऐप्लिकेशन बनाने की कोशिश करें! android_binary
टारगेट बनाने के लिए,
यह कमांड चलाएं:
bazel build //src/main:app
build
सबकमांड, बेज़ल को अपना टारगेट बनाने का निर्देश देता है. टारगेट की जानकारी, BUILD
फ़ाइल में बनाए गए बिल्ड नियम के नाम के तौर पर दी जाती है. साथ ही, इसमें आपकी Workspace डायरेक्ट्री से जुड़े पैकेज पाथ की जानकारी भी दी जाती है. इस उदाहरण के लिए, टारगेट app
है और पैकेज पाथ
//src/main/
है.
ध्यान दें कि कभी-कभी कमांड लाइन और टारगेट के नाम पर काम करने वाली आपकी मौजूदा डायरेक्ट्री के आधार पर, पैकेज पाथ या टारगेट के नाम को हटाया जा सकता है. टारगेट लेबल और पाथ के बारे में ज़्यादा जानकारी के लिए, लेबल देखें.
Basel, ऐप्लिकेशन का सैंपल बनाना शुरू कर देगा. बिल्ड प्रोसेस के दौरान, उसका आउटपुट कुछ ऐसा दिखेगा:
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
बिल्ड आउटपुट खोजना
Baze, इंटरमीडिएट और फ़ाइनल, दोनों तरह की बिल्ड कार्रवाइयों के आउटपुट को हर उपयोगकर्ता के हिसाब से, हर वर्कस्पेस के लिए आउटपुट डायरेक्ट्री में उपलब्ध कराता है. ये डायरेक्ट्री, प्रोजेक्ट डायरेक्ट्री के टॉप-लेवल की इन जगहों से सिमलिंक की गई हैं, जहां WORKSPACE
यह है:
bazel-bin
बाइनरी एक्ज़ीक्यूटेबल और रन किए जा सकने वाले अन्य बिल्ड आउटपुट को सेव करता हैbazel-genfiles
उन इंटरमीडियरी सोर्स फ़ाइलों को स्टोर करता है जो Baze के नियमों के हिसाब से जनरेट होती हैंbazel-out
में अन्य तरह के बिल्ड आउटपुट सेव किए जाते हैं
Baज़ल, android_binary
नियम का इस्तेमाल करके जनरेट की गई Android .apk
फ़ाइल को bazel-bin/src/main
डायरेक्ट्री में सेव करता है. यहां सबडायरेक्ट्री का नाम src/main
होता है, जो Bagel पैकेज के नाम से लिया जाता है.
कमांड प्रॉम्प्ट पर, इस डायरेक्ट्री के कॉन्टेंट की सूची बनाएं और app.apk
फ़ाइल ढूंढें:
ओएस | आदेश |
---|---|
Linux और macOS | ls bazel-bin/src/main |
Windows (कमांड प्रॉम्प्ट) | dir bazel-bin\src\main |
Windows (PowerShell) | ls bazel-bin\src\main |
ऐप्लिकेशन चलाएं
अब ऐप्लिकेशन को, कनेक्ट किए गए Android डिवाइस या एम्युलेटर पर डिप्लॉय किया जा सकता है. ऐसा करने के लिए, bazel
mobile-install
कमांड का इस्तेमाल करें. यह निर्देश,
डिवाइस से संपर्क करने के लिए Android डीबग ब्रिज (adb
) का इस्तेमाल करता है. डिप्लॉयमेंट से पहले, Android डीबग ब्रिज में दिए गए निर्देशों का पालन करके, अपने डिवाइस को adb
का इस्तेमाल करने के लिए सेट अप करना होगा. Android Studio में शामिल Android एम्युलेटर पर भी ऐप्लिकेशन इंस्टॉल किया जा सकता है. नीचे दिए गए निर्देश को चलाने से पहले, पक्का करें कि एम्युलेटर चल रहा है.
नीचे दी गई चीज़ें डालें:
bazel mobile-install //src/main:app
इसके बाद, "Baze ट्यूटोरियल ऐप्लिकेशन" ढूँढें और लॉन्च करें:
दूसरा डायग्राम. बेज़ेल ट्यूटोरियल ऐप्लिकेशन.
बधाई हो! आपने अभी-अभी Basel का बनाया हुआ अपना पहला Android ऐप्लिकेशन इंस्टॉल किया है.
ध्यान दें कि mobile-install
सबकमांड --incremental
फ़्लैग के साथ भी काम करता है. इसका इस्तेमाल ऐप्लिकेशन के सिर्फ़ उन हिस्सों को डिप्लॉय करने के लिए किया जा सकता है जिनमें पिछली बार डिप्लॉयमेंट के बाद बदलाव किए गए हैं.
ऐप्लिकेशन को इंस्टॉल करने के तुरंत बाद शुरू करने के लिए, इसमें --start_app
फ़्लैग भी काम करता है.
इसके बारे में और पढ़ें
ज़्यादा जानकारी के लिए, ये पेज देखें:
- GitHub पर समस्याओं की जानकारी दें
- मोबाइल-इंस्टॉल के बारे में ज़्यादा जानकारी
- rules_jvm_external का इस्तेमाल करके, Maven रिपॉज़िटरी से AppCompat, Guava, और JUnit जैसी एक्सटर्नल डिपेंडेंसी को इंटिग्रेट करें
- robolectric-bazel इंटिग्रेशन के साथ Robolectric टेस्ट चलाएं.
- Android इंस्ट्रुमेंटेशन टेस्ट की मदद से अपने ऐप्लिकेशन की जांच करना
- अपने Android ऐप्लिकेशन में NDK की मदद से, C और C++ कोड को इंटिग्रेट करें
- Basel के यहां उदाहरण वाले कुछ प्रोजेक्ट देखें:
बिल्डिंग बनाने के लिए शुभकामनाएं!