Android के नियम

नियम

android_binary

android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

Android ऐप्लिकेशन पैकेज फ़ाइलें (.apk) बनाती है.

इंप्लिसिट आउटपुट टारगेट

  • name.apk: Android ऐप्लिकेशन पैकेज फ़ाइल को डीबग कुंजियों के साथ साइन किया गया है और zipaligned हैं, तो इसका इस्तेमाल आपके ऐप्लिकेशन को डेवलप करने और डीबग करने के लिए किया जा सकता है. डीबग कुंजियों से साइन इन होने पर, ऐप्लिकेशन को रिलीज़ नहीं किया जा सकता.
  • name_unsigned.apk: जिसे रिलीज़ करने से पहले रिलीज़ कुंजियों से हस्ताक्षर किया जा सकता है सार्वजनिक.
  • name_deploy.jar: एक Java संग्रह जिसमें इस टारगेट का अस्थायी तौर पर बंद होना.

    डिप्लॉय जार में वे सभी क्लास शामिल हैं जो किसी क्लासलोडर जिसने इस टारगेट के रनटाइम क्लासपाथ को खोजा शुरू से आखिर तक.

  • name_proguard.jar: एक Java संग्रह जिसमें शामिल है नतीजे के तौर पर, ProGuard को name_deploy.jar. यह आउटपुट सिर्फ़ तब जनरेट होता है, जब proguard_specs एट्रिब्यूट बताया गया है.
  • name_proguard.map: इसका एक मैपिंग फ़ाइल नतीजा name_deploy.jar पर ProGuard को चला रही हूँ. यह आउटपुट सिर्फ़ तब जनरेट होता है, जब proguard_specs एट्रिब्यूट तय किया गया और proguard_generate_mapping या shrink_resources सेट किया गया है.

उदाहरण

Android के नियमों के उदाहरण, यहां दी गई examples/android डायरेक्ट्री में मिल सकते हैं: बेज़ल सोर्स ट्री.

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

deps

List of labels; optional

बाइनरी टारगेट से लिंक की जाने वाली अन्य लाइब्रेरी की सूची. इस तरह की लाइब्रेरी इस्तेमाल की जा सकती हैं: android_library, android कंस्ट्रेंट और java_library के साथ cc_library के लिए .so नेटिव लाइब्रेरी को रैप करना या बनाना Android टारगेट प्लैटफ़ॉर्म.
srcs

List of labels; optional

टारगेट बनाने के लिए प्रोसेस की जाने वाली सोर्स फ़ाइलों की सूची.

.java टाइप की srcs फ़ाइलें कंपाइल की गई हैं. सिर्फ़ समझने के लिए, किसी साइट का नाम srcs में .java सोर्स फ़ाइल जनरेट की गई. इसके बजाय, srcs में डिपेंडेंट-ऑन नियम का नाम इस तरह रखें जिनकी जानकारी नीचे दी गई है.

.srcjar टाइप की srcs फ़ाइलें पैक नहीं की गई हैं और कंपाइल किया गया. (यह तब काम आता है, जब आपको .java फ़ाइलों का सेट जनरेट करने की ज़रूरत हो सामान्य या बिल्ड एक्सटेंशन शामिल करें.)

assets

List of labels; optional

पैकेज की जाने वाली ऐसेट की सूची. आम तौर पर, यह फ़ाइल के तहत आने वाली सभी फ़ाइलों का glob होता है assets डायरेक्ट्री. आप अन्य नियमों का संदर्भ भी दे सकते हैं (ऐसा कोई भी नियम जो फ़ाइलें) या अन्य पैकेज में निर्यात की गई फ़ाइलें होती हैं, बशर्ते वे सभी फ़ाइलें assets_dir डायरेक्ट्री, उससे जुड़े पैकेज में है.
assets_dir

String; optional

assets में फ़ाइलों का पाथ देने वाली स्ट्रिंग. assets और assets_dir, पैकेज के बारे में बताते हैं ऐसेट और दोनों में से कोई एक एट्रिब्यूट दिया जाना चाहिए या फिर कोई भी नहीं दिया जाना चाहिए.
crunch_png

Boolean; optional; default is True

PNG फ़ॉर्मैट में क्रंच करें या न करें. यह नौ पैच प्रोसेसिंग से अलग है, जो हमेशा हो गया. यह समाधान aapt Bug ने aapt2 में ठीक किया गया है.
custom_package

String; optional

Java पैकेज, जिसके लिए java सोर्स जनरेट किए जाएंगे. डिफ़ॉल्ट रूप से, पैकेज का अनुमान उस डायरेक्ट्री से लगाया जाता है जहां BUILD फ़ाइल होती है जिसमें नियम शामिल है. कोई दूसरा पैकेज तय किया जा सकता है, लेकिन यह है बहुत ज़्यादा नहीं होता है, क्योंकि इसकी वजह से क्लासपाथ के विरोधाभास हो सकते हैं लाइब्रेरी जिनका पता सिर्फ़ रनटाइम के दौरान लगाया जा सकेगा.
debug_key

Label; optional; default is @bazel_tools//tools/android:debug_keystore

डीबग कीस्टोर वाली फ़ाइल, जिसका इस्तेमाल डीबग APK को साइन करने के लिए किया जाना है. आम तौर पर, आप ऐसा नहीं करते डिफ़ॉल्ट कुंजी के बजाय किसी अन्य कुंजी का उपयोग करना चाहते हैं, इसलिए इस विशेषता को छोड़ देना चाहिए.

चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता.

debug_signing_keys

List of labels; optional

डीबग APK पर साइन करने के लिए इस्तेमाल की जाने वाली फ़ाइलों की सूची, डीबग कीस्टोर. आम तौर पर, आप ऐसा नहीं करते डिफ़ॉल्ट कुंजी के अलावा अन्य कुंजियों का इस्तेमाल करना चाहते हैं, इसलिए इस विशेषता को छोड़ देना चाहिए.

चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता.

debug_signing_lineage_file

Label; optional

इस फ़ाइल मेंdebug_sign_keys के लिए साइनिंग लीनिएज है. आम तौर पर, आप ऐसा नहीं करते डिफ़ॉल्ट कुंजी के अलावा अन्य कुंजियों का इस्तेमाल करना चाहते हैं, इसलिए इस विशेषता को छोड़ देना चाहिए.

चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता.

densities

List of strings; optional

APK बनाते समय, फ़िल्टर करने के लिए डेंसिटी. इससे रास्टर ड्रॉ करने वाले संसाधन हट जाएंगे, जो कि APK का साइज़ कम करने के लिए, बताई गई स्क्रीन डेंसिटी का इस्तेमाल करें. स्क्रीन के साथ काम करने वाली स्क्रीन अगर इसमें पहले से कोई सुपरसेट नहीं है, तो मेनिफ़ेस्ट में सेक्शन भी जोड़ा जाएगा लिस्टिंग.
dex_shards

Integer; optional; default is 1

शार्ड डीक्सिंग की संख्या को कम करना चाहिए. इससे डेक्सिंग की प्रोसेस बहुत तेज़ी से होती है. इसमें ऐप्लिकेशन इंस्टॉल होने और शुरू होने में लगने वाला समय बहुत ज़्यादा खर्च होता है. कॉन्टेंट बनाने बाइनरी जितनी बड़ी होगी, उतने ज़्यादा शार्ड का इस्तेमाल किया जाना चाहिए. शुरुआत करने के लिए 25 एक अच्छा मान है नए वीडियो बनाते रहें.

ध्यान दें कि फ़ाइनल ऐप्लिकेशन में हर शार्ड से कम से कम एक डेक्स मिलता है. इस वजह से, रिलीज़ बाइनरी के लिए, इसे 1 से ज़्यादा पर सेट करने का सुझाव नहीं दिया जाता.

dexopts

List of strings; optional

class.dex जनरेट करते समय, dx टूल के लिए अतिरिक्त कमांड-लाइन फ़्लैग. "वैरिएबल बनाएं" के विकल्प पर निर्भर करता है और बोर्न शेल टोकनाइज़ेशन.
enable_data_binding

Boolean; optional; default is False

अगर सही है, तो इस नियम को प्रोसेस किया जाता है डेटा बाइंडिंग एक्सप्रेशन के ज़रिए शामिल किए गए लेआउट रिसॉर्स में resource_files एट्रिब्यूट. इसके बिना सेटिंग के हिसाब से, डेटा बाइंडिंग एक्सप्रेशन से बिल्ड फ़ेल हो जाता है.

