नियम
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
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 संग्रह, जिसमें इस टारगेट का ट्रांज़िटिव क्लोज़र मौजूद है.डिप्लॉय किए गए jar में वे सभी क्लास होती हैं जो किसी क्लासलोडर को मिलती हैं. यह क्लासलोडर, इस टारगेट के रनटाइम क्लासपाथ को शुरू से लेकर आखिर तक खोजता है.
name_proguard.jar
: एक Java संग्रह जिसमेंname_deploy.jar
पर ProGuard चलाने का नतीजा शामिल है. यह आउटपुट सिर्फ़ तब जनरेट होता है, जब proguard_specs एट्रिब्यूट के बारे में बताया गया हो.name_proguard.map
:name_deploy.jar
पर ProGuard चलाने की वजह से, मैप करने वाली फ़ाइल का नतीजा. यह आउटपुट सिर्फ़ तब जनरेट होता है, जब proguard_specs एट्रिब्यूट के बारे में बताया गया हो और proguard_generate_mapping या shrink_resources सेट किया गया हो.
उदाहरण
Android के नियमों के उदाहरण, बैजल सोर्स ट्री की examples/android
डायरेक्ट्री में मिल सकते हैं.
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट android_library ,
java_library , जिसमें android शर्त हो और
cc_library , Android टारगेट प्लैटफ़ॉर्म के लिए .so नेटिव लाइब्रेरी को रैप किया गया हो या बनाई गई हो.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट
|
assets
|
लेबल की सूची; डिफ़ॉल्ट assets डायरेक्ट्री के तहत आने वाली सभी फ़ाइलों का
glob होता है. आपके पास अन्य नियमों (फ़ाइलें बनाने वाला कोई भी नियम) या अन्य पैकेज में एक्सपोर्ट की गई फ़ाइलों का रेफ़रंस देने का विकल्प है. इसके लिए, यह ज़रूरी है कि वे सभी फ़ाइलें, उनसे जुड़े पैकेज में assets_dir डायरेक्ट्री में मौजूद हों.
|
assets_dir
|
स्ट्रिंग; डिफ़ॉल्ट रूप से assets में फ़ाइलों का पाथ देने वाली स्ट्रिंग.
assets और assets_dir , पैकेज की गई ऐसेट के बारे में बताते हैं.
साथ ही, दोनों एट्रिब्यूट की वैल्यू दी जानी चाहिए या उनमें से कोई भी एट्रिब्यूट नहीं दिया जाना चाहिए.
|
crunch_png
|
बूलियन; डिफ़ॉल्ट तौर पर |
custom_package
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
debug_key
|
लेबल; डिफ़ॉल्ट चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उनकी सख्ती से सुरक्षा की जानी चाहिए और उन्हें आपके सोर्स ट्री में नहीं रखा जाना चाहिए. |
debug_signing_keys
|
लेबल की सूची; डिफ़ॉल्ट चेतावनी: प्रोडक्शन पासकोड का इस्तेमाल न करें. इन्हें पूरी तरह से सुरक्षित रखें और अपने सोर्स ट्री में न रखें. |
debug_signing_lineage_file
|
लेबल; डिफ़ॉल्ट चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उनकी सख्ती से सुरक्षा की जानी चाहिए और उन्हें आपके सोर्स ट्री में नहीं रखा जाना चाहिए. |
densities
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
dex_shards
|
पूर्णांक; डिफ़ॉल्ट वैल्यू ध्यान दें कि हर शर्ड की वजह से, फ़ाइनल ऐप्लिकेशन में कम से कम एक dex बनेगा. इस वजह से, रिलीज़ बाइनरी के लिए इसे एक से ज़्यादा पर सेट करने का सुझाव नहीं दिया जाता. |
dexopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |
enable_data_binding
|
बूलियन; डिफ़ॉल्ट डेटा बाइंडिंग की सुविधा के साथ Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:
|
incremental_dexing
|
पूर्णांक; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट |
instruments
|
लेबल; डिफ़ॉल्ट इंस्ट्रुमेंट पर अगर यह एट्रिब्यूट सेट है, तो इस |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
key_rotation_min_sdk
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
main_dex_list
|
लेबल; डिफ़ॉल्ट 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
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |
main_dex_proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट multidex एट्रिब्यूट को legacy पर सेट किया गया हो.
|
manifest
|
लेबल; ज़रूरी है Android मेनिफ़ेस्ट फ़ाइल का नाम, आम तौर परAndroidManifest.xml .
अगरResource_files या ऐसेट के बारे में बताया गया है, तो यह तय करना ज़रूरी है.
|
manifest_values
|
डिक्शनरी: स्ट्रिंग -> स्ट्रिंग; डिफ़ॉल्ट
मेनिफ़ेस्ट में
जब |
multidex
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर वैल्यू इस तरह की हो सकती हैं:
|
nocompress_extensions
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |
package_id
|
पूर्णांक; डिफ़ॉल्ट ज़्यादा जानकारी के लिए, AAPT2 का |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. प्लग इन से जनरेट किए गए रिसॉर्स,
टारगेट के रिज़ल्ट जार में
शामिल किए जाएंगे.
|
proguard_apply_dictionary
|
लेबल; डिफ़ॉल्ट |
proguard_apply_mapping
|
लेबल; डिफ़ॉल्ट proguard_generate_mapping से जनरेट की गई मैपिंग फ़ाइल का फिर से इस्तेमाल किया जाएगा.
|
proguard_generate_mapping
|
बूलियन; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट है proguard_specs
दिया गया हो. इस फ़ाइल में, मूल और अस्पष्ट
क्लास, तरीके, और फ़ील्ड के नामों के बीच मैपिंग की जानकारी शामिल होगी.
चेतावनी: अगर इस एट्रिब्यूट का इस्तेमाल किया जाता है, तो Proguard के लिए बनी खास जानकारी में |
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट |
resource_configuration_filters
|
स्ट्रिंग की सूची; डिफ़ॉल्ट en_XA और/या ar_XB pseudo-locales शामिल करें.
|
resource_files
|
लेबल की सूची; डिफ़ॉल्ट res डायरेक्ट्री के तहत आने वाली सभी फ़ाइलों का
glob होता है.
जनरेट की गई फ़ाइलों (genआप से मिली जानकारी) का रेफ़रंस, यहां लेबल से भी दिया जा सकता है. सिर्फ़ यह पाबंदी है कि जनरेट किए गए आउटपुट, किसी भी दूसरी रिसॉर्स फ़ाइल की तरह ही " res " डायरेक्ट्री में होने चाहिए.
|
shrink_resources
|
पूर्णांक; डिफ़ॉल्ट manifest और resource_files एट्रिब्यूट) का इस्तेमाल करने वाले नियमों के लिए काम करता है. साथ ही, ProGuard की ज़रूरत होती है.
यह Gradle के संसाधन को छोटा करने वाले टूल (https://developer.android.com/studio/build/shrink-code.html#shrink-resources) की तरह ही काम करता है.
अहम अंतर:
name_files/resource_shrinker.log
भी जनरेट होगा. इसमें, विश्लेषण और मिटाए गए डेटा की जानकारी होगी.
जितनी तरह के साइटमैप हो सकते हैं उनकी जानकारी यहां दी गई है:
|
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)
इस नियम की मदद से, android_library
और
android_binary
नियमों के लिए, .aar
फ़ाइलों को लाइब्रेरी के तौर पर इस्तेमाल किया जा सकता है.
उदाहरण
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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
aar
|
लेबल; ज़रूरी है इस टारगेट पर निर्भर Android टारगेट को उपलब्ध कराने के लिए.aar फ़ाइल.
|
exports
|
लेबल की सूची; डिफ़ॉल्ट |
srcjar
|
लेबल; डिफ़ॉल्ट |
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 |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट android_library ,
java_library , जिसमें android शर्त हो और
cc_library Android टारगेट प्लैटफ़ॉर्म के लिए, .so नेटिव लाइब्रेरी को रैप किया गया हो या बनाई गई हो.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट .java या .srcjar फ़ाइलों की सूची.
अगर |
assets
|
लेबल की सूची; डिफ़ॉल्ट assets डायरेक्ट्री के तहत आने वाली सभी फ़ाइलों का
glob होता है. अन्य पैकेज में मौजूद अन्य नियमों (ऐसा कोई भी नियम जो फ़ाइलें बनाता है) या एक्सपोर्ट की गई फ़ाइलों का भी रेफ़रंस दिया जा सकता है. हालांकि, ऐसा तब ही किया जा सकता है, जब वे सभी फ़ाइलें उस पैकेज में मौजूद assets_dir डायरेक्ट्री में हों.
|
assets_dir
|
स्ट्रिंग; डिफ़ॉल्ट रूप से assets में मौजूद फ़ाइलों का पाथ बताने वाली स्ट्रिंग.
assets और assets_dir , पैकेज की गई ऐसेट के बारे में बताते हैं.
साथ ही, दोनों एट्रिब्यूट की वैल्यू दी जानी चाहिए या उनमें से कोई भी एट्रिब्यूट नहीं दिया जाना चाहिए.
|
custom_package
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर |
enable_data_binding
|
बूलियन; डिफ़ॉल्ट तौर पर डेटा बाइंडिंग की सुविधा के साथ Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:
|
exported_plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin s (जैसे, एनोटेशन प्रोसेसर) की सूची जो सीधे तौर पर इस लाइब्रेरी पर निर्भर करती हैं.
|
exports
|
लेबल की सूची; डिफ़ॉल्ट exports एट्रिब्यूट की मदद से सेट किए गए सभी नियमों को
पूरी तरह से बंद करना, किसी भी नियम की
सीधे तौर पर निर्भरता के तौर पर माना जाता है. यह नियम सीधे तौर पर, exports वाले टारगेट पर निर्भर करता है.
|
exports_manifest
|
पूर्णांक; डिफ़ॉल्ट वैल्यू android_binary टारगेट में एक्सपोर्ट करना है या नहीं,
जो इस टारगेट पर निर्भर हैं. uses-permissions एट्रिब्यूट कभी एक्सपोर्ट नहीं किए जाते.
|
idl_import_root
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर इस लाइब्रेरी पर निर्भर idl सोर्स को प्रोसेस करते समय, इस पाथ का इस्तेमाल इंपोर्ट रूट के तौर पर किया जाएगा.
उदाहरण देखें. |
idl_parcelables
|
लेबल की सूची; डिफ़ॉल्ट android_library टारगेट के लिए इंपोर्ट के तौर पर उपलब्ध कराया जाएगा. यह टारगेट इस लाइब्रेरी पर निर्भर करता है. इसके अलावा, इसे सीधे तौर पर बंद करने या इसे पूरी तरह बंद करने की सुविधा की मदद से भी उपलब्ध कराया जाएगा. हालांकि, इन्हें Java में अनुवाद या इकट्ठा करके उपलब्ध नहीं कराया जाएगा.
इस लाइब्रेरी में, सिर्फ़ ऐसी aidl कंपाइलर को ये फ़ाइलें ढूंढने के लिए, उन्हें सही जगह पर रखना ज़रूरी है. इसका मतलब जानने के लिए idl_Import_root का ब्यौरा देखें. |
idl_preprocessed
|
लेबल की सूची; डिफ़ॉल्ट android_library टारगेट के लिए इंपोर्ट के तौर पर उपलब्ध कराया जाएगा. यह टारगेट इस लाइब्रेरी पर निर्भर करता है. इसके अलावा, इसे सीधे तौर पर बंद करने या इसे पूरी तरह बंद करने की सुविधा की मदद से भी उपलब्ध कराया जाएगा. हालांकि, इन्हें Java में अनुवाद या इकट्ठा करके उपलब्ध नहीं कराया जाएगा.
इस लाइब्रेरी में, पहले से प्रोसेस की गई सिर्फ़ ऐसी |
idl_srcs
|
लेबल की सूची; डिफ़ॉल्ट srcs के कॉन्टेंट के साथ एक साथ संकलित किया जाएगा.
इन फ़ाइलों को, सीधे तौर पर या ट्रांज़िटिव क्लोज़र के ज़रिए, इस लाइब्रेरी पर निर्भर किसी भी इन फ़ाइलों को सही जगह पर रखना ज़रूरी है, ताकि एडल कंपाइलर उन्हें ढूंढ सके. इसका मतलब जानने के लिए idl_Import_root का ब्यौरा देखें. |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
manifest
|
लेबल; डिफ़ॉल्ट AndroidManifest.xml .
अगरResource_files या ऐसेट के बारे में बताया गया है, तो यह तय करना ज़रूरी है.
|
neverlink
|
बूलियन; डिफ़ॉल्ट तौर पर neverlink के तौर पर मार्क किए गए नियम के आउटपुट का इस्तेमाल, .apk बनाने में नहीं किया जाएगा. यह तब काम आता है, जब स्क्रिप्ट चलाने के दौरान रनटाइम एनवायरमेंट की मदद से लाइब्रेरी उपलब्ध कराई जाए.
|
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin को चलाया जाएगा. प्लग इन से जनरेट किए गए संसाधन, टारगेट के नतीजे के jar में शामिल किए जाएंगे.
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल फ़ाइलों में सिर्फ़ एक जैसे नियम होने चाहिए. जैसे, -dontnote, -dontwarn,
assumenosideeffects, और -keep से शुरू होने वाले नियम. अन्य विकल्प सिर्फ़
android_binary के ProGuard_specs में दिखाए जा सकते हैं, ताकि यह पक्का किया जा सके कि वे ऑटोलॉजिकल तरीके से मर्ज न किए गए हों.
|
resource_files
|
लेबल की सूची; डिफ़ॉल्ट res डायरेक्ट्री के तहत आने वाली सभी फ़ाइलों का
glob होता है.
जनरेट की गई फ़ाइलों (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
, instruments एट्रिब्यूट की मदद से, टेस्ट किए जा रहे android_binary
ऐप्लिकेशन के बारे में बताता है.
उदाहरण
# 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 |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
support_apks
|
लेबल की सूची; डिफ़ॉल्ट |
target_device
|
लेबल; ज़रूरी है वह android_device जिस पर टेस्ट चलाना है. पहले से चल रहे किसी एमुलेटर या किसी फ़िज़िकल डिवाइस पर टेस्ट चलाने के लिए, इन आर्ग्युमेंट का इस्तेमाल करें:
|
test_app
|
लेबल; ज़रूरी है 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 टेस्टिंग फ़्रेमवर्क के साथ काम करता है.
Robolectric लिखने के बारे में जानकारी के लिए, Android Robolectric साइट देखें.
इंप्लिसिट आउटपुट टारगेट
name.jar
: जांच का Java संग्रह.name-src.jar
: सोर्स ("सोर्स jar") वाला संग्रह.name_deploy.jar
: डिप्लॉयमेंट के लिए सही Java डिप्लॉयमेंट संग्रह (सिर्फ़ तब बनाया जाता है, जब साफ़ तौर पर अनुरोध किया गया हो).
उदाहरण
android_local_test
के साथ Robolectric का इस्तेमाल करने के लिए, अपनी WORKSPACE
फ़ाइल में Robolectric की रिपॉज़िटरी जोड़ें:
http_archive( name = "robolectric", urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-bazel-<COMMIT>", sha256 = "<HASH>", ) load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories") robolectric_repositories()
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:android-all", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट
ऊपर बताए गए फ़ाइल टाइप की कम से कम एक फ़ाइल मौजूद होने पर, अन्य सभी फ़ाइलों को अनदेखा कर दिया जाता है. ऐसा न करने पर कोई गड़बड़ी दर्ज की जाती है.
|
custom_package
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर test_class का भी इस्तेमाल करना पड़ सकता है.
|
densities
|
स्ट्रिंग की सूची; डिफ़ॉल्ट |
enable_data_binding
|
बूलियन; डिफ़ॉल्ट |
javacopts
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से कंपाइलर के ये विकल्प, ग्लोबल कंपाइलर विकल्पों के बाद javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; डिफ़ॉल्ट Java बाइनरी के लिए रैपर स्क्रिप्ट में CLASSPATH परिभाषा शामिल होती है, ताकि सभी डिपेंडेंट (आश्रित) jar ढूंढे जा सकें. साथ ही, यह सही Java इंटरप्रेटर को भी चालू करती है.
रैपर स्क्रिप्ट से जनरेट की जाने वाली कमांड लाइन में, मुख्य क्लास का नाम होता है.
इसके बाद, ध्यान दें कि इस एट्रिब्यूट का |
manifest
|
लेबल; डिफ़ॉल्ट AndroidManifest.xml .
अगर resource_files या एसेट की जानकारी दी गई है या जांच में शामिल लाइब्रेरी के किसी भी मेनिफ़ेस्ट में minSdkVersion टैग है, तो इसकी जानकारी देना ज़रूरी है.
|
manifest_values
|
डिक्शनरी: स्ट्रिंग -> स्ट्रिंग; डिफ़ॉल्ट तौर पर applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion , और
maxSdkVersion , मेनिफ़ेस्ट और
uses-sdk टैग के मिलते-जुलते एट्रिब्यूट को भी बदल देंगे. packageName को अनदेखा कर दिया जाएगा. अगर applicationId की वैल्यू दी गई है, तो इसे applicationId से सेट किया जाएगा. अगर applicationId की वैल्यू नहीं दी गई है, तो इसे मेनिफ़ेस्ट में मौजूद पैकेज से सेट किया जाएगा.
Manifest_values का इस्तेमाल करने के लिए, नियम में मेनिफ़ेस्ट होना ज़रूरी नहीं है.
|
nocompress_extensions
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
plugins
|
लेबल की सूची; डिफ़ॉल्ट java_plugin चलाया जाएगा. लाइब्रेरी को उन डिपेंडेंसी से भी प्लग इन इनहेरिट हो सकते हैं जिनमें
exported_plugins का इस्तेमाल किया जाता है. प्लगिन
से जनरेट किए गए रिसॉर्स को, इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
resource_configuration_filters
|
स्ट्रिंग की सूची; डिफ़ॉल्ट रूप से |
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट |
resource_strip_prefix
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
अगर बताया गया है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये deps के उलट, कंपाइल-टाइम क्लासपाथ पर नहीं दिखेंगे. सिर्फ़ रनटाइम पर ज़रूरी डिपेंडेंसी को यहां सूची में शामिल किया जाना चाहिए. डिपेंडेंसी-ऐनालिसिस टूल को उन टारगेट को अनदेखा करना चाहिए जो
runtime_deps और deps , दोनों में दिखते हैं.
|
stamp
|
पूर्णांक; डिफ़ॉल्ट
स्टैंप वाली बाइनरी तब तक फिर से नहीं बनाई जाती, जब तक उनकी डिपेंडेंसी नहीं बदलती. |
test_class
|
स्ट्रिंग; डिफ़ॉल्ट तौर पर
इस एट्रिब्यूट से, उस Java क्लास का नाम पता चलता है जिसे इस टेस्ट से चलाया जाना है. आम तौर पर, इसे सेट करने की ज़रूरत नहीं होती. अगर यह तर्क छोड़ दिया जाता है, तो उस Java क्लास का इस्तेमाल किया जाएगा जिसका नाम इस |
use_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 के नियमों का इस्तेमाल करें.
यह नियम, bazel टेस्ट और blaze के --run_under फ़्लैग के लिए सही टारगेट है चलाएं. यह एक एम्युलेटर शुरू करता है, जांचे जा रहे/चालू किए जा रहे टारगेट को एम्युलेटर में कॉपी करता है, और ज़रूरत के हिसाब से उसकी जांच करता है या उसे चलाता है.
android_device
के तहत केवीएम इमेज बनाई जा सकती हैं. इसके लिए ज़रूरी है कि मौजूदा system_image X86 पर आधारित हो और इसे ज़्यादा से ज़्यादा I686 सीपीयू आर्किटेक्चर के लिए ऑप्टिमाइज़ किया गया हो. KVM का इस्तेमाल करने के लिए, 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 connect कमांड दिया जाएगा.
- --emulator_port: यह वह पोर्ट है जिस पर एमुलेटर के टेल्नेट मैनेजमेंट कंसोल को एक्सपोज़ किया जाता है.
- --enable_display: एम्युलेटर को सही होने पर डिसप्ले से शुरू करता है (डिफ़ॉल्ट रूप से गलत पर सेट होता है).
- --action: start या kill.
- --apks_to_install: एम्युलेटर पर इंस्टॉल किए जाने वाले apks की सूची.
तर्क
विशेषताएं | |
---|---|
name |
नाम; यह ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
cache
|
इंटिजर; ज़रूरी है एम्युलेटर के कैश पार्टीशन का साइज़, मेगाबाइट में. इसकी कम से कम वैल्यू 16 मेगाबाइट है. |
default_properties
|
लेबल; डिफ़ॉल्ट |
horizontal_resolution
|
इंटिजर; ज़रूरी है जिस हॉरिज़ॉन्टल स्क्रीन रिज़ॉल्यूशन को एमुलेट करना है उसका पिक्सल में साइज़. वैल्यू कम से कम 240 होनी चाहिए. |
platform_apks
|
लेबल की सूची; डिफ़ॉल्ट |
ram
|
पूर्णांक; ज़रूरी है डिवाइस के लिए अनुकरण करने के लिए मेगाबाइट में रैम की मात्रा. यह सिर्फ़ डिवाइस पर इंस्टॉल किए गए किसी ऐप्लिकेशन के लिए ही नहीं, बल्कि पूरे डिवाइस के लिए है. कम से कम वैल्यू 64 मेगाबाइट होनी चाहिए. |
screen_density
|
इंटिजर; ज़रूरी है एम्युलेट की गई स्क्रीन की डेंसिटी, पिक्सल प्रति इंच में. इसकी वैल्यू कम से कम 30 पीपीआई होनी चाहिए. |
system_image
|
लेबल; ज़रूरी है एक फ़ाइलग्रुप, जिसमें ये फ़ाइलें शामिल होती हैं:
|
vertical_resolution
|
इंटिजर; ज़रूरी है एमुलेट करने के लिए, वर्टिकल स्क्रीन रिज़ॉल्यूशन पिक्सल में. कम से कम वैल्यू 240 है. |
vm_heap
|
पूर्णांक; ज़रूरी है Android पर वर्चुअल मशीन हीप का साइज़, मेगाबाइट में हर प्रोसेस के लिए इस्तेमाल किया जाएगा. कम से कम वैल्यू 16 मेगाबाइट होनी चाहिए. |
android_ndk_repository
नियम का सोर्स देखेंandroid_ndk_repository(name, api_level, path, repo_mapping)
Bazel को Android NDK का इस्तेमाल करने के लिए कॉन्फ़िगर करता है, ताकि नेटिव कोड की मदद से Android टारगेट बनाए जा सकें.
ध्यान दें कि android_ndk_repository
को लागू करने की प्रोसेस को, Starlark में लागू करने से बदला जा रहा है. एनडीके के 25 और इसके बाद के वर्शन के साथ-साथ आने वाले वर्शन भी android_ndk_repository
के Starlark वर्शन में लागू किए जाएंगे. Starlark वर्शन के लिए,
rules_android_ndk देखें.
ध्यान दें कि Android के लिए बिल्डिंग बनाने के लिए, आपकी WORKSPACE
फ़ाइल में android_sdk_repository
नियम होना भी ज़रूरी है.
ज़्यादा जानकारी के लिए, Bazel के साथ 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-r20
में आपके फ़ाइल फ़ोल्डर में मौजूद Android एनडीके (NDK) का इस्तेमाल करेगा. आपका जेएनआई कोड कंपाइल करते समय, यह एपीआई लेवल 24 लाइब्रेरी का इस्तेमाल करेगा.
सीपीयू की सुविधाएं
Android एनडीके में cpufeatures लाइब्रेरी होती है. इसका इस्तेमाल, रनटाइम के दौरान डिवाइस के सीपीयू का पता लगाने के लिए किया जा सकता है. नीचे दिए गए उदाहरण में, Basel के साथ सीपीयू की सुविधाएं इस्तेमाल करने का तरीका बताया गया है.
# jni.cc #include "ndk/sources/android/cpufeatures/cpu-features.h" ...
# BUILD cc_library( name = "jni", srcs = ["jni.cc"], deps = ["@androidndk//:cpufeatures"], )
तर्क
विशेषताएं | |
---|---|
name |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
api_level
|
पूर्णांक; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट रूप से यह |
path
|
स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट $ANDROID_NDK_HOME एनवायरमेंट वैरिएबल में से किसी एक को सेट करना ज़रूरी है.
Android एनडीके को Android डेवलपर साइट से डाउनलोड किया जा सकता है. |
repo_mapping
|
डिक्शनरी: स्ट्रिंग -> स्ट्रिंग; डिफ़ॉल्ट उदाहरण के लिए, |
android_sdk_repository
नियम का सोर्स देखेंandroid_sdk_repository(name, api_level, build_tools_version, path, repo_mapping)
इस नीति से Basel को स्थानीय Android SDK टूल का इस्तेमाल करने के लिए कॉन्फ़िगर किया जाता है, ताकि Android टारगेट बनाने में मदद मिल सके.
उदाहरण
Basel के लिए Android SDK सेट अप करने का सबसे कम तरीका यह है कि आप अपनीWORKSPACE
फ़ाइल में "androidsdk" नाम का android_sdk_repository
नियम डालें और अपने Android SDK के पाथ के लिए $ANDROID_HOME
एनवायरमेंट वैरिएबल सेट करें. Bazel, डिफ़ॉल्ट रूप से Android SDK टूल में इंस्टॉल किए गए, Android के सबसे ज़्यादा एपीआई लेवल और बिल्ड टूल के वर्शन का इस्तेमाल करेगा.
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 टूल के लिए Workspace से जुड़े पाथ का इस्तेमाल करने का तरीका भी बताया गया है. यह तब काम आता है, जब Android SDK टूल आपके Bazel वर्कस्पेस का हिस्सा हो. उदाहरण के लिए, अगर इसे वर्शन कंट्रोल में शामिल किया गया है.
सपोर्ट लाइब्रेरी
सहायता लाइब्रेरी, Android SDK Manager में "Android सहायता डेटा स्टोर करने की जगह" के तौर पर उपलब्ध हैं.
यह Android की सामान्य लाइब्रेरी का वर्शन वाला सेट है. जैसे, Support और AppCompat लाइब्रेरी, जो लोकल मेवन रिपॉज़िटरी के तौर पर पैकेज की जाती हैं. android_sdk_repository
इन सभी लाइब्रेरी के लिए बेज़ल टारगेट जनरेट करता है, जिनका इस्तेमाल android_binary
और android_library
टारगेट डिपेंडेंसी में किया जा सकता है.
जनरेट किए गए टारगेट के नाम, Android सपोर्ट रिपॉज़िटरी में मौजूद लाइब्रेरी के Maven कोऑर्डिनेट से लिए जाते हैं. इनका फ़ॉर्मैट @androidsdk//${group}:${artifact}-${version}
होता है.
इस उदाहरण में दिखाया गया है कि android_library
, v7 appcompat लाइब्रेरी के वर्शन 25.0.0 पर किस तरह निर्भर हो सकता है.
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 |
नाम; ज़रूरी है इस टारगेट के लिए यूनीक नाम. |
api_level
|
पूर्णांक; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट किसी खास बिल्ड के लिए इस्तेमाल किए गए एपीआई लेवल को
|
build_tools_version
|
स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट रूप से Bazel के लिए, बिल्ड टूल का 30.0.0 या इसके बाद का वर्शन ज़रूरी है. |
path
|
स्ट्रिंग; कॉन्फ़िगर नहीं की जा सकती; डिफ़ॉल्ट $ANDROID_HOME एनवायरमेंट वैरिएबल में से किसी एक को सेट करना ज़रूरी है.
Android SDK को Android डेवलपर साइट से डाउनलोड किया जा सकता है. |
repo_mapping
|
डिक्शनरी: स्ट्रिंग -> स्ट्रिंग; डिफ़ॉल्ट उदाहरण के लिए, |