ध्यान दें: Android ऐप्लिकेशन बनाने के लिए, Basel का इस्तेमाल किया जा सकता है. इन सीमाओं के बारे में भी जानकारी है. जानी-पहचानी समस्याओं की सूची देखने के लिए, GitHub टीम-Android हॉटलिस्ट पर जाएं. हालांकि, Basel टीम और ओपन सोर्स सॉफ़्टवेयर (ओएसएस) में योगदान देने वाले लोग, जानी-पहचानी समस्याओं को ठीक करने के लिए लगातार काम कर रहे हैं. हालांकि, लोगों को इस बात की जानकारी होनी चाहिए कि Android Studio, Basel प्रोजेक्ट पर आधिकारिक तौर पर काम नहीं करता.
इस ट्यूटोरियल में Basel का इस्तेमाल करके, एक आसान Android ऐप्लिकेशन बनाने का तरीका बताया गया है.
बेज़ल इन ऐप्लिकेशन का इस्तेमाल करके, Android ऐप्लिकेशन बनाने में मदद करता है Android के नियम.
यह ट्यूटोरियल Windows, macOS, और Linux का इस्तेमाल करने वाले लोगों के लिए है. इसमें यह नहीं बताया गया है कि के लिए बेज़ल या Android ऐप्लिकेशन डेवलपमेंट का अनुभव होना ज़रूरी है. आपको ये काम करने की ज़रूरत नहीं है इस ट्यूटोरियल में कोई Android कोड लिखें.
आपको क्या सीखने को मिलेगा
इस ट्यूटोरियल में आपको ये काम करने का तरीका पता चलेगा:
- Basel और Android Studio को इंस्टॉल करके, अपने एनवायरमेंट को सेट अप करें, और सैंपल प्रोजेक्ट डाउनलोड किया जा रहा है.
- Basel workspace सेट अप करें, जिसमें सोर्स कोड शामिल हो
और एक
WORKSPACE
फ़ाइल होती है, जो वर्कस्पेस डायरेक्ट्री. - ज़रूरी जानकारी के रेफ़रंस शामिल करने के लिए,
WORKSPACE
फ़ाइल को अपडेट करें डिपेंडेंसी, जैसे कि Android SDK टूल. BUILD
फ़ाइल बनाएं.- Basel की मदद से ऐप्लिकेशन बनाएं.
- किसी Android एम्युलेटर या फ़िज़िकल डिवाइस पर ऐप्लिकेशन को डिप्लॉय करें और चलाएं.
शुरू करने से पहले
Basel इंस्टॉल करें
ट्यूटोरियल शुरू करने से पहले, नीचे दिया गया सॉफ़्टवेयर इंस्टॉल करें:
- बेज़ल. इंस्टॉल करने के लिए, इंस्टॉल करने के निर्देशों का पालन करें.
- Android Studio. इंस्टॉल करने के लिए, Android डाउनलोड करने के लिए दिया गया तरीका अपनाएं Studio. SDK टूल डाउनलोड करने और अपने एनवायरमेंट को कॉन्फ़िगर करने के लिए, सेटअप विज़र्ड का इस्तेमाल करें.
- (ज़रूरी नहीं) Git. Android ऐप्लिकेशन प्रोजेक्ट डाउनलोड करने के लिए,
git
का इस्तेमाल करें.
सैंपल प्रोजेक्ट डाउनलोड करें
सैंपल प्रोजेक्ट के लिए, बेसिक Android ऐप्लिकेशन प्रोजेक्ट का इस्तेमाल Baze के उदाहरण डेटा स्टोर करने की जगह.
इस ऐप्लिकेशन में एक बटन है, जो क्लिक करने पर अभिवादन प्रिंट करता है:
पहला डायग्राम. 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 के साथ इंटिग्रेट करना
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 (कमांड प्रॉम्प्ट) | 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
फ़ाइल में यह लाइन जोड़कर, Basel को बताएं कि उसे कहां ढूंढना है:
android_ndk_repository(name = "androidndk")
android_sdk_repository
की तरह, Android एनडीके के पाथ का अनुमान लगाया जाता है
को डिफ़ॉल्ट रूप से, ANDROID_NDK_HOME
एनवायरमेंट वैरिएबल से लिया जाता है. पाथ ये काम भी कर सकता है:
इसे android_ndk_repository
पर path
एट्रिब्यूट के साथ साफ़ तौर पर बताया जाना चाहिए.
ज़्यादा जानकारी के लिए, Android नेटिव डेवलपमेंट किट का इस्तेमाल बेज़ल.
api_level
, Android API का वह वर्शन है जिसे SDK टूल और NDK
target - उदाहरण के लिए, Android 6.0 के लिए 23 और Android 7.1 के लिए 25. अगर नहीं
साफ़ तौर पर सेट है, api_level
इसके लिए डिफ़ॉल्ट तौर पर सबसे ज़्यादा उपलब्ध एपीआई लेवल पर सेट होता है
android_sdk_repository
और android_ndk_repository
.
SDK टूल और एनडीके के लिए, एपीआई लेवल को एक जैसी वैल्यू पर सेट करना ज़रूरी नहीं है. यह पेज में Android रिलीज़ से लेकर NDK-सही एपीआई लेवल तक का मैप मौजूद है.
एक BUILD फ़ाइल बनाएं
एक BUILD
फ़ाइल, कारोबारी या कंपनी के साथ संबंध की जानकारी देती है
बिल्ड आउटपुट के सेट के बीच में, जैसे कि aapt
या
javac
की क्लास फ़ाइलें और उनकी डिपेंडेंसी. ये डिपेंडेंसी
सोर्स फ़ाइलों (Java, C++) और अन्य बिल्ड आउटपुट में जोड़ी जा सकती हैं. BUILD
फ़ाइलें
को Starlark भाषा में लिखा जाता है.
BUILD
फ़ाइलें, Basel में एक कॉन्सेप्ट का हिस्सा हैं. इसे पैकेज हैरारकी के नाम से जाना जाता है.
पैकेज हैरारकी एक लॉजिकल स्ट्रक्चर होती है, जो डायरेक्ट्री को ओवरले करती है
स्ट्रक्चर को फिर से हाइलाइट कर सकते हैं. हर पैकेज
डायरेक्ट्री (और उसकी सबडायरेक्ट्री) में होती हैं, जिसमें सोर्स फ़ाइलों का मिलता-जुलता सेट मौजूद होता है
और एक BUILD
फ़ाइल. पैकेज में सभी सबडायरेक्ट्री भी शामिल होती हैं. इनमें ये निर्देश शामिल नहीं हैं
जिनमें उसकी अपनी BUILD
फ़ाइल है. पैकेज का नाम
WORKSPACE
से जुड़ी BUILD
फ़ाइल.
ध्यान दें कि Basel का पैकेज हैरारकी, Java से सैद्धांतिक तौर पर अलग है
आपके Android ऐप्लिकेशन की डायरेक्ट्री के पैकेज की हैरारकी में BUILD
फ़ाइल
स्थित है, हालांकि डायरेक्ट्री एक ही तरह से व्यवस्थित की जा सकती हैं.
इस ट्यूटोरियल में बताए गए Android ऐप्लिकेशन के लिए, src/main/
में मौजूद सोर्स फ़ाइलें
एक बेज़ल पैकेज शामिल होना चाहिए. ज़्यादा कॉम्प्लेक्स प्रोजेक्ट में कई नेस्ट किए गए प्रोजेक्ट हो सकते हैं
पैकेज.
android_library नियम जोड़ें
BUILD
फ़ाइल में, Basel के लिए अलग-अलग तरह के एलान शामिल होते हैं. कॉन्टेंट बनाने
सबसे ज़रूरी टाइप है, वह है
build नियम बनाएं, जो
Baज़ल, सोर्स के सेट से इंटरमीडिएट या फ़ाइनल सॉफ़्टवेयर आउटपुट बनाने का तरीका
फ़ाइलें या अन्य डिपेंडेंसी हो सकती हैं. Basel ने बिल्ड के दो नियम दिए हैं.
android_library
और
android_binary
, जिसका इस्तेमाल करके
एक Android ऐप्लिकेशन कैसे बनाते हैं.
इस ट्यूटोरियल के लिए, आप पहले
बेज़ल को Android लाइब्रेरी बनाने का निर्देश देने के लिए android_library
नियम
मॉड्यूल
सभी सोर्स कोड और रिसॉर्स फ़ाइलों से लिया जा सकता है. इसके बाद, आपको
Basel को 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
बिल्ड नियम में एट्रिब्यूट का एक सेट होता है, जो
ऐसी जानकारी जिसे बेज़ल को सोर्स फ़ाइलों से लाइब्रेरी मॉड्यूल बनाने के लिए ज़रूरत होती है.
ध्यान दें कि नियम का नाम 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
फ़ाइल में जोड़ा है. इसका मतलब यह है कि जब Baज़र,
इस नियम के आउटपुट में यह पहले जांच करता है कि क्या
लाइब्रेरी का greeter_activity
नियम बना दिया गया है और यह अप-टू-डेट है. अगर नहीं, तो बेज़ल
इसे बनाता है और फिर उस आउटपुट का इस्तेमाल ऐप्लिकेशन पैकेज फ़ाइल बनाने के लिए करता है.
अब फ़ाइल को सेव करें और बंद करें.
ऐप्लिकेशन बनाएं
ऐप्लिकेशन बनाने की कोशिश करें! फ़ाइल बनाने के लिए नीचे दिया गया कमांड चलाएं
android_binary
टारगेट:
bazel build //src/main:app
build
सबकमांड ने बेज़ल को यह निर्देश दिया है कि
नए कीवर्ड को टारगेट करता है. टारगेट के अंदर एक बिल्ड नियम का नाम रखा गया है
आपके फ़ाइल फ़ोल्डर से जुड़े पैकेज पाथ के साथ, एक 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
बिल्ड आउटपुट खोजना
Basel की ओर से बिल्ड ऑपरेशन के इंटरमीडिएट और फ़ाइनल, दोनों तरह के आउटपुट को एक सेट में रखा जाता है
हर उपयोगकर्ता के हिसाब से, हर फ़ाइल फ़ोल्डर के लिए आउटपुट डायरेक्ट्री. ये डायरेक्ट्री सिमलिंक की हुई हैं
प्रोजेक्ट डायरेक्ट्री के टॉप-लेवल पर मौजूद इन जगहों से, जहां
WORKSPACE
यह है:
bazel-bin
बाइनरी एक्ज़ीक्यूटेबल और रन किए जा सकने वाले अन्य बिल्ड आउटपुट को सेव करता हैbazel-genfiles
, इंटरमीडियरी सोर्स फ़ाइलों को सेव करता है, जो इनके ज़रिए जनरेट की जाती हैं बेज़ल के नियम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 |
ऐप्लिकेशन चलाएं
अब ऐप्लिकेशन को, कनेक्ट किए गए Android डिवाइस या एम्युलेटर पर डिप्लॉय किया जा सकता है. इसके लिए,
कमांड लाइन बनाने के लिए, bazel
mobile-install
कमांड का इस्तेमाल करें. इस निर्देश का इस्तेमाल,
डिवाइस से कनेक्ट करने के लिए, Android डीबग ब्रिज (adb
) का इस्तेमाल करें. आपको सेट अप करना होगा
अपने डिवाइस पर, adb
का इस्तेमाल करने के लिए, Android डीबग में दिए गए निर्देशों का पालन करें
डिप्लॉयमेंट से पहले ब्रिज करें. आपने लोगों तक पहुंचाया मुफ़्त में
Android में शामिल Android एम्युलेटर पर ऐप्लिकेशन इंस्टॉल करने का विकल्प भी चुना जा सकता है
स्टूडियो. नीचे दिए गए निर्देश को चलाने से पहले, पक्का करें कि एम्युलेटर चल रहा है.
नीचे दी गई चीज़ें डालें:
bazel mobile-install //src/main:app
इसके बाद, "Baze ट्यूटोरियल ऐप्लिकेशन" ढूँढें और लॉन्च करें:
दूसरा डायग्राम. बेज़ेल ट्यूटोरियल ऐप्लिकेशन.
बधाई हो! आपने अभी-अभी Basel का बनाया हुआ अपना पहला Android ऐप्लिकेशन इंस्टॉल किया है.
ध्यान दें कि mobile-install
सबकमांड
--incremental
फ़्लैग का इस्तेमाल इन कामों के लिए किया जा सकता है
ऐप्लिकेशन के सिर्फ़ उन हिस्सों को डिप्लॉय करें जिनमें पिछले डिप्लॉयमेंट के बाद से बदलाव हुए हैं.
यह ऐप्लिकेशन को तुरंत शुरू करने के लिए, --start_app
फ़्लैग की सुविधा भी देता है
इसे इंस्टॉल करना.
इसके बारे में और पढ़ें
ज़्यादा जानकारी के लिए, ये पेज देखें:
- GitHub पर समस्याओं की जानकारी दें
- मोबाइल-इंस्टॉल के बारे में ज़्यादा जानकारी
- Maven से AppCompat, Guava, और JUnit जैसी एक्सटर्नल डिपेंडेंसी को इंटिग्रेट करना rules_jvm_external का इस्तेमाल करने वाले डेटा स्टोर करने की जगहें
- robolectric-baze के साथ Robolectric टेस्ट करें इंटिग्रेशन.
- Android इंस्ट्रुमेंटेशन टेस्ट की मदद से अपने ऐप्लिकेशन की जांच करना
- अपने Android ऐप्लिकेशन में NDK की मदद से, C और C++ कोड को इंटिग्रेट करें
- नीचे दिए गए और बैज के उदाहरण देखें:
बिल्डिंग बनाने के लिए शुभकामनाएं!