डेटा बाइंडिंग वाला Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:

  1. इस एट्रिब्यूट को, Android के उन सभी नियमों के लिए सेट करें जो इस पर निर्भर करते हैं. ऐसा इसलिए होता है, क्योंकि डिपेंडेंट, रिसॉर्स के ज़रिए नियम के डेटा बाइंडिंग एक्सप्रेशन को इनहेरिट करते हैं मर्ज करना. इसलिए, उन एक्सप्रेशन को पार्स करने के लिए, उन्हें डेटा बाइंडिंग के साथ भी बनाना होगा.
  2. डेटा बाइंडिंग रनटाइम लाइब्रेरी के सभी टारगेट के लिए, deps = एंट्री जोड़ें जो इस एट्रिब्यूट को सेट करते हैं. इस लाइब्रेरी की जगह, आपके डिपो के सेट अप के हिसाब से तय होती है.
incremental_dexing

Integer; optional; nonconfigurable; default is -1

डिफ़ॉल्ट को ओवरराइड करते हुए, इंक्रीमेंटल डेक्सिंग या बिना इंक्रीमेंटल डेक्सिंग के बनाए जाने वाले टारगेट को ज़बरदस्ती बनाएं और --incremental_dexing फ़्लैग का इस्तेमाल कर सकते हैं.
instruments

Label; optional

इंस्ट्रुमेंट पर android_binary का टारगेट.

अगर इस एट्रिब्यूट को सेट किया जाता है, तो इस android_binary को टेस्ट माना जाएगा इंस्ट्रुमेंटेशन टेस्ट के लिए आवेदन. android_instrumentation_test तो लक्ष्य इस लक्ष्य को अपने test_app एट्रिब्यूट.

javacopts

List of strings; optional

इस टारगेट के लिए, कंपाइलर के ज़्यादा विकल्प. "वैरिएबल बनाएं" के विकल्प पर निर्भर करता है और बोर्न शेल टोकनाइज़ेशन.

ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं.

key_rotation_min_sdk

String; optional

यह Android प्लैटफ़ॉर्म का वह कम से कम वर्शन (एपीआई लेवल) सेट करता है जिसके लिए APK को घुमाया गया हो कुंजी का इस्तेमाल APK का हस्ताक्षर बनाने के लिए किया जाना चाहिए. APK के लिए ओरिजनल साइनिंग पासकोड का इस्तेमाल प्लैटफ़ॉर्म के पिछले सभी वर्शन के लिए किया जाएगा.
main_dex_list

Label; optional

टेक्स्ट फ़ाइल में क्लास फ़ाइल के नामों की सूची शामिल है. उन क्लास फ़ाइलों से तय की गई क्लास प्राइमरी क्लास.dex. e.g.:
          android/support/multidex/MultiDex$V19.class
          android/support/multidex/MultiDex.class
          android/support/multidex/MultiDexApplication.class
          com/google/common/base/Objects.class
                    
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है multidex="manual_main_dex" के साथ इस्तेमाल किया जाना चाहिए.
main_dex_list_opts

List of strings; optional

मुख्य डेक्स लिस्ट बिल्डर पर जाने के लिए, कमांड लाइन के विकल्प. इस विकल्प का इस्तेमाल करके, मुख्य डेक्स सूची में शामिल क्लास पर असर डालें.
main_dex_proguard_specs

List of labels; optional

ProGuard स्पेसिफ़िकेशन के तौर पर इस्तेमाल की जाने वाली फ़ाइलें. इससे यह तय किया जा सकता है कि किन क्लास में रखा जाना चाहिए मुख्य dex. इसे सिर्फ़ तब इस्तेमाल किया जा सकता है, जब multidex एट्रिब्यूट को legacy पर सेट किया गया हो.
manifest

Label; required

Android मेनिफ़ेस्ट फ़ाइल का नाम, आम तौर पर AndroidManifest.xml. अगरResource_files या ऐसेट के बारे में बताया गया है, तो यह तय करना ज़रूरी है.
manifest_values

Dictionary: String -> String; optional

मेनिफ़ेस्ट में बदली जाने वाली वैल्यू की डिक्शनरी. साइट पर ${name} का कोई भी इंस्टेंस मेनिफ़ेस्ट को इस शब्दकोश में नाम के मुताबिक मान से बदल दिया जाएगा. appId, versionCode, versionName, minSdkVersion, targetSdkVersion और maxSdkVersion भी मेनिफ़ेस्ट की संबंधित विशेषताओं को बदल देगा और का इस्तेमाल करता है. PackageName को अनदेखा कर दिया जाएगा और इसे किसी भी appId से सेट किया जाएगा, अगर बताया गया हो या फिर मेनिफ़ेस्ट में पैकेज शामिल हो. जब Manifest_Merger, लेगसी पर सेट होता है, तो सिर्फ़ appId, versionCode, और versionName पर कोई असर होगा.
multidex

String; optional; default is "native"

क्या कोड को एक से ज़्यादा dex फ़ाइलों में बांटना है.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वैल्यू, इनमें से कोई हो सकती है:
  • native: dex 64K इंडेक्स की सीमा होने पर, कोड को कई dex फ़ाइलों में बांटें पार हो गया है. रनटाइम के दौरान मल्टीडेक्स क्लास लोड करने के लिए, नेटिव प्लैटफ़ॉर्म सपोर्ट को मान लेता है. यह सुविधा सिर्फ़ Android L और उसके बाद के वर्शन पर काम करती है.
  • legacy: dex 64K इंडेक्स की सीमा होने पर, कोड को कई dex फ़ाइलों में बांटें पार हो गया है. यह मानकर चलता है कि मल्टीडेक्स क्लास को ऐप्लिकेशन कोड के ज़रिए लोड किया गया है (यानी कि कोई नेटिव प्लैटफ़ॉर्म सहायता).
  • manual_main_dex: dex 64K रिज़ॉल्यूशन में होने पर, कोड को कई dex फ़ाइलों में बांट दें इंडेक्स की सीमा पार हो गई है. मुख्य dex फ़ाइल के कॉन्टेंट की जानकारी टेक्स्ट फ़ाइल में क्लास की सूची उपलब्ध कराकर main_dex_list एट्रिब्यूट का इस्तेमाल करें.
  • off: सभी कोड को एक dex फ़ाइल में कंपाइल करें, भले ही वह इंडेक्स की सीमा.
nocompress_extensions

List of strings; optional

apk में बिना कंप्रेस किए छोड़ने के लिए फ़ाइल एक्सटेंशन की सूची.
package_id

Integer; optional; default is 0

इस बाइनरी में मौजूद संसाधनों को असाइन किया जाने वाला पैकेज आईडी.

