नियम
- 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 संग्रह जिसमें इस टारगेट का अस्थायी तौर पर बंद होना.डिप्लॉय जार में वे सभी क्लास शामिल हैं जो किसी क्लासलोडर जिसने इस टारगेट के रनटाइम क्लासपाथ को खोजा शुरू से आखिर तक.
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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट रूप से android_library ,
android कंस्ट्रेंट और java_library के साथ
cc_library के लिए .so नेटिव लाइब्रेरी को रैप करना या बनाना
Android टारगेट प्लैटफ़ॉर्म.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट रूप से
|
assets
|
लेबल की सूची; डिफ़ॉल्ट रूप से glob होता है
assets डायरेक्ट्री. आप अन्य नियमों का संदर्भ भी दे सकते हैं (ऐसा कोई भी नियम जो
फ़ाइलें) या अन्य पैकेज में निर्यात की गई फ़ाइलें होती हैं, बशर्ते वे सभी फ़ाइलें
assets_dir डायरेक्ट्री, उससे जुड़े पैकेज में है.
|
assets_dir
|
String; assets में फ़ाइलों का पाथ देने वाली स्ट्रिंग.
assets और assets_dir , पैकेज के बारे में बताते हैं
ऐसेट और दोनों में से कोई एक एट्रिब्यूट दिया जाना चाहिए या फिर कोई भी नहीं दिया जाना चाहिए.
|
crunch_png
|
बूलियन; |
custom_package
|
String; |
debug_key
|
लेबल; डिफ़ॉल्ट रूप से चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता. |
debug_signing_keys
|
लेबल की सूची; डिफ़ॉल्ट रूप से चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता. |
debug_signing_lineage_file
|
लेबल; डिफ़ॉल्ट रूप से चेतावनी: अपनी प्रोडक्शन कुंजियों का इस्तेमाल न करें, उन्हें ऐसा करना चाहिए सख्ती से सुरक्षित रखा जाता है और उसे आपके सोर्स ट्री में नहीं रखा जाता. |
densities
|
स्ट्रिंग की सूची; |
dex_shards
|
पूर्णांक; ध्यान दें कि फ़ाइनल ऐप्लिकेशन में हर शार्ड से कम से कम एक डेक्स मिलता है. इस वजह से, रिलीज़ बाइनरी के लिए, इसे 1 से ज़्यादा पर सेट करने का सुझाव नहीं दिया जाता. |
dexopts
|
स्ट्रिंग की सूची; |
enable_data_binding
|
बूलियन; डेटा बाइंडिंग वाला Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:
|
incremental_dexing
|
पूर्णांक; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से |
instruments
|
लेबल; डिफ़ॉल्ट रूप से इंस्ट्रुमेंट पर अगर इस एट्रिब्यूट को सेट किया जाता है, तो इस |
javacopts
|
स्ट्रिंग की सूची; ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
key_rotation_min_sdk
|
String; |
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
|
शब्दकोश: स्ट्रिंग -> String;
मेनिफ़ेस्ट में
जब |
multidex
|
String; अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है वैल्यू, इनमें से कोई हो सकती है:
|
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
|
लेबल की सूची; डिफ़ॉल्ट रूप से glob होता है
res डायरेक्ट्री.
अभी तक किसी भी व्यक्ति ने चेक इन नहीं किया है जनरेट की गई फ़ाइलों (genrules से) का रेफ़रंस इनसे लिया जा सकता है यहां भी लेबल करें. पाबंदी सिर्फ़ यह है कि जनरेट किए गए आउटपुट, " 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)
इस नियम के तहत, .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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
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 ,
android कंस्ट्रेंट और java_library के साथ
cc_library में .so नेटिव लाइब्रेरी को रैप करना या बनाना
Android टारगेट प्लैटफ़ॉर्म के लिए.
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट रूप से .java या .srcjar फ़ाइलों की सूची जिसमें
जिन्हें टारगेट बनाने के लिए प्रोसेस किया जाता है.
अगर |
assets
|
लेबल की सूची; डिफ़ॉल्ट रूप से glob होता है
assets डायरेक्ट्री. आप अन्य नियमों का संदर्भ भी दे सकते हैं (ऐसा कोई भी नियम जो
फ़ाइलें) या अन्य पैकेज में निर्यात की गई फ़ाइलें होती हैं, बशर्ते वे सभी फ़ाइलें
assets_dir डायरेक्ट्री, उससे जुड़े पैकेज में है.
|
assets_dir
|
String; assets में फ़ाइलों का पाथ देने वाली स्ट्रिंग.
assets और assets_dir , पैकेज के बारे में बताते हैं
ऐसेट और दोनों में से कोई एक एट्रिब्यूट दिया जाना चाहिए या फिर कोई भी नहीं दिया जाना चाहिए.
|
custom_package
|
String; |
enable_data_binding
|
बूलियन; डेटा बाइंडिंग वाला Android ऐप्लिकेशन बनाने के लिए, आपको ये काम भी करने होंगे:
|
exported_plugins
|
लेबल की सूची; डिफ़ॉल्ट रूप से java_plugin की सूची (उदाहरण के लिए, एनोटेशन
प्रोसेसर) शामिल करें.
|
exports
|
लेबल की सूची; डिफ़ॉल्ट रूप से exports एट्रिब्यूट के ज़रिए, सभी नियमों को बंद किया गया
ऐसे किसी भी नियम की प्रत्यक्ष निर्भरता माने जाते हैं, जो आपकी
exports के साथ टारगेट.
|
exports_manifest
|
पूर्णांक; android_binary टारगेट में एक्सपोर्ट करना है या नहीं
जो इस टारगेट पर निर्भर करती हैं. uses-permissions एट्रिब्यूट को कभी एक्सपोर्ट नहीं किया जाता.
|
idl_import_root
|
String; इस पाथ का इस्तेमाल इंपोर्ट रूट के तौर पर किया जाएगा, जब उन idl सोर्स को प्रोसेस किया जाएगा उस लाइब्रेरी पर निर्भर करते हैं. जब |
idl_parcelables
|
लेबल की सूची; डिफ़ॉल्ट रूप से android_library टारगेट
या अपने अस्थायी बंद करने के माध्यम से, लेकिन Java में उसका अनुवाद नहीं किया जाएगा
या कंपाइल न किए जाएं.
सिर्फ़ इन फ़ाइलों को सही जगह पर रखना ज़रूरी है, ताकि एडल कंपाइलर उन्हें ढूंढ सके. 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
प्लगिन एट्रिब्यूट जब भी इस्तेमाल होगा,
इस टारगेट को बनाया जाता है. संसाधन बनाने वाले का नाम
प्लगिन को इसके परिणाम जार में शामिल किया जाएगा
टारगेट किया जा सकता है.
|
proguard_specs
|
लेबल की सूची; डिफ़ॉल्ट रूप से android_binary टारगेट में जोड़ दिया जाएगा.
यहां शामिल की गई फ़ाइलों में सिर्फ़ पहचान बदलने वाले नियम होने चाहिए, जैसे कि -dontnote, -dontvarn,
माना जाता है कि -keep से शुरू होने वाले नियम और साइड इफ़ेक्ट शामिल हैं. अन्य विकल्प सिर्फ़ यहां दिख सकते हैं
android_binary के ProGuard_specs, ताकि नॉन-टॉटलॉजिकल मर्ज पक्का किए जा सकें.
|
resource_files
|
लेबल की सूची; डिफ़ॉल्ट रूप से 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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
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 फ़्रेमवर्क के साथ काम करता है.
इस बारे में जानकारी के लिए 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-bazel/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-bazel-<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:android-all", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
तर्क
विशेषताएं | |
---|---|
name |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
deps
|
लेबल की सूची; डिफ़ॉल्ट रूप से
|
srcs
|
लेबल की सूची; डिफ़ॉल्ट रूप से
अन्य सभी फ़ाइलों को तब तक अनदेखा किया जाता है, जब तक ऊपर बताई गई फ़ाइल टाइप की कम से कम एक फ़ाइल मौजूद हो. अगर ऐसा नहीं है, तो कोई गड़बड़ी हुई है.
|
custom_package
|
String; test_class का भी इस्तेमाल करना होगा.
|
densities
|
स्ट्रिंग की सूची; |
enable_data_binding
|
बूलियन; |
javacopts
|
स्ट्रिंग की सूची; ग्लोबल कंपाइलर विकल्पों के बाद, ये कंपाइलर विकल्प javac को पास किए जाते हैं. |
jvm_flags
|
स्ट्रिंग की सूची; Java बाइनरी के लिए रैपर स्क्रिप्ट में एक CLASSPATH परिभाषा शामिल है
(सभी डिपेंडेंट जार ढूंढने के लिए) और सही Java इंटरप्रेटर को शुरू करता है.
रैपर स्क्रिप्ट से जनरेट की गई कमांड लाइन में
मुख्य क्लास के बाद ध्यान दें कि इस एट्रिब्यूट का |
manifest
|
लेबल; डिफ़ॉल्ट रूप से AndroidManifest.xml .
यह तय करना ज़रूरी है कि रिसॉर्स_फ़ाइलों या ऐसेट के बारे में जानकारी दी गई हो या इनमें से किसी
जांच की जा रही लाइब्रेरी में minSdkVersion टैग मौजूद है.
|
manifest_values
|
शब्दकोश: स्ट्रिंग -> String; applicationId , versionCode , versionName ,
minSdkVersion , targetSdkVersion , और
maxSdkVersion , इससे जुड़े एट्रिब्यूट को भी बदल देगा
के मेनिफ़ेस्ट और
का इस्तेमाल करता है. packageName को अनदेखा कर दिया जाएगा और इसे इनमें से किसी एक पर सेट किया जाएगा
applicationId अगर
बताया गया हो या फिर मेनिफ़ेस्ट में पैकेज शामिल हो.
Manifest_values का इस्तेमाल करने के लिए, नियम में मेनिफ़ेस्ट होना ज़रूरी नहीं है.
|
nocompress_extensions
|
स्ट्रिंग की सूची; |
plugins
|
लेबल की सूची; डिफ़ॉल्ट रूप से java_plugin , जब भी यह नियम लागू होगा, तब ट्रिगर की जाएगी
बनाया जाता है. कोई लाइब्रेरी उन डिपेंडेंसी से प्लगिन भी इनहेरिट कर सकती है जिनका इस्तेमाल किया जाता है
exported_plugins . रिसोर्स
प्लगिन से जनरेट की गई वैल्यू को इस नियम के नतीजे में मिलने वाले जार में शामिल किया जाएगा.
|
resource_configuration_filters
|
स्ट्रिंग की सूची; |
resource_jars
|
लेबल की सूची; डिफ़ॉल्ट रूप से |
resource_strip_prefix
|
String;
अगर बताया गया है, तो |
runtime_deps
|
लेबल की सूची; डिफ़ॉल्ट रूप से deps की तरह, ये रनटाइम क्लासपाथ पर दिखेंगे. हालांकि, ये इनकी तरह नहीं दिखेंगे
नहीं, कंपाइल-टाइम क्लासपाथ पर. सिर्फ़ रनटाइम के दौरान ज़रूरी डिपेंडेंसी
जो यहाँ सूचीबद्ध हैं. डिपेंडेंसी विश्लेषण टूल को उन टारगेट पर ध्यान नहीं देना चाहिए जो दोनों
runtime_deps और deps .
|
stamp
|
पूर्णांक;
स्टैंप वाली बाइनरी को तब तक फिर से नहीं बनाया जाता, जब तक उनकी डिपेंडेंसी नहीं बदलती. |
test_class
|
String;
यह एट्रिब्यूट, उस 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 के नियमों के हिसाब से तय करें.
यह नियम --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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
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)
इससे Baज़ल को Android एनडीके (NDK) का इस्तेमाल करके कॉन्फ़िगर किया जाता है, ताकि नेटिव विज्ञापन के साथ Android टारगेट बनाने में मदद मिल सके कोड.
ध्यान दें कि android_ndk_repository
को लागू करने की इस प्रोसेस को
Starlark में लागू करने की प्रोसेस. एनडीके के 25 और इसके बाद के वर्शन के साथ काम करने की सुविधा
android_ndk_repository
के Starlark वर्शन में लागू की जाएगी. यहां जाएं:
Starlark के लिए rules_android_ndk
वर्शन है.
ध्यान दें कि 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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
api_level
|
पूर्णांक; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से |
path
|
String; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से $ANDROID_NDK_HOME एनवायरमेंट वैरिएबल सेट करना ज़रूरी है.
Android NDK को यहां से डाउनलोड किया जा सकता है Android डेवलपर साइट . |
repo_mapping
|
शब्दकोश: स्ट्रिंग -> String; उदाहरण के लिए, |
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 |
नाम; आवश्यक इस टारगेट के लिए यूनीक नाम. |
api_level
|
पूर्णांक; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से किसी दिए गए बिल्ड के लिए इस्तेमाल किए गए एपीआई लेवल को
|
build_tools_version
|
String; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से Baज़र के लिए, बिल्ड टूल का 30.0.0 या उसके बाद का वर्शन होना ज़रूरी है. |
path
|
String; कॉन्फ़िगर नहीं किया जा सकता; डिफ़ॉल्ट रूप से $ANDROID_HOME एनवायरमेंट वैरिएबल सेट करना ज़रूरी है.
Android SDK टूल को यहां से डाउनलोड किया जा सकता है Android डेवलपर साइट पर जाकर देखें. |
repo_mapping
|
शब्दकोश: स्ट्रिंग -> String; उदाहरण के लिए, |