इस ट्यूटोरियल में, Bazel का इस्तेमाल करके आसान Android ऐप्लिकेशन बनाने का तरीका बताया गया है.
बेज़ल इन ऐप्लिकेशन का इस्तेमाल करके, Android ऐप्लिकेशन बनाने में मदद करता है Android के नियम.
यह ट्यूटोरियल, Windows, macOS, और Linux इस्तेमाल करने वालों के लिए है. इसके लिए, Bazel या Android ऐप्लिकेशन डेवलपमेंट का अनुभव ज़रूरी नहीं है. आपको इस ट्यूटोरियल में कोई Android कोड लिखने की ज़रूरत नहीं है.
आपको क्या सीखने को मिलेगा
इस ट्यूटोरियल में आपको ये काम करने का तरीका पता चलेगा:
- Basel और Android Studio को इंस्टॉल करके, अपने एनवायरमेंट को सेट अप करें, और सैंपल प्रोजेक्ट डाउनलोड किया जा रहा है.
- Basel workspace सेट अप करें, जिसमें सोर्स कोड शामिल हो
और एक
WORKSPACE
फ़ाइल होती है, जो वर्कस्पेस डायरेक्ट्री. - ज़रूरी जानकारी के रेफ़रंस शामिल करने के लिए,
WORKSPACE
फ़ाइल को अपडेट करें डिपेंडेंसी, जैसे कि Android SDK टूल. BUILD
फ़ाइल बनाएं.- Basel की मदद से ऐप्लिकेशन बनाएं.
- ऐप्लिकेशन को किसी Android एम्युलेटर या फ़िज़िकल डिवाइस पर डिप्लॉय और चलाएं.
शुरू करने से पहले
Basel इंस्टॉल करें
ट्यूटोरियल शुरू करने से पहले, नीचे दिया गया सॉफ़्टवेयर इंस्टॉल करें:
- Bazel. इंस्टॉल करने के लिए, इंस्टॉल करने के निर्देशों का पालन करें.
- Android Studio. इंस्टॉल करने के लिए, Android Studio डाउनलोड करने का तरीका अपनाएं. SDK टूल डाउनलोड करने और अपने एनवायरमेंट को कॉन्फ़िगर करने के लिए, सेटअप विज़र्ड का इस्तेमाल करें.
- (ज़रूरी नहीं) Git. Android ऐप्लिकेशन प्रोजेक्ट डाउनलोड करने के लिए,
git
का इस्तेमाल करें.
सैंपल प्रोजेक्ट पाना
सैंपल प्रोजेक्ट के लिए, Bazel के उदाहरणों के डेटा स्टोर में मौजूद, 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/ |
Bazel की मदद से बिल्ड करना
फ़ाइल फ़ोल्डर सेट अप करना
फ़ाइल फ़ोल्डर एक डायरेक्ट्री होती है. इसमें एक या उससे ज़्यादा सॉफ़्टवेयर प्रोजेक्ट की सोर्स फ़ाइलें होती हैं. साथ ही, इसके रूट में WORKSPACE
फ़ाइल होती है.
WORKSPACE
फ़ाइल खाली हो सकती है या उसमें बाहरी सोर्स के रेफ़रंस हो सकते हैं
डिपेंडेंसी का इस्तेमाल करना ज़रूरी है.
सबसे पहले, खाली WORKSPACE
फ़ाइल बनाने के लिए, यहां दिया गया कमांड चलाएं:
ओएस | कमांड |
---|---|
Linux, macOS | touch WORKSPACE |
Windows (कमांड प्रॉम्प्ट) | type nul > WORKSPACE |
Windows (PowerShell) | New-Item WORKSPACE -ItemType file |
रनिंग बेज़ल
अब इस कमांड की मदद से यह देखा जा सकता है कि Bazel सही तरीके से काम कर रहा है या नहीं:
bazel info workspace
यदि बेज़ल वर्तमान निर्देशिका का पथ प्रिंट करता है, तो आप जाने के लिए तैयार हैं! अगर
WORKSPACE
फ़ाइल मौजूद नहीं है, आपको गड़बड़ी का यह मैसेज दिख सकता है:
ERROR: The 'info' command is only supported from within a workspace.
Android SDK टूल के साथ इंटिग्रेट करना
Baज़ल के लिए Android SDK टूल ज़रूरी है
बिल्ड टूल
ऐप बनाने के लिए. इसका मतलब है कि आपको अपने Merchant Center खाते में
WORKSPACE
फ़ाइल अपलोड करते हैं, ताकि Baze को पता चल सके कि उसे कहां ढूंढा जा सकता है.
अपनी WORKSPACE
फ़ाइल में यह लाइन जोड़ें:
android_sdk_repository(name = "androidsdk")
यह ANDROID_HOME
में बताए गए पाथ पर, Android SDK टूल का इस्तेमाल करेगा
वह अपने-आप ही, सबसे ऊंचे एपीआई लेवल और
उस स्थान में इंस्टॉल किए गए बिल्ड टूल का नवीनतम वर्शन हो.
ANDROID_HOME
वैरिएबल को Android SDK टूल की जगह पर सेट किया जा सकता है. Android Studio के SDK मैनेजर का इस्तेमाल करके, इंस्टॉल किए गए SDK टूल का पाथ ढूंढें.
अगर SDK टूल को डिफ़ॉल्ट लोकेशन पर इंस्टॉल किया गया है, तो इन रणनीतियों का इस्तेमाल किया जा सकता है:
ANDROID_HOME
वैरिएबल को सेट करने के लिए इन कमांड का इस्तेमाल करें:
ओएस | कमांड |
---|---|
Linux | export ANDROID_HOME=$HOME/Android/Sdk/ |
macOS | export ANDROID_HOME=$HOME/Library/Android/sdk |
Windows (Command Prompt) | 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 (Command Prompt) | 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
फ़ाइल में यह लाइन जोड़कर, बेज़ल को बताएं कि उसे कहां ढूंढना है:
android_ndk_repository(name = "androidndk")
android_sdk_repository
की तरह, Android एनडीके के पाथ का अनुमान लगाया जाता है
को डिफ़ॉल्ट रूप से, ANDROID_NDK_HOME
एनवायरमेंट वैरिएबल से लिया जाता है. पाथ की जानकारी, android_ndk_repository
पर path
एट्रिब्यूट की मदद से भी दी जा सकती है.
ज़्यादा जानकारी के लिए, Bazel के साथ Android नेटिव डेवलपमेंट किट का इस्तेमाल करना लेख पढ़ें.
api_level
, Android API का वह वर्शन है जिसे SDK टूल और NDK टूल टारगेट करते हैं. उदाहरण के लिए, Android 6.0 के लिए 23 और Android 7.1 के लिए 25. अगर api_level
को साफ़ तौर पर सेट नहीं किया जाता है, तो यह डिफ़ॉल्ट रूप से android_sdk_repository
और android_ndk_repository
के लिए, सबसे ज़्यादा उपलब्ध एपीआई लेवल पर सेट हो जाता है.
SDK टूल और NDK के लिए, एपीआई लेवल को एक ही वैल्यू पर सेट करना ज़रूरी नहीं है. यह पेज में Android रिलीज़ से लेकर NDK-सही एपीआई लेवल तक का मैप मौजूद है.
BUILD फ़ाइल बनाना
एक BUILD
फ़ाइल, कारोबारी या कंपनी के साथ संबंध की जानकारी देती है
बिल्ड आउटपुट के सेट के बीच में, जैसे कि aapt
या
javac
की क्लास फ़ाइलें और उनकी डिपेंडेंसी. ये डिपेंडेंसी
सोर्स फ़ाइलों (Java, C++) और अन्य बिल्ड आउटपुट में जोड़ी जा सकती हैं. BUILD
फ़ाइलें, Starlark नाम की भाषा में लिखी जाती हैं.
BUILD
फ़ाइलें, Bazel के एक कॉन्सेप्ट का हिस्सा हैं. इसे पैकेज हैरारकी कहा जाता है.
पैकेज हैरारकी एक लॉजिकल स्ट्रक्चर होती है, जो डायरेक्ट्री को ओवरले करती है
स्ट्रक्चर को फिर से हाइलाइट कर सकते हैं. हर पैकेज
डायरेक्ट्री (और उसकी सबडायरेक्ट्री) में होती हैं, जिसमें सोर्स फ़ाइलों का मिलता-जुलता सेट मौजूद होता है
और एक BUILD
फ़ाइल. पैकेज में सबडायरेक्ट्री भी शामिल होती हैं. हालांकि, उन सबडायरेक्ट्री को शामिल नहीं किया जाता जिनमें BUILD
फ़ाइल मौजूद होती है. पैकेज का नाम, WORKSPACE
के हिसाब से BUILD
फ़ाइल का पाथ होता है.
ध्यान दें कि Bazel के पैकेज के लेआउट की अवधारणा, आपके Android ऐप्लिकेशन की डायरेक्ट्री के Java पैकेज के लेआउट से अलग है. हालांकि, डायरेक्ट्री को एक जैसा व्यवस्थित किया जा सकता है.
इस ट्यूटोरियल में बताए गए Android ऐप्लिकेशन के लिए, src/main/
में मौजूद सोर्स फ़ाइलें
एक बेज़ल पैकेज शामिल होना चाहिए. ज़्यादा कॉम्प्लेक्स प्रोजेक्ट में कई नेस्ट किए गए प्रोजेक्ट हो सकते हैं
पैकेज.
android_library नियम जोड़ना
BUILD
फ़ाइल में, Bazel के लिए कई तरह के एलान होते हैं. सबसे ज़रूरी टाइप, बिल्ड नियम है. इससे Bazel को पता चलता है कि सोर्स फ़ाइलों या अन्य डिपेंडेंसी के सेट से, इंटरमीडिएट या फ़ाइनल सॉफ़्टवेयर आउटपुट कैसे बनाया जाए. Bazel, दो बिल्ड नियम देता है:
android_library
और
android_binary
. इनका इस्तेमाल, Android ऐप्लिकेशन बनाने के लिए किया जा सकता है.
इस ट्यूटोरियल के लिए, आप पहले
बेज़ल को Android लाइब्रेरी बनाने का निर्देश देने के लिए android_library
नियम
मॉड्यूल
सोर्स कोड और रिसॉर्स फ़ाइलों से लिया जा सकता है. इसके बाद, आपको android_binary
नियम का इस्तेमाल करके, Bazel को 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
बिल्ड नियम में एट्रिब्यूट का एक सेट होता है. इससे, सोर्स फ़ाइलों से लाइब्रेरी मॉड्यूल बनाने के लिए, 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
एट्रिब्यूट में greeter_activity
नियम के आउटपुट की जानकारी दी गई है
आपने ऊपर दी गई BUILD
फ़ाइल में जोड़ा है. इसका मतलब है कि जब Bazel इस नियम का आउटपुट बनाता है, तो वह सबसे पहले यह देखता है कि greeter_activity
लाइब्रेरी नियम का आउटपुट बनाया गया है या नहीं और वह अप-टू-डेट है या नहीं. अगर नहीं, तो बेज़ल
इसे बनाता है और फिर उस आउटपुट का इस्तेमाल ऐप्लिकेशन पैकेज फ़ाइल बनाने के लिए करता है.
अब फ़ाइल को सेव करें और बंद करें.
ऐप्लिकेशन बनाएं
ऐप्लिकेशन बनाने की कोशिश करें! android_binary
टारगेट बनाने के लिए, यह कमांड चलाएं:
bazel build //src/main:app
build
सब-कमांड, Bazel को इसके बाद दिए गए टारगेट को बनाने का निर्देश देता है. टारगेट के अंदर एक बिल्ड नियम का नाम रखा गया है
आपके फ़ाइल फ़ोल्डर से जुड़े पैकेज पाथ के साथ, एक BUILD
फ़ाइल
डायरेक्ट्री. इस उदाहरण के लिए, टारगेट app
है और पैकेज पाथ
//src/main/
.
ध्यान दें कि कमांड लाइन में मौजूद आपकी मौजूदा वर्किंग डायरेक्ट्री और टारगेट के नाम के आधार पर, कभी-कभी पैकेज पाथ या टारगेट का नाम हटाया जा सकता है. टारगेट लेबल और पाथ के बारे में ज़्यादा जानकारी के लिए, लेबल देखें.
Baज़ल, सैंपल ऐप्लिकेशन बनाना शुरू कर देगा. बिल्ड प्रोसेस के दौरान, इसका आउटपुट निम्न के समान दिखाई देगा:
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
बिल्ड आउटपुट ढूंढना
Bazel, इंटरमीडिएट और फ़ाइनल बिल्ड ऑपरेशन, दोनों के आउटपुट को हर उपयोगकर्ता और हर वर्कस्पेस के लिए बनी आउटपुट डायरेक्ट्री के सेट में डालता है. ये डायरेक्ट्री सिमलिंक की हुई हैं
प्रोजेक्ट डायरेक्ट्री के टॉप-लेवल पर मौजूद इन जगहों से, जहां
WORKSPACE
यह है:
bazel-bin
बाइनरी एक्ज़ीक्यूटेबल और रन किए जा सकने वाले अन्य बिल्ड आउटपुट को सेव करता हैbazel-genfiles
, इंटरमीडियरी सोर्स फ़ाइलों को सेव करता है. ये फ़ाइलें, Bazel नियमों से जनरेट होती हैंbazel-out
में अन्य तरह के बिल्ड आउटपुट सेव किए जाते हैं
Baज़ल, android_binary
नियम के हिसाब से जनरेट की गई Android .apk
फ़ाइल को सेव करता है
bazel-bin/src/main
डायरेक्ट्री में मौजूद है, जहां सबडायरेक्ट्री का नाम src/main
है
इसे 'बेज़ल पैकेज' के नाम से लिया गया है.
कमांड प्रॉम्प्ट पर, इस डायरेक्ट्री के कॉन्टेंट की सूची बनाएं और app.apk
ढूंढें
फ़ाइल:
ओएस | कमांड |
---|---|
Linux, macOS | ls bazel-bin/src/main |
Windows (कमांड प्रॉम्प्ट) | dir bazel-bin\src\main |
Windows (PowerShell) | ls bazel-bin\src\main |
ऐप्लिकेशन चलाना
अब bazel
mobile-install
कमांड का इस्तेमाल करके, कमांड लाइन से कनेक्ट किए गए Android डिवाइस या एमुलेटर पर ऐप्लिकेशन को डिप्लॉय किया जा सकता है. यह कमांड, डिवाइस के साथ कम्यूनिकेट करने के लिए, Android डीबग ब्रिज (adb
) का इस्तेमाल करता है. डिवाइस पर adb
का इस्तेमाल करने के लिए, आपको उसे सेट अप करना होगा. इसके लिए, डिवाइस पर Android Debug Bridge में दिए गए निर्देशों का पालन करें. आपने लोगों तक पहुंचाया मुफ़्त में
Android में शामिल Android एम्युलेटर पर ऐप्लिकेशन इंस्टॉल करने का विकल्प भी चुना जा सकता है
स्टूडियो. नीचे दिया गया निर्देश चलाने से पहले, पक्का करें कि एम्युलेटर चल रहा हो.
नीचे दी गई चीज़ें डालें:
bazel mobile-install //src/main:app
इसके बाद, "Bazel ट्यूटोरियल ऐप्लिकेशन" ढूंढें और उसे लॉन्च करें:
दूसरी इमेज. Bazel ट्यूटोरियल ऐप्लिकेशन.
बधाई हो! आपने अभी-अभी, Bazel की मदद से बनाया गया अपना पहला Android ऐप्लिकेशन इंस्टॉल किया है.
ध्यान दें कि mobile-install
सब-कमांड में --incremental
फ़्लैग का भी इस्तेमाल किया जा सकता है. इसका इस्तेमाल, ऐप्लिकेशन के सिर्फ़ उन हिस्सों को डिप्लॉय करने के लिए किया जा सकता है जिनमें पिछली बार डिप्लॉय करने के बाद बदलाव हुए हैं.
यह ऐप्लिकेशन को तुरंत शुरू करने के लिए, --start_app
फ़्लैग की सुविधा भी देता है
इसे इंस्टॉल करना.
इसके बारे में और पढ़ें
ज़्यादा जानकारी के लिए, ये पेज देखें:
- GitHub पर समस्याओं की जानकारी दें
- मोबाइल-इंस्टॉल के बारे में ज़्यादा जानकारी
- Maven से AppCompat, Guava, और JUnit जैसी एक्सटर्नल डिपेंडेंसी को इंटिग्रेट करना rules_jvm_external का इस्तेमाल करने वाले डेटा स्टोर करने की जगहें
- robolectric-bazel इंटिग्रेशन की मदद से, Robolectric टेस्ट चलाएं.
- Android इंस्ट्रुमेंटेशन टेस्ट की मदद से अपने ऐप्लिकेशन की जांच करना
- अपने Android ऐप्लिकेशन में NDK की मदद से, C और C++ कोड को इंटिग्रेट करें
- नीचे दिए गए और बेज़ेल के उदाहरण देखें:
मज़े से बनाएं!