ज़्यादा जानकारी के लिए, AAPT2 के --package-id आर्ग्युमेंट को देखें. इससे ये काम किए जा सकते हैं (और सेट नहीं किया जाएगा, तो आम तौर पर 127 की डिफ़ॉल्ट वैल्यू मिलती है (0x7F).

plugins

List of labels; optional

कंपाइलर के समय चलाए जाने वाले Java कंपाइलर प्लगिन. इसमें बताई गई हर java_plugin प्लगिन एट्रिब्यूट जब भी इस्तेमाल होगा, इस टारगेट को बनाया जाता है. संसाधन बनाने वाले का नाम प्लगिन को इसके परिणाम जार में शामिल किया जाएगा टारगेट किया जा सकता है.
proguard_apply_dictionary

Label; optional

ProGuard के लिए मैपिंग के रूप में इस्तेमाल की जाने वाली फ़ाइल. लाइन से अलग की गई "शब्दों" वाली फ़ाइल के दौरान क्लास और सदस्यों का नाम बदलते समय अस्पष्ट बनाना.
proguard_apply_mapping

Label; optional

ProGuard के लिए मैपिंग के रूप में इस्तेमाल की जाने वाली फ़ाइल. proguard_generate_mapping ने जो मैपिंग फ़ाइल जनरेट की है उसे नए बिल्ड में वही मैपिंग लागू करने के लिए फिर से इस्तेमाल किया गया है.
proguard_generate_mapping

Boolean; optional; nonconfigurable; default is False

ProGuard मैपिंग फ़ाइल जनरेट करनी है या नहीं. मैपिंग फ़ाइल सिर्फ़ तब जनरेट होगी, जब proguard_specs बताया गया है. यह फ़ाइल मूल और अस्पष्ट वर्ग, विधि और फ़ील्ड नाम.

चेतावनी: अगर इस एट्रिब्यूट का इस्तेमाल किया जाता है, तो ProGuard स्पेसिफ़िकेशन में न तो -dontobfuscate होना चाहिए और न ही -printmapping.

proguard_specs

List of labels; optional

ProGuard स्पेसिफ़िकेशन के तौर पर इस्तेमाल की जाने वाली फ़ाइलें. यह फ़ाइल, ProGuard के इस्तेमाल किए जाने वाले खास निर्देशों के बारे में जानकारी देगी.
resource_configuration_filters

List of strings; optional

संसाधन कॉन्फ़िगरेशन फ़िल्टर की सूची, जैसे कि 'en' इससे संसाधनों को सीमित कर दिया जाएगा apk केवल 'en' में मौजूद लोगों को apk कॉन्फ़िगरेशन. pseudolocalization को चालू करने के लिए, शामिल करें en_XA और/या ar_XB pseudo-locales.
resource_files

List of labels; optional

पैकेज किए जाने वाले संसाधनों की सूची. आम तौर पर, यह फ़ाइल के तहत आने वाली सभी फ़ाइलों का glob होता है res डायरेक्ट्री.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है जनरेट की गई फ़ाइलों (genrules से) का रेफ़रंस इनसे लिया जा सकता है यहां भी लेबल करें. पाबंदी सिर्फ़ यह है कि जनरेट किए गए आउटपुट, "res" से कम होने चाहिए डायरेक्ट्री, किसी भी अन्य फ़ॉर्मैट में होनी चाहिए शामिल हैं.
shrink_resources

Integer; optional; default is -1

क्या संसाधन को छोटा करने की कार्रवाई करनी है. जिन संसाधनों का इस्तेमाल बाइनरी में नहीं किया गया है उन्हें APK से हटा दिया गया है. यह सिर्फ़ स्थानीय संसाधनों (जैसे कि manifest और resource_files एट्रिब्यूट के लिए ज़रूरी है.) के लिए ProGuard की ज़रूरत होती है. यह ज़्यादातर उसी तरीके से काम करता है जैसे Gradle रिसॉर्स श्रिंकर करता है (https://developer.android.com/studio/build/shrink-code.html#shrink-resources).

अहम अंतर:

  • values/ में मौजूद संसाधन हटा दिए जाएंगे. साथ ही, फ़ाइलों के हिसाब से संसाधन
  • डिफ़ॉल्ट रूप से strict mode का इस्तेमाल करता है
  • इस्तेमाल न किए गए आईडी रिसॉर्स को हटाने की सुविधा, सिर्फ़ aapt2 के साथ काम करती है
अगर रिसॉर्स को छोटा करने की सुविधा चालू है, तो name_files/resource_shrinker.log भी जनरेट किया जाएगा, जिसमें किए गए विश्लेषण और मिटाए गए डेटा की जानकारी होगी.

जितनी तरह के साइटमैप हो सकते हैं उनकी जानकारी यहां दी गई है:

  • shrink_resources = 1: Android संसाधन का साइज़ छोटा करने की सुविधा चालू करता है
  • shrink_resources = 0: Android संसाधन का साइज़ छोटा करने की सुविधा बंद करता है
  • shrink_resources = -1: शृंक करने की क्रिया को --android_resource_shinsking फ़्लैग.

aar_import

aar_import(name, deps, data, aar, compatible_with, deprecation, distribs, exec_compatible_with, exec_properties, exports, features, licenses, restricted_to, srcjar, tags, target_compatible_with, testonly, visibility)

इस नियम के तहत, .aar फ़ाइलों को लाइब्रेरी के तौर पर इस्तेमाल किया जा सकता है android_library और android_binary नियम.

उदाहरण

    aar_import(
        name = "google-vr-sdk",
        aar = "gvr-android-sdk/libraries/sdk-common-1.10.0.aar",
    )

    android_binary(
        name = "app",
        manifest = "AndroidManifest.xml",
        srcs = glob(["**.java"]),
        deps = [":google-vr-sdk"],
    )

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

aar

Label; required

इस टारगेट पर निर्भर Android टारगेट को उपलब्ध कराने के लिए .aar फ़ाइल.
exports

List of labels; optional

इस नियम पर निर्भर नियमों पर एक्सपोर्ट किए जाने वाले टारगेट. java_library.exports.
srcjar

Label; optional

एक JAR फ़ाइल, जिसमें AAR में कंपाइल की गई JAR फ़ाइलों का सोर्स कोड होता है.

android_library

android_library(name, deps, srcs, data, assets, assets_dir, compatible_with, custom_package, deprecation, distribs, enable_data_binding, exec_compatible_with, exec_properties, exported_plugins, exports, exports_manifest, features, idl_import_root, idl_parcelables, idl_preprocessed, idl_srcs, javacopts, licenses, manifest, neverlink, plugins, proguard_specs, resource_files, restricted_to, tags, target_compatible_with, testonly, visibility)

यह नियम अपने सोर्स को .jar फ़ाइल में कंपाइल और संग्रहित करता है. Android रनटाइम लाइब्रेरी android.jar को इंप्लिसिट रूप से चालू किया गया है कंपाइलेशन क्लास पाथ.

इंप्लिसिट आउटपुट टारगेट

  • libname.jar: एक Java संग्रह.
  • libname-src.jar: एक संग्रह जिसमें सोर्स ("सोर्स जार").
  • name.aar: Android 'aar' JavaScript संग्रह वाला बंडल टारगेट के लिए, और संसाधन शामिल हैं. इसमें ट्रांज़िटिव क्लोज़र शामिल नहीं है.

उदाहरण

Android के नियमों के उदाहरण, यहां दी गई examples/android डायरेक्ट्री में मिल सकते हैं: बेज़ल सोर्स ट्री.

यह उदाहरण दिखाता है idl_import_root को कैसे सेट करते हैं. //java/bazel/helloandroid/BUILD को यह जानकारी शामिल करने दें:

android_library(
    name = "parcelable",
    srcs = ["MyParcelable.java"], # bazel.helloandroid.MyParcelable

    # MyParcelable.aidl will be used as import for other .aidl
    # files that depend on it, but will not be compiled.
    idl_parcelables = ["MyParcelable.aidl"] # bazel.helloandroid.MyParcelable

    # We don't need to specify idl_import_root since the aidl file
    # which declares bazel.helloandroid.MyParcelable
    # is present at java/bazel/helloandroid/MyParcelable.aidl
    # underneath a java root (java/).
)

android_library(
    name = "foreign_parcelable",
    srcs = ["src/android/helloandroid/OtherParcelable.java"], # android.helloandroid.OtherParcelable
    idl_parcelables = [
        "src/android/helloandroid/OtherParcelable.aidl" # android.helloandroid.OtherParcelable
    ],

    # We need to specify idl_import_root because the aidl file which
    # declares android.helloandroid.OtherParcelable is not positioned
    # at android/helloandroid/OtherParcelable.aidl under a normal java root.
    # Setting idl_import_root to "src" in //java/bazel/helloandroid
    # adds java/bazel/helloandroid/src to the list of roots
    # the aidl compiler will search for imported types.
    idl_import_root = "src",
)

# Here, OtherInterface.aidl has an "import android.helloandroid.CallbackInterface;" statement.
android_library(
    name = "foreign_interface",
    idl_srcs = [
        "src/android/helloandroid/OtherInterface.aidl" # android.helloandroid.OtherInterface
        "src/android/helloandroid/CallbackInterface.aidl" # android.helloandroid.CallbackInterface
    ],

    # As above, idl_srcs which are not correctly positioned under a java root
    # must have idl_import_root set. Otherwise, OtherInterface (or any other
    # interface in a library which depends on this one) will not be able
    # to find CallbackInterface when it is imported.
    idl_import_root = "src",
)

# MyParcelable.aidl is imported by MyInterface.aidl, so the generated
# MyInterface.java requires MyParcelable.class at compile time.
# Depending on :parcelable ensures that aidl compilation of MyInterface.aidl
# specifies the correct import roots and can access MyParcelable.aidl, and
# makes MyParcelable.class available to Java compilation of MyInterface.java
# as usual.
android_library(
    name = "idl",
    idl_srcs = ["MyInterface.aidl"],
    deps = [":parcelable"],
)

# Here, ServiceParcelable uses and thus depends on ParcelableService,
# when it's compiled, but ParcelableService also uses ServiceParcelable,
# which creates a circular dependency.
# As a result, these files must be compiled together, in the same android_library.
android_library(
    name = "circular_dependencies",
    srcs = ["ServiceParcelable.java"],
    idl_srcs = ["ParcelableService.aidl"],
    idl_parcelables = ["ServiceParcelable.aidl"],
)

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

deps

List of labels; optional

लिंक करने के लिए अन्य लाइब्रेरी की सूची. इस तरह की लाइब्रेरी इस्तेमाल की जा सकती हैं: android_library, android कंस्ट्रेंट और java_library के साथ cc_library में .so नेटिव लाइब्रेरी को रैप करना या बनाना Android टारगेट प्लैटफ़ॉर्म के लिए.
srcs

List of labels; optional

ऐसी .java या .srcjar फ़ाइलों की सूची जिसमें जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है.

.java टाइप की srcs फ़ाइलें कंपाइल की गई हैं. सिर्फ़ समझने के लिए, किसी साइट का नाम srcs में .java सोर्स फ़ाइल जनरेट की गई. इसके बजाय, srcs में डिपेंडेंट-ऑन नियम का नाम इस तरह रखें जिनकी जानकारी नीचे दी गई है.

.srcjar टाइप की srcs फ़ाइलें पैक नहीं की गई हैं और कंपाइल किया गया. (यह तब काम आता है, जब आपको .java फ़ाइलों का सेट जनरेट करने की ज़रूरत हो सामान्य या बिल्ड एक्सटेंशन शामिल करें.)

अगर srcs को शामिल नहीं किया जाता है, तो इसमें बताई गई कोई भी डिपेंडेंसी deps को इस नियम से एक्सपोर्ट किया गया है (देखें ज़्यादा जानकारी के लिए, java_library का एक्सपोर्ट डिपेंडेंसी एक्सपोर्ट करने के बारे में जानकारी). हालांकि, यह व्यवहार जल्द ही बंद हो जाएगा; उस पर भरोसा न करें.

assets

List of labels; optional

पैकेज की जाने वाली ऐसेट की सूची. आम तौर पर, यह फ़ाइल के तहत आने वाली सभी फ़ाइलों का glob होता है assets डायरेक्ट्री. आप अन्य नियमों का संदर्भ भी दे सकते हैं (ऐसा कोई भी नियम जो फ़ाइलें) या अन्य पैकेज में निर्यात की गई फ़ाइलें होती हैं, बशर्ते वे सभी फ़ाइलें assets_dir डायरेक्ट्री, उससे जुड़े पैकेज में है.
assets_dir

String; optional

assets में फ़ाइलों का पाथ देने वाली स्ट्रिंग. assets और assets_dir, पैकेज के बारे में बताते हैं ऐसेट और दोनों में से कोई एक एट्रिब्यूट दिया जाना चाहिए या फिर कोई भी नहीं दिया जाना चाहिए.
custom_package

String; optional

Java पैकेज, जिसके लिए java सोर्स जनरेट किए जाएंगे. डिफ़ॉल्ट रूप से, पैकेज का अनुमान उस डायरेक्ट्री से लगाया जाता है जहां BUILD फ़ाइल होती है जिसमें नियम शामिल है. कोई दूसरा पैकेज तय किया जा सकता है, लेकिन यह है बहुत ज़्यादा नहीं होता है, क्योंकि इसकी वजह से क्लासपाथ के विरोधाभास हो सकते हैं लाइब्रेरी जिनका पता सिर्फ़ रनटाइम के दौरान लगाया जा सकेगा.
enable_data_binding

Boolean; optional; default is False

अगर सही है, तो इस नियम को प्रोसेस किया जाता है डेटा बाइंडिंग एक्सप्रेशन के ज़रिए शामिल किए गए लेआउट रिसॉर्स में resource_files एट्रिब्यूट. इसके बिना सेटिंग के हिसाब से, डेटा बाइंडिंग एक्सप्रेशन से बिल्ड फ़ेल हो जाता है.

डेटा बाइंडिंग वाला Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:

  1. इस एट्रिब्यूट को, Android के उन सभी नियमों के लिए सेट करें जो इस पर निर्भर करते हैं. ऐसा इसलिए होता है, क्योंकि डिपेंडेंट, रिसॉर्स के ज़रिए नियम के डेटा बाइंडिंग एक्सप्रेशन को इनहेरिट करते हैं मर्ज करना. इसलिए, उन एक्सप्रेशन को पार्स करने के लिए, उन्हें डेटा बाइंडिंग के साथ भी बनाना होगा.
  2. डेटा बाइंडिंग रनटाइम लाइब्रेरी के सभी टारगेट के लिए, deps = एंट्री जोड़ें जो इस एट्रिब्यूट को सेट करते हैं. इस लाइब्रेरी की जगह, आपके डिपो के सेट अप के हिसाब से तय होती है.
exported_plugins

List of labels; optional

java_plugin की सूची (उदाहरण के लिए, एनोटेशन प्रोसेसर) शामिल करें.

java_plugin की तय सूची ऐसी किसी भी लाइब्रेरी पर लागू की जाएगी जिसमें इस लाइब्रेरी पर निर्भर करता है, ठीक वैसे ही जैसे कि उस लाइब्रेरी में plugins में लेबल.

exports

List of labels; optional

exports एट्रिब्यूट के ज़रिए, सभी नियमों को बंद किया गया ऐसे किसी भी नियम की प्रत्यक्ष निर्भरता माने जाते हैं, जो आपकी exports के साथ टारगेट.

exports, उस नियम का सीधा हिस्सा नहीं हैं जिससे वे जुड़े हैं.

exports_manifest

Integer; optional; default is 1

मेनिफ़ेस्ट एंट्री को android_binary टारगेट में एक्सपोर्ट करना है या नहीं जो इस टारगेट पर निर्भर करती हैं. uses-permissions एट्रिब्यूट को कभी एक्सपोर्ट नहीं किया जाता.
idl_import_root

String; optional

idl वाले Java पैकेज ट्री के रूट का पैकेज-रिलेटिव पाथ इस लाइब्रेरी में शामिल स्रोत.

इस पाथ का इस्तेमाल इंपोर्ट रूट के तौर पर किया जाएगा, जब उन idl सोर्स को प्रोसेस किया जाएगा उस लाइब्रेरी पर निर्भर करते हैं.

जब idl_import_root बताया गया हो, तो दोनों idl_parcelables और idl_srcs, ऑब्जेक्ट के java पैकेज से तय किए गए पाथ पर होना चाहिए वे idl_import_root से कम का प्रतिनिधित्व करते हैं. जब idl_import_root होता है तय नहीं है, idl_parcelables और idl_srcs दोनों पाथ का इस्तेमाल करता है.

देखें उदाहरण.

idl_parcelables

List of labels; optional

इंपोर्ट के तौर पर सप्लाई की जाने वाली Android IDL की परिभाषाओं की सूची. ये फ़ाइलें किसी भी सीधे इस लाइब्रेरी पर निर्भर android_library टारगेट या अपने अस्थायी बंद करने के माध्यम से, लेकिन Java में उसका अनुवाद नहीं किया जाएगा या कंपाइल न किए जाएं.

सिर्फ़ .aidl फ़ाइलें जो सीधे तौर पर जुड़ी हैं इस लाइब्रेरी में मौजूद .java स्रोत शामिल किए जाने चाहिए (उदाहरण के लिए, कस्टम पार्सल करने के तरीके को लागू करता है), नहीं तो idl_srcs होना चाहिए इस्तेमाल किया गया.

इन फ़ाइलों को सही जगह पर रखना ज़रूरी है, ताकि एडल कंपाइलर उन्हें ढूंढ सके. idl_Import_root का ब्यौरा देखें ताकि आपको इनके बारे में जानकारी मिल सके.

idl_preprocessed

List of labels; optional

इंपोर्ट के तौर पर सप्लाई करने के लिए, पहले से प्रोसेस की गई Android IDL की परिभाषाओं की सूची. ये फ़ाइलें किसी भी सीधे इस लाइब्रेरी पर निर्भर android_library टारगेट या अपने अस्थायी बंद करने के माध्यम से, लेकिन Java में उसका अनुवाद नहीं किया जाएगा या कंपाइल न किए जाएं.

सिर्फ़ पहले से प्रोसेस की गई .aidl फ़ाइलें, जो सीधे तौर पर संबंधित हैं इस लाइब्रेरी में मौजूद .java स्रोत शामिल किए जाने चाहिए (उदाहरण के लिए, कस्टम पार्सल करने का तरीका लागू करना), या फिर इन चीज़ों के लिए idl_srcs का इस्तेमाल करें Android IDL की परिभाषाएं, जिनका Java इंटरफ़ेस में अनुवाद किया जाना चाहिए और idl_parcelable का इस्तेमाल करें प्रोसेस नहीं की गई एआईडीएल फ़ाइलों के लिए.

idl_srcs

List of labels; optional

Java इंटरफ़ेस में अनुवाद करने के लिए, Android IDL की परिभाषाओं की सूची. Java इंटरफ़ेस जनरेट होने के बाद, उन्हें एक साथ कंपाइल किया जाएगा srcs की सामग्री के साथ.

ये फ़ाइलें किसी भी सीधे इस लाइब्रेरी पर निर्भर android_library टारगेट अस्थायी तौर पर बंद रहने के दौरान भी किया जा सकता है.

इन फ़ाइलों को सही जगह पर रखना ज़रूरी है, ताकि एडल कंपाइलर उन्हें ढूंढ सके. idl_Import_root का ब्यौरा देखें ताकि आपको इनके बारे में जानकारी मिल सके.

javacopts

List of strings; optional

इस टारगेट के लिए, कंपाइलर के ज़्यादा विकल्प. "वैरिएबल बनाएं" के विकल्प पर निर्भर करता है और बोर्न शेल टोकनाइज़ेशन.

ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं.

manifest

Label; optional

Android मेनिफ़ेस्ट फ़ाइल का नाम, आम तौर पर AndroidManifest.xml. अगरResource_files या ऐसेट के बारे में बताया गया है, तो यह तय करना ज़रूरी है.

Boolean; optional; default is False

इस लाइब्रेरी का इस्तेमाल सिर्फ़ कंपाइलेशन के लिए करें, रनटाइम के दौरान नहीं. neverlink के तौर पर मार्क किए गए नियम के आउटपुट का इस्तेमाल इसमें नहीं किया जाएगा .apk की मदद से बनाया गया. यह तब काम आता है, जब लाइब्रेरी को एक्ज़ीक्यूशन के दौरान रनटाइम एनवायरमेंट का इस्तेमाल करता है.
plugins

List of labels; optional

कंपाइलर के समय चलाए जाने वाले Java कंपाइलर प्लगिन. इसमें बताई गई हर java_plugin प्लगिन एट्रिब्यूट जब भी इस्तेमाल होगा, इस टारगेट को बनाया जाता है. संसाधन बनाने वाले का नाम प्लगिन को इसके परिणाम जार में शामिल किया जाएगा टारगेट किया जा सकता है.
proguard_specs

List of labels; optional

ProGuard स्पेसिफ़िकेशन के तौर पर इस्तेमाल की जाने वाली फ़ाइलें. यहां ProGuard की ओर से इस्तेमाल की जाने वाली खास जानकारी के बारे में बताया जाएगा. अगर तय किया गया हो, उन्हें इस लाइब्रेरी के आधार पर किसी भी android_binary टारगेट में जोड़ दिया जाएगा. यहां शामिल की गई फ़ाइलों में सिर्फ़ पहचान बदलने वाले नियम होने चाहिए, जैसे कि -dontnote, -dontvarn, माना जाता है कि -keep से शुरू होने वाले नियम और साइड इफ़ेक्ट शामिल हैं. अन्य विकल्प सिर्फ़ यहां दिख सकते हैं android_binary के ProGuard_specs, ताकि नॉन-टॉटलॉजिकल मर्ज पक्का किए जा सकें.
resource_files

List of labels; optional

पैकेज किए जाने वाले संसाधनों की सूची. आम तौर पर, यह फ़ाइल के तहत आने वाली सभी फ़ाइलों का glob होता है res डायरेक्ट्री.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है जनरेट की गई फ़ाइलों (genrules से) का रेफ़रंस इनसे लिया जा सकता है यहां भी लेबल करें. पाबंदी सिर्फ़ यह है कि जनरेट किए गए आउटपुट, "res" से कम होने चाहिए डायरेक्ट्री, किसी भी अन्य फ़ॉर्मैट में होनी चाहिए शामिल हैं.

android_instrumentation_test

android_instrumentation_test(name, data, args, compatible_with, deprecation, distribs, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, licenses, local, restricted_to, shard_count, size, support_apks, tags, target_compatible_with, target_device, test_app, testonly, timeout, toolchains, visibility)

android_instrumentation_test नियम के मुताबिक, Android इंस्ट्रुमेंटेशन की जांच की जाती है. यह काम करेगा एम्युलेटर शुरू करें, टेस्ट किया जा रहा ऐप्लिकेशन इंस्टॉल करें, और टेस्ट ऐप्लिकेशन किसी भी अन्य ऐप्लिकेशन को इंस्टॉल करने की कोशिश की जा सकती है, और परीक्षण पैकेज में तय किए गए परीक्षणों को चलाया जा सकता है.

test_app एट्रिब्यूट android_binary जिसमें टेस्ट शामिल है. यह android_binary, इसकी मदद से, टेस्ट में शामिल android_binary ऐप्लिकेशन के बारे में बताता है instruments एट्रिब्यूट का इस्तेमाल करना चाहिए.

उदाहरण

# java/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_lib",
    srcs = ["Lib.java"],
    manifest = "LibraryManifest.xml",
    resource_files = glob(["res/**"]),
)

# The app under test
android_binary(
    name = "hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_lib"],
)
# javatests/com/samples/hello_world/BUILD

android_library(
    name = "hello_world_test_lib",
    srcs = ["Tests.java"],
    deps = [
      "//java/com/samples/hello_world:hello_world_lib",
      ...  # test dependencies such as Espresso and Mockito
    ],
)

# The test app
android_binary(
    name = "hello_world_test_app",
    instruments = "//java/com/samples/hello_world:hello_world_app",
    manifest = "AndroidManifest.xml",
    deps = [":hello_world_test_lib"],
)

android_instrumentation_test(
    name = "hello_world_uiinstrumentation_tests",
    target_device = ":some_target_device",
    test_app = ":hello_world_test_app",
)

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

support_apks

List of labels; optional

इंस्ट्रुमेंटेशन टेस्ट शुरू होने से पहले, डिवाइस पर इंस्टॉल किए जाने वाले अन्य APKs.
target_device

Label; required

वह android_device जिस पर टेस्ट चलना चाहिए.

पहले से चल रहे एम्युलेटर या फ़िज़िकल डिवाइस पर टेस्ट करने के लिए, इसका इस्तेमाल करें ये तर्क: --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है

test_app

Label; required

android_binary टारगेट में टेस्ट क्लास शामिल हैं. android_binary टारगेट को यह बताना होगा कि वह किस टारगेट से टेस्ट कर रहा है इसकी instruments एट्रिब्यूट की वैल्यू सबमिट की गई है.

android_local_test

android_local_test(name, deps, srcs, data, args, compatible_with, custom_package, densities, deprecation, enable_data_binding, env, env_inherit, exec_compatible_with, exec_properties, features, flaky, javacopts, jvm_flags, licenses, local, manifest, manifest_values, nocompress_extensions, plugins, resource_configuration_filters, resource_jars, resource_strip_prefix, restricted_to, runtime_deps, shard_count, size, stamp, tags, target_compatible_with, test_class, testonly, timeout, toolchains, use_launcher, visibility)

यह नियम स्थानीय तौर पर android_library नियमों की जांच करने के लिए है (यह एक डिवाइस पर अलग होता है). यह Android Robolectric फ़्रेमवर्क के साथ काम करता है. इस बारे में जानकारी के लिए Android Robolectric साइट देखें जिनमें रोबोलेक्ट्रिक टेस्ट लिखे जा रहे हों.

इंप्लिसिट आउटपुट टारगेट

  • name.jar: टेस्ट का Java संग्रह.
  • name-src.jar: सोर्स वाला एक संग्रह ("सोर्स जार").
  • name_deploy.jar: Java डिप्लॉयमेंट के लिए सही संग्रह डिप्लॉयमेंट के लिए (सिर्फ़ तब बनाया जाता है, जब साफ़ तौर पर अनुरोध किया गया हो).

उदाहरण

android_local_test के साथ Robolectric का इस्तेमाल करने के लिए, जोड़ें रोबोलेक्टरिक्स डेटा स्टोर करने की जगह को आपकी WORKSPACE फ़ाइल में सेव करें:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
इससे Robolectric के लिए ज़रूरी maven_jar नियम लागू हो जाते हैं. तो हर android_local_test नियम इन पर निर्भर होना चाहिए: @robolectric//bazel:robolectric. नीचे उदाहरण देखें।

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:robolectric",
    ],
)

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

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

deps

List of labels; optional

जिन लाइब्रेरी की जांच होनी है उनकी सूची और लिंक की जाने वाली अतिरिक्त लाइब्रेरी कमाया जा सकता है. ऐसे सभी संसाधन, एसेट, और मेनिफ़ेस्ट फ़ाइलों के बारे में जिनका एलान Android के नियमों में ट्रांज़िट के दौरान किया गया है इस एट्रिब्यूट की वैल्यू को बंद करने की जानकारी, टेस्ट में उपलब्ध कराई जाती है.

deps में मंज़ूर किए गए नियमों की सूची android_library है, aar_import, java_import, java_library, और java_lite_proto_library.

srcs

List of labels; optional

टारगेट बनाने के लिए प्रोसेस की जाने वाली सोर्स फ़ाइलों की सूची. नीचे बताए गए खास मामलों को छोड़कर, यह ज़रूरी है.

.java टाइप की srcs फ़ाइलें कंपाइल की गई हैं. सिर्फ़ समझने के लिए, किसी साइट का नाम srcs में .java सोर्स फ़ाइल जनरेट की गई. इसके बजाय, srcs में डिपेंडेंट-ऑन नियम का नाम इस तरह रखें जिनकी जानकारी नीचे दी गई है.

.srcjar टाइप की srcs फ़ाइलें पैक नहीं की गई हैं और कंपाइल किया गया. (यह तब काम आता है, जब आपको .java फ़ाइलों का सेट जनरेट करने की ज़रूरत हो सामान्य या बिल्ड एक्सटेंशन शामिल करें.)

अन्य सभी फ़ाइलों को तब तक अनदेखा किया जाता है, जब तक ऊपर बताई गई फ़ाइल टाइप की कम से कम एक फ़ाइल मौजूद हो. अगर ऐसा नहीं है, तो कोई गड़बड़ी हुई है.

srcs एट्रिब्यूट ज़रूरी है और इसे तब तक खाली नहीं छोड़ा जा सकता, जब तक कि runtime_deps बताया गया है.

custom_package

String; optional

Java पैकेज जिसमें R क्लास जनरेट की जाएगी. डिफ़ॉल्ट रूप से पैकेज का अनुमान लगाया जाता है उस डायरेक्ट्री से जिसमें नियम वाली BUILD फ़ाइल मौजूद है. इस एट्रिब्यूट का इस्तेमाल करने पर, आपको test_class का भी इस्तेमाल करना होगा.
densities

List of strings; optional

APK बनाते समय, फ़िल्टर करने के लिए डेंसिटी. स्क्रीन के साथ काम करने वाली स्क्रीन मेनिफ़ेस्ट में सेक्शन तब भी जोड़ा जाएगा, जब उसमें पहले से कोई Superset StarlarkListing.
enable_data_binding

Boolean; optional; default is False

अगर सही है, तो इस नियम को प्रोसेस किया जाता है डेटा बाइंडिंग रेफ़रंस, जिनका इस्तेमाल इस टेस्ट में इस्तेमाल होने वाली डेटा-बाइंडिंग चालू डिपेंडेंसी में किया जाता है. इसके बिना इस सेटिंग में, डेटा-बाइंडिंग डिपेंडेंसी के लिए ज़रूरी बाइनरी-लेवल कोड जनरेशन नहीं होगा, साथ ही, इन वजहों से बिल्ड फ़ेल हो सकता है.
javacopts

List of strings; optional

इस लाइब्रेरी के लिए कंपाइलर के ज़्यादा विकल्प. "वैरिएबल बनाएं" के विकल्प पर निर्भर करता है और बोर्न शेल टोकनाइज़ेशन.

ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं.

jvm_flags

List of strings; optional

इस बाइनरी को चलाने के लिए जनरेट की गई रैपर स्क्रिप्ट में एम्बेड करने के लिए फ़्लैग की सूची. यह $(location) और "वैरिएबल बनाएं" विकल्प बोर्न शेल टोकनाइज़ेशन.

Java बाइनरी के लिए रैपर स्क्रिप्ट में एक CLASSPATH परिभाषा शामिल है (सभी डिपेंडेंट जार ढूंढने के लिए) और सही Java इंटरप्रेटर को शुरू करता है. रैपर स्क्रिप्ट से जनरेट की गई कमांड लाइन में मुख्य क्लास के बाद "$@", ताकि आप परीक्षा पास कर सकें आर्ग्युमेंट को कॉपी करें. हालांकि, पार्स करने के लिए बनाए गए तर्क के ज़रिए JVM को कमांड पर क्लासनाम से पहले तय किया जाना चाहिए लाइन. jvm_flags के कॉन्टेंट को रैपर में जोड़ दिया जाता है स्क्रिप्ट को सूची में शामिल करें.

ध्यान दें कि इस एट्रिब्यूट का *_deploy.jar पर कोई असर नहीं पड़ता आउटपुट.

manifest

Label; optional

Android मेनिफ़ेस्ट फ़ाइल का नाम, आम तौर पर AndroidManifest.xml. यह तय करना ज़रूरी है कि रिसॉर्स_फ़ाइलों या ऐसेट के बारे में जानकारी दी गई हो या इनमें से किसी जांच की जा रही लाइब्रेरी में minSdkVersion टैग मौजूद है.
manifest_values

Dictionary: String -> String; optional

मेनिफ़ेस्ट में बदली जाने वाली वैल्यू की डिक्शनरी. साइट पर ${name} का कोई भी इंस्टेंस मेनिफ़ेस्ट को इस शब्दकोश में नाम के मुताबिक मान से बदल दिया जाएगा. applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion, और maxSdkVersion, इससे जुड़े एट्रिब्यूट को भी बदल देगा के मेनिफ़ेस्ट और का इस्तेमाल करता है. packageName को अनदेखा कर दिया जाएगा और इसे इनमें से किसी एक पर सेट किया जाएगा applicationId अगर बताया गया हो या फिर मेनिफ़ेस्ट में पैकेज शामिल हो. Manifest_values का इस्तेमाल करने के लिए, नियम में मेनिफ़ेस्ट होना ज़रूरी नहीं है.
nocompress_extensions

List of strings; optional

संसाधन apk में बिना कंप्रेस किए छोड़ने के लिए फ़ाइल एक्सटेंशन की सूची.
plugins

List of labels; optional

कंपाइलर के समय चलाए जाने वाले Java कंपाइलर प्लगिन. इस एट्रिब्यूट में दी गई हर java_plugin, जब भी यह नियम लागू होगा, तब ट्रिगर की जाएगी बनाया जाता है. कोई लाइब्रेरी उन डिपेंडेंसी से प्लगिन भी इनहेरिट कर सकती है जिनका इस्तेमाल किया जाता है exported_plugins. रिसोर्स प्लगिन से जनरेट की गई वैल्यू को इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
resource_configuration_filters

List of strings; optional

संसाधन कॉन्फ़िगरेशन के फ़िल्टर की सूची, जैसे कि 'en' इससे संसाधनों को सीमित कर दिया जाएगा apk केवल 'en' में मौजूद लोगों को apk कॉन्फ़िगरेशन.
resource_jars

List of labels; optional

यह सुविधा अब काम नहीं करती: इसके बजाय, java_Import और deps या बनाए गए रनटाइम_deps का इस्तेमाल करें.
resource_strip_prefix

String; optional

Java संसाधनों से स्ट्रिप करने के लिए पाथ प्रीफ़िक्स.

अगर बताया गया है, तो resources में मौजूद हर फ़ाइल से इस पाथ प्रीफ़िक्स को हटा दिया जाएगा एट्रिब्यूट की वैल्यू सबमिट करें. किसी संसाधन फ़ाइल को इस डायरेक्ट्री के अंदर न होने की एक गड़बड़ी होती है. अगर नहीं (डिफ़ॉल्ट रूप से), संसाधन फ़ाइल का पाथ लॉजिक को सोर्स फ़ाइलों के Java पैकेज के तौर पर सेट करें. उदाहरण के लिए, stuff/java/foo/bar/a.txt का पता foo/bar/a.txt है.

runtime_deps

List of labels; optional

ऐसी लाइब्रेरी जिन्हें सिर्फ़ रनटाइम के समय पर फ़ाइनल बाइनरी या टेस्ट के लिए उपलब्ध कराया जाना है. सामान्य deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये इनकी तरह नहीं दिखेंगे नहीं, कंपाइल-टाइम क्लासपाथ पर. सिर्फ़ रनटाइम के दौरान ज़रूरी डिपेंडेंसी जो यहाँ सूचीबद्ध हैं. डिपेंडेंसी विश्लेषण टूल को उन टारगेट पर ध्यान नहीं देना चाहिए जो दोनों runtime_deps और deps.
stamp

Integer; optional; default is 0

बिल्ड की जानकारी को बाइनरी में एन्कोड करना है या नहीं. वैल्यू, इनमें से कोई हो सकती है:
  • stamp = 1: बिल्ड जानकारी को हमेशा बाइनरी में स्टैंप करें, भले ही --nostamp बिल्ड. यह सेटिंग से बचना चाहिए, क्योंकि यह बाइनरी और ऐसी डाउनस्ट्रीम कार्रवाइयां जो उस पर निर्भर करती हैं.
  • stamp = 0: बिल्ड की जानकारी को हमेशा कॉन्सटैंट वैल्यू से बदलें. यह अच्छे बिल्ड परिणाम को कैश मेमोरी में सेव करता है.
  • stamp = -1: बिल्ड की जानकारी को एम्बेड करने का कंट्रोल, --[no]stamp फ़्लैग.

स्टैंप वाली बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी नहीं बदलती.

test_class

String; optional

जांच करने वाले रनर की ओर से लोड की जाने वाली Java क्लास.

यह एट्रिब्यूट, उस Java क्लास का नाम बताता है जिसे चलाना है करें. इसे सेट करने की ज़रूरत कभी-कभार ही होती है. अगर यह आर्ग्युमेंट छोड़ दिया जाता है, तो Java क्लास जिसका नाम इसकी name से मेल खाता हो android_local_test नियम का इस्तेमाल किया जाएगा. टेस्ट क्लास के बारे में org.junit.runner.RunWith के साथ जानकारी देना ज़रूरी है.

use_launcher

Boolean; optional; default is True

बाइनरी को कस्टम लॉन्चर का इस्तेमाल करना चाहिए या नहीं.

अगर इस एट्रिब्यूट को 'गलत' पर सेट किया जाता है, तो लॉन्चर एट्रिब्यूट और मिलते-जुलते एट्रिब्यूट --java_launcher फ़्लैग को इस टारगेट के लिए अनदेखा कर दिया जाएगा.

android_device

android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

यह नियम दिए गए टूल के साथ कॉन्फ़िगर किया गया Android एम्युलेटर बनाता है खास जानकारी. इस एम्युलेटर को बेज़ल रन से चालू किया जा सकता है आदेश या जनरेट की गई स्क्रिप्ट को सीधे एक्ज़ीक्यूट करके. यह इस बात पर निर्भर रहना चाहिए कि android_device के नियमों के हिसाब से तय करें.

यह नियम --un_under फ़्लैग के लिए बेज़ल टेस्ट और ब्लेज़ के लिए सही टारगेट है दौड़ना. यह एक एम्युलेटर शुरू करता है, टेस्ट किए जा रहे टारगेट को एम्युलेटर पर कॉपी करता है/चलाता है, और उसकी जांच करता है या ज़रूरत के हिसाब से काम करता है.

android_device के तहत केवीएम इमेज बनाई जा सकती हैं, अगर system_image X86 पर आधारित है और यह इसे I686 सीपीयू आर्किटेक्चर के लिए ऑप्टिमाइज़ किया गया है. केवीएम ऐड का इस्तेमाल करने के लिए android_device नियम में tags = ['requires-kvm'] .

इंप्लिसिट आउटपुट टारगेट

  • name_images/userdata.dat: इसमें एम्युलेटर शुरू करने के लिए इमेज फ़ाइलें और स्नैपशॉट शामिल हैं
  • name_images/emulator-meta-data.pb: इसमें एम्युलेटर को पास करने के लिए, क्रम से लगाई गई जानकारी शामिल होती है इसे रीस्टार्ट करें.

उदाहरण

नीचे दिया गया उदाहरण android_device को इस्तेमाल करने का तरीका दिखाता है. //java/android/helloandroid/BUILD में शामिल है

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties में शामिल है:

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

इस नियम से इमेज और एक स्टार्ट स्क्रिप्ट जनरेट होगी. एम्युलेटर को चालू किया जा सकता है स्थानीय रूप से यह चलाने के लिए बेज़ल रन :Nexus_s -- --action=start. स्क्रिप्ट दिखाती है ये फ़्लैग:

  • --adb_port: adb को बाहर रखना है. अगर आपको adb जारी करना है एम्युलेटर को निर्देश दें. यह वह पोर्ट है जिसे आप adb कनेक्ट जारी करेंगे से.
  • --emulator_port: एम्युलेटर के टेलनेट मैनेजमेंट को दिखाने वाला पोर्ट चालू करें.
  • --enable_display: एम्युलेटर को सही होने पर डिसप्ले से शुरू करता है (डिफ़ॉल्ट गलत पर सेट करें).
  • --कार्रवाई: या तो शुरू करो या मार दो.
  • --apks_to_install: एम्युलेटर पर इंस्टॉल किए जाने वाले apks की सूची.

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

cache

Integer; required

एम्युलेटर के कैश मेमोरी वाले हिस्से का साइज़, मेगाबाइट में. इसका कम से कम मान 16 मेगाबाइट होता है.
default_properties

Label; optional

एम्युलेटर पर /default.prop में रखी जाने वाली एक प्रॉपर्टी फ़ाइल. इससे नियम के लेखक को एम्युलेटर को और कॉन्फ़िगर करने की अनुमति मिलती है, ताकि वह इस तरह का दिख सके असली डिवाइस (खास तौर पर, अपनी UserAgent स्ट्रिंग और दूसरी चीज़ों को कंट्रोल करना) ऐसा व्यवहार जिसकी वजह से, कोई ऐप्लिकेशन या सर्वर अलग तरह से काम कर सकता है खास डिवाइस). इस फ़ाइल में मौजूद प्रॉपर्टी सिर्फ़ रीड ओनली को बदलेंगी प्रॉपर्टी आम तौर पर एम्युलेटर की मदद से सेट की जाती हैं, जैसे कि ro.product.model.
horizontal_resolution

Integer; required

एम्युलेट करने के लिए, पिक्सल में हॉरिज़ॉन्टल स्क्रीन रिज़ॉल्यूशन. कम से कम वैल्यू 240 है.
platform_apks

List of labels; optional

बूट के समय डिवाइस पर इंस्टॉल किए जाने वाले apks की सूची.
ram

Integer; required

डिवाइस के लिए अनुकरण करने के लिए मेगाबाइट में रैम की मात्रा. यह सिर्फ़ डिवाइस पर इंस्टॉल किए गए किसी ऐप्लिकेशन के लिए ही नहीं, बल्कि पूरे डिवाइस के लिए है. कॉन्टेंट बनाने कम से कम वैल्यू 64 मेगाबाइट है.
screen_density

Integer; required

एम्युलेट की गई स्क्रीन का घनत्व, पिक्सल प्रति इंच के हिसाब से. इसकी वैल्यू कम से कम 30 पीपीआई होनी चाहिए.
system_image

Label; required

एक फ़ाइलग्रुप, जिसमें ये फ़ाइलें होती हैं:
  • System.img: सिस्टम पार्टिशन
  • kernel-qemu: एम्युलेटर, Linux कर्नेल लोड होगा
  • ramdisk.img: बूट के समय इस्तेमाल की जाने वाली पहली इमेज
  • userdata.img: उपयोगकर्ता के डेटा का शुरुआती हिस्सा
  • source.property: एक प्रॉपर्टी फ़ाइल जिसमें इमेज
ये फ़ाइलें android sdk का हिस्सा हैं या उन्हें तीसरे पक्ष की मदद से उपलब्ध कराई गई हैं (इसके लिए उदाहरण के लिए, Intel x86 इमेज उपलब्ध कराता है).
vertical_resolution

Integer; required

एम्युलेट करने के लिए, पिक्सल में वर्टिकल स्क्रीन रिज़ॉल्यूशन. कम से कम वैल्यू 240 है.
vm_heap

Integer; required

Android पर वर्चुअल मशीन हीप का साइज़, मेगाबाइट में हर प्रोसेस के लिए इस्तेमाल किया जाएगा. कम से कम वैल्यू 16 मेगाबाइट है.

android_ndk_repository

android_ndk_repository(name, api_level, path, repo_mapping)

इससे Baज़ल को Android एनडीके (NDK) का इस्तेमाल करके कॉन्फ़िगर किया जाता है, ताकि नेटिव विज्ञापन के साथ Android टारगेट बनाने में मदद मिल सके कोड.

ध्यान दें कि Android के लिए बनाने के लिए आपकेandroid_sdk_repository WORKSPACE फ़ाइल.

ज़्यादा जानकारी के लिए, Basel के साथ Android NDK का इस्तेमाल करने से जुड़े पूरे दस्तावेज़.

उदाहरण

android_ndk_repository(
    name = "androidndk",
)

ऊपर दिया गया उदाहरण, $ANDROID_NDK_HOME से आपके Android एनडीके (NDK) का पता लगाएगा और का एपीआई लेवल सेट करना होगा.

android_ndk_repository(
    name = "androidndk",
    path = "./android-ndk-r20",
    api_level = 24,
)

ऊपर दिया गया उदाहरण, आपके फ़ाइल फ़ोल्डर में मौजूद Android NDK ./android-ndk-r20. यह जेएनआई को कंपाइल करते समय, एपीआई लेवल 24 लाइब्रेरी का इस्तेमाल करेगा कोड.

सीपीयू फीचर्स

Android NDK में cpufeatures लाइब्रेरी जिसकी मदद से रनटाइम के दौरान किसी डिवाइस के सीपीयू का पता लगाया जा सकता है. नीचे दिए गए उदाहरण में, बेज़ल के साथ cpufeatures.

# jni.cc
#include "ndk/sources/android/cpufeatures/cpu-features.h"
...
# BUILD
cc_library(
    name = "jni",
    srcs = ["jni.cc"],
    deps = ["@androidndk//:cpufeatures"],
)

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

api_level

Integer; optional; nonconfigurable; default is 0

Android एपीआई लेवल, जिसे बेहतर बनाया जाना है. अगर इसके बारे में नहीं बताया गया है, तो सबसे ज़्यादा एपीआई लेवल इंस्टॉल किया गया का इस्तेमाल किया जाएगा.
path

String; optional; nonconfigurable

किसी Android एनडीके का ऐब्सलूट या रिलेटिव पाथ. यह एट्रिब्यूट या $ANDROID_NDK_HOME एनवायरमेंट वैरिएबल सेट करना ज़रूरी है.

Android NDK को यहां से डाउनलोड किया जा सकता है Android डेवलपर साइट .

repo_mapping

Dictionary: String -> String; optional

लोकल रिपॉज़िटरी के नाम से लेकर ग्लोबल रिपॉज़िटरी के नाम तक का डिक्शनरी. इससे आपको इन चीज़ों पर कंट्रोल मिलेगा इस रिपॉज़िटरी की डिपेंडेंसी के लिए वर्कस्पेस डिपेंडेंसी का रिज़ॉल्यूशन.

उदाहरण के लिए, "@foo": "@bar" एंट्री से पता चलता है कि किसी भी समय डेटा स्टोर करने की जगह, "@foo" पर निर्भर करती है (जैसे, डेटा स्टोर करने की जगह "@foo//some:target"), तो इसे वास्तव में दुनिया भर में एलान किया गया "@bar" ("@bar//some:target").

android_sdk_repository

android_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)

इस नीति से, Basel को स्थानीय Android SDK टूल का इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है, ताकि Android टारगेट बनाने में मदद मिल सके.

उदाहरण

Basel के लिए Android SDK सेट अप करने के लिए कम से कम android_sdk_repository नियम होना चाहिए नाम "androidsdk" अपनी WORKSPACE फ़ाइल में और $ANDROID_HOME सेट करें एनवायरमेंट वैरिएबल को ट्रांसफ़र करके. Baज़ल, Android API के सबसे नए लेवल का इस्तेमाल करेगा साथ ही, Android SDK में डिफ़ॉल्ट रूप से इंस्टॉल किए गए टूल वर्शन भी बना सकते हैं.
android_sdk_repository(
    name = "androidsdk",
)

फिर से बनाए जा सकने वाले बिल्ड पक्का करने के लिए, path, api_level और build_tools_version एट्रिब्यूट को खास वैल्यू पर सेट किया जा सकता है. बिल्ड काम नहीं करेगा, अगर Android SDK में, बताया गया एपीआई लेवल या बिल्ड टूल वर्शन इंस्टॉल नहीं किया गया है.

android_sdk_repository(
    name = "androidsdk",
    path = "./sdk",
    api_level = 19,
    build_tools_version = "25.0.0",
)

ऊपर दिए गए उदाहरण में, Android SDK के वर्कस्पेस से जुड़े पाथ का इस्तेमाल करने का तरीका भी बताया गया है. यह है तब काम का है, जब Android SDK आपके Basel Workspace का हिस्सा है (उदाहरण के लिए, अगर उसे वर्शन में चेक इन किया गया हो नियंत्रण).

सहायता लाइब्रेरी

सहायता लाइब्रेरी, Android SDK Manager में "Android सहायता डेटा स्टोर करने की जगह" के तौर पर उपलब्ध हैं. यह सामान्य Android लाइब्रेरी का एक वर्शन वाला सेट है, जैसे कि Support और AppCompat लाइब्रेरी, जिसे लोकल Maven रिपॉज़िटरी के तौर पर पैकेज किया जाता है. android_sdk_repository, Basel को जनरेट करता है में से प्रत्येक लाइब्रेरी के लिए लक्षित होते हैं जिनका उपयोग android_binary और android_library टारगेट.

जनरेट किए गए टारगेट के नाम, यहां दी गई लाइब्रेरी के Maven कोऑर्डिनेट से लिए जाते हैं: Android सहायता डेटा संग्रह स्थान, @androidsdk//${group}:${artifact}-${version} के फ़ॉर्मैट में. यहां दिए गए उदाहरण में बताया गया है कि android_library, कैसे v7 appcompet लाइब्रेरी पर अपडेट करें.

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

तर्क

विशेषताएं
name

Name; required

इस टारगेट के लिए यूनीक नाम.

api_level

Integer; optional; nonconfigurable; default is 0

डिफ़ॉल्ट रूप से बनाया जाने वाला Android एपीआई लेवल. अगर इसके लिए वैल्यू तय नहीं की गई है, तो एपीआई लेवल की सबसे ज़्यादा वैल्यू होने पर इंस्टॉल किया जाएगा.

किसी दिए गए बिल्ड के लिए इस्तेमाल किए गए एपीआई लेवल को android_sdk से बदला जा सकता है फ़्लैग करें. android_sdk_repository इसके लिए android_sdk का टारगेट बनाता है SDK टूल में इंस्टॉल किए गए हर एपीआई लेवल को, @androidsdk//:sdk-${level} नाम से इंस्टॉल किया जाता है, यह एट्रिब्यूट तय किया गया है या नहीं. उदाहरण के लिए, नॉन-डिफ़ॉल्ट एपीआई को लागू करने के लिए लेवल: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app.

android_sdk_repository के जनरेट किए गए सभी android_sdk टारगेट देखने के लिए, bazel query "kind(android_sdk, @androidsdk//...)" चलाया जा सकता है.

build_tools_version

String; optional; nonconfigurable

Android SDK में इस्तेमाल करने के लिए, Android बिल्ड टूल का वर्शन. अगर इसके बारे में नहीं बताया गया है, बिल्ड टूल के इंस्टॉल किए गए सबसे नए वर्शन का इस्तेमाल किया जाएगा.

Baज़र के लिए, बिल्ड टूल का 30.0.0 या उसके बाद का वर्शन होना ज़रूरी है.

path

String; optional; nonconfigurable

किसी Android SDK टूल का ऐब्सलूट या रिलेटिव पाथ. यह एट्रिब्यूट या $ANDROID_HOME एनवायरमेंट वैरिएबल सेट करना ज़रूरी है.

Android SDK टूल को यहां से डाउनलोड किया जा सकता है Android डेवलपर साइट पर जाकर देखें.

repo_mapping

Dictionary: String -> String; optional

लोकल रिपॉज़िटरी के नाम से लेकर ग्लोबल रिपॉज़िटरी के नाम तक का डिक्शनरी. इससे आपको इन चीज़ों पर कंट्रोल मिलेगा इस रिपॉज़िटरी की डिपेंडेंसी के लिए वर्कस्पेस डिपेंडेंसी का रिज़ॉल्यूशन.

उदाहरण के लिए, "@foo": "@bar" एंट्री से पता चलता है कि किसी भी समय डेटा स्टोर करने की जगह, "@foo" पर निर्भर करती है (जैसे, डेटा स्टोर करने की जगह "@foo//some:target"), तो इसे वास्तव में दुनिया भर में एलान किया गया "@bar" ("@bar//some:target").