BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে।
নিবন্ধন আজ!

অ্যান্ড্রয়েডের নিয়ম

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

নিয়ম

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)

অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ ফাইল (.apk) তৈরি করে।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • name .apk : একটি অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্যাকেজ ফাইল ডিবাগ কী সহ স্বাক্ষরিত এবং জিপলাইন করা হয়েছে, এটি আপনার অ্যাপ্লিকেশন বিকাশ এবং ডিবাগ করতে ব্যবহার করা যেতে পারে। ডিবাগ কী দিয়ে স্বাক্ষর করার সময় আপনি আপনার অ্যাপ্লিকেশনটি প্রকাশ করতে পারবেন না।
  • name _unsigned.apk : উপরের ফাইলটির একটি স্বাক্ষরবিহীন সংস্করণ যা জনসাধারণের কাছে প্রকাশের আগে রিলিজ কীগুলির সাথে স্বাক্ষর করা যেতে পারে।
  • name _deploy.jar : একটি জাভা আর্কাইভ যাতে এই টার্গেটের ট্রানজিটিভ ক্লোজার রয়েছে।

    ডিপ্লোয় জারটিতে এমন সমস্ত ক্লাস রয়েছে যা একটি ক্লাসলোডার দ্বারা পাওয়া যাবে যা এই লক্ষ্যের রানটাইম ক্লাসপাথ শুরু থেকে শেষ পর্যন্ত অনুসন্ধান করে।

  • name _proguard.jar : একটি জাভা সংরক্ষণাগার যেখানে _deploy.jar name _deploy.jar চালানোর ফলাফল রয়েছে। এই আউটপুট শুধুমাত্র উত্পাদিত হয় যদি proguard_specs বৈশিষ্ট্য নির্দিষ্ট করা হয়।
  • name _proguard.map : _deploy.jar name _deploy.jar উপর ProGuard চালানোর একটি ম্যাপিং ফাইলের ফলাফল। এই আউটপুটটি শুধুমাত্র তখনই উত্পাদিত হয় যদি proguard_specs অ্যাট্রিবিউট নির্দিষ্ট করা থাকে এবং proguard_generate_mapping বা shrink_resources সেট করা থাকে।

উদাহরণ

বেজেল সোর্স ট্রির 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 এ নির্ভরশীল-অন নিয়মের নাম রাখুন।

srcs টাইপের .srcjar ফাইলগুলি আনপ্যাক করা এবং কম্পাইল করা হয়। (যদি আপনি একটি জেনরুল বা বিল্ড এক্সটেনশন সহ .java ফাইলগুলির একটি সেট তৈরি করতে চান তবে এটি কার্যকর।)

assets

List of labels ; optional

প্যাকেজ করা সম্পদের তালিকা। এটি সাধারণত assets ডিরেক্টরির অধীনে সমস্ত ফাইলের একটি glob । আপনি অন্যান্য নিয়মগুলিও উল্লেখ করতে পারেন (যে কোনও নিয়ম যা ফাইল তৈরি করে) বা অন্যান্য প্যাকেজে রপ্তানি করা ফাইলগুলি, যতক্ষণ না সেই সমস্ত ফাইলগুলি সংশ্লিষ্ট প্যাকেজের assets_dir ডিরেক্টরির অধীনে থাকে।
assets_dir

String; optional

স্ট্রিং assets ফাইলের পথ দেয়। পেয়ার assets এবং assets_dir প্যাকেজ করা সম্পদের বর্ণনা দেয় এবং হয় উভয় অ্যাট্রিবিউট দেওয়া উচিত অথবা তাদের কোনোটিই দেওয়া উচিত নয়।
crunch_png

Boolean; optional; default is True

PNG ক্রাঞ্চিং করুন (বা না)। এটি নয়-প্যাচ প্রক্রিয়াকরণ থেকে স্বাধীন, যা সর্বদা করা হয়। এটি একটি aapt বাগের জন্য একটি অবচিত সমাধান যা aapt2 এ সংশোধন করা হয়েছে৷
custom_package

String; optional

জাভা প্যাকেজ যার জন্য জাভা উত্স তৈরি করা হবে। ডিফল্টরূপে প্যাকেজটি নির্দেশিকা থেকে অনুমান করা হয় যেখানে নিয়ম ধারণকারী 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_signing_keys-এর জন্য সাইনিং লাইনেজ ধারণকারী ফাইল। সাধারণত আপনি ডিফল্ট কী ছাড়া অন্য কী ব্যবহার করতে চান না, তাই এই বৈশিষ্ট্যটি বাদ দেওয়া উচিত।

সতর্কতা: আপনার উত্পাদন কীগুলি ব্যবহার করবেন না, সেগুলিকে কঠোরভাবে সুরক্ষিত করা উচিত এবং আপনার উত্স গাছে রাখা উচিত নয়

densities

List of strings; optional

apk তৈরি করার সময় ফিল্টার করার জন্য ঘনত্ব। এটি APK আকার কমাতে নির্দিষ্ট স্ক্রীন ঘনত্ব সহ একটি ডিভাইস দ্বারা লোড করা হবে না এমন রাস্টার অঙ্কনযোগ্য সংস্থানগুলিকে বের করে দেবে। একটি সংশ্লিষ্ট সামঞ্জস্যপূর্ণ-স্ক্রিন বিভাগটি ম্যানিফেস্টে যোগ করা হবে যদি এটি ইতিমধ্যেই একটি সুপারসেট তালিকা ধারণ না করে।
dex_shards

Integer; optional; default is 1

শার্ডের সংখ্যা ডেক্সিং এর মধ্যে পচানো উচিত। এটি অ্যাপ ইনস্টলেশন এবং স্টার্টআপ সময়ের খরচে অনেক দ্রুত ডেক্সিং করে। বাইনারি যত বড় হবে তত বেশি শার্ড ব্যবহার করা উচিত। পরীক্ষা শুরু করার জন্য 25 একটি ভাল মান।

মনে রাখবেন যে প্রতিটি শার্ডের ফলে চূড়ান্ত অ্যাপে অন্তত একটি ডেক্স থাকবে। এই কারণে, এটিকে 1-এর বেশি সেট করা বাইনারি প্রকাশের জন্য সুপারিশ করা হয় না।

dexopts

List of strings; optional

classes.dex তৈরি করার সময় dx টুলের জন্য অতিরিক্ত কমান্ড-লাইন পতাকা। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।
enable_data_binding

Boolean; optional; default is False

সত্য হলে, এই নিয়মটি resource_files অ্যাট্রিবিউটের মাধ্যমে অন্তর্ভুক্ত লেআউট সংস্থানগুলিতে ডেটা বাইন্ডিং এক্সপ্রেশন প্রক্রিয়া করে। এই সেটিং ব্যতীত, ডেটা বাইন্ডিং এক্সপ্রেশনগুলি বিল্ড ব্যর্থতা তৈরি করে।

ডেটা বাইন্ডিং সহ একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে, আপনাকে অবশ্যই নিম্নলিখিতগুলি করতে হবে:

  1. সমস্ত Android নিয়মগুলির জন্য এই বৈশিষ্ট্যটি সেট করুন যা ট্রানজিটিভভাবে এটির উপর নির্ভর করে৷ কারণ নির্ভরশীলরা রিসোর্স মার্জিংয়ের মাধ্যমে নিয়মের ডেটা বাইন্ডিং এক্সপ্রেশনের উত্তরাধিকারী হয়। তাই তাদের সেই এক্সপ্রেশনগুলিকে পার্স করার জন্য ডেটা বাইন্ডিং দিয়েও তৈরি করতে হবে।
  2. এই অ্যাট্রিবিউট সেট করে এমন সমস্ত লক্ষ্যে ডেটা বাইন্ডিং রানটাইম লাইব্রেরির জন্য একটি deps = এন্ট্রি যোগ করুন। এই লাইব্রেরির অবস্থান আপনার ডিপো সেটআপের উপর নির্ভর করে।
incremental_dexing

Integer; optional; nonconfigurable ; default is -1

ক্রমবর্ধমান ডেক্সিং, ওভাররাইডিং ডিফল্ট এবং --ইনক্রিমেন্টাল_ডেক্সিং পতাকা সহ বা ছাড়াই টার্গেট তৈরি করতে বাধ্য করুন।
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 প্ল্যাটফর্ম সংস্করণ (API স্তর) সেট করে যার জন্য APK-এর স্বাক্ষর তৈরি করতে একটি APK-এর ঘোরানো স্বাক্ষর কী ব্যবহার করা উচিত৷ APK-এর আসল সাইনিং কীটি আগের সমস্ত প্ল্যাটফর্ম সংস্করণের জন্য ব্যবহার করা হবে।
main_dex_list

Label ; optional

একটি পাঠ্য ফাইলে ক্লাস ফাইলের নামের একটি তালিকা রয়েছে। সেই ক্লাস ফাইল দ্বারা সংজ্ঞায়িত ক্লাস প্রাথমিক classes.dex এ রাখা হয়। যেমন:
          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

ফাইলগুলিকে প্রোগার্ড স্পেসিফিকেশন হিসাবে ব্যবহার করা হবে এমন ক্লাসগুলি নির্ধারণ করতে যা অবশ্যই মূল ডেক্সে রাখতে হবে৷ multidex অ্যাট্রিবিউট legacy সেট করা থাকলেই কেবল অনুমোদিত।
manifest

Label ; required

Android ম্যানিফেস্ট ফাইলের নাম, সাধারণত AndroidManifest.xml । resource_files বা সম্পদ সংজ্ঞায়িত করা আবশ্যক।
manifest_values

Dictionary: String -> String; optional

মানগুলির একটি অভিধান যা ম্যানিফেস্টে ওভাররাইড করা হবে৷ ম্যানিফেস্টে ${name}-এর যেকোনো উদাহরণ এই অভিধানে নামের সাথে সম্পর্কিত মান দিয়ে প্রতিস্থাপিত হবে। applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion এবং maxSdkVersion এছাড়াও ম্যানিফেস্ট এবং use-sdk ট্যাগের সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে ওভাররাইড করবে। packageName উপেক্ষা করা হবে এবং নির্দিষ্ট করা হলে অ্যাপ্লিকেশনআইডি বা ম্যানিফেস্টে প্যাকেজ থেকে সেট করা হবে। যখন manifest_merger লিগ্যাসিতে সেট করা হয়, শুধুমাত্র applicationId, versionCode এবং versionName কোনো প্রভাব ফেলবে।
multidex

String; optional; default is "native"

কোডকে একাধিক ডেক্স ফাইলে বিভক্ত করতে হবে কিনা।
সম্ভাব্য মান:
  • native : যখন dex 64K সূচকের সীমা অতিক্রম করা হয় তখন একাধিক dex ফাইলে কোড বিভক্ত করুন। রানটাইমে মাল্টিডেক্স ক্লাস লোড করার জন্য নেটিভ প্ল্যাটফর্ম সমর্থন অনুমান করে। এটি শুধুমাত্র Android L এবং নতুনটির সাথে কাজ করে
  • legacy : যখন dex 64K সূচকের সীমা অতিক্রম করা হয় তখন একাধিক dex ফাইলে কোড বিভক্ত করুন। অনুমান করুন মাল্টিডেক্স ক্লাসগুলি অ্যাপ্লিকেশন কোডের মাধ্যমে লোড করা হয় (অর্থাৎ কোন স্থানীয় প্ল্যাটফর্ম সমর্থন নেই)।
  • manual_main_dex : dex 64K সূচকের সীমা অতিক্রম করলে একাধিক dex ফাইলে কোড বিভক্ত করুন। মেইন_ডেক্স_লিস্ট অ্যাট্রিবিউট ব্যবহার করে একটি টেক্সট ফাইলে ক্লাসের তালিকা প্রদান করে মেইন ডেক্স ফাইলের বিষয়বস্তু নির্দিষ্ট করতে হবে।
  • off : সমস্ত কোড একটি একক ডেক্স ফাইলে কম্পাইল করুন, এমনকি যদি এটি সূচকের সীমা অতিক্রম করে।
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_plugin চালানো হবে। প্লাগইন দ্বারা উত্পন্ন সংস্থানগুলি লক্ষ্যের ফলাফল জারে অন্তর্ভুক্ত করা হবে।
proguard_apply_dictionary

Label ; optional

প্রোগার্ডের জন্য একটি ম্যাপিং হিসাবে ব্যবহার করা ফাইল। অস্পষ্টতার সময় ক্লাস এবং সদস্যদের নাম পরিবর্তন করার সময় "শব্দ" এর একটি লাইন আলাদা করা ফাইল থেকে টানতে হবে।
proguard_apply_mapping

Label ; optional

প্রোগার্ডের জন্য একটি ম্যাপিং হিসাবে ব্যবহার করা ফাইল। একটি নতুন বিল্ডে একই ম্যাপিং প্রয়োগ করতে পুনরায় ব্যবহার করার জন্য 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 স্পেসিফিকেশন হিসাবে ব্যবহার করা ফাইল. এই ফাইলটি প্রোগার্ড দ্বারা ব্যবহৃত স্পেসিফিকেশনের সেট বর্ণনা করবে।
resource_configuration_filters

List of strings; optional

রিসোর্স কনফিগারেশন ফিল্টারগুলির একটি তালিকা, যেমন 'en' যা apk-এর সংস্থানগুলিকে শুধুমাত্র 'en' কনফিগারেশনের মধ্যে সীমাবদ্ধ করবে। সিউডোলোকালাইজেশন সক্ষম করতে, en_XA এবং/অথবা ar_XB সিউডো-লোকেলগুলি অন্তর্ভুক্ত করুন।
resource_files

List of labels ; optional

সম্পদের তালিকা প্যাকেজ করা হবে. এটি সাধারণত res ডিরেক্টরির অধীনে সমস্ত ফাইলের একটি glob
জেনারেট করা ফাইলগুলি (জেনরুল থেকে) লেবেল দ্বারা এখানেও উল্লেখ করা যেতে পারে। একমাত্র সীমাবদ্ধতা হল যে উত্পন্ন আউটপুটগুলিকে অন্তর্ভুক্ত করা অন্যান্য রিসোর্স ফাইলগুলির মতো একই " res " ডিরেক্টরির অধীনে থাকতে হবে।
shrink_resources

Integer; optional; default is -1

সম্পদ সঙ্কুচিত করা হবে কিনা। বাইনারি দ্বারা ব্যবহার করা হয় না এমন সংস্থানগুলি APK থেকে সরানো হবে৷ এটি শুধুমাত্র স্থানীয় সংস্থানগুলি ব্যবহার করে নিয়মগুলির জন্য সমর্থিত (যেমন manifest এবং resource_files বৈশিষ্ট্যগুলি) এবং এর জন্য ProGuard প্রয়োজন৷ এটি গ্র্যাডল রিসোর্স সংকোচনকারী (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 : অ্যান্ড্রয়েড রিসোর্স সঙ্কুচিত বন্ধ করে
  • shrink_resources = -1 : সঙ্কুচিত করা --android_resource_srinking পতাকা দ্বারা নিয়ন্ত্রিত হয়।

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

.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.jar কম্পাইলেশন ক্লাস পাথে নিহিত আছে।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • lib name .jar : একটি জাভা আর্কাইভ।
  • lib name -src.jar : একটি আর্কাইভ যেখানে উৎস রয়েছে ("সোর্স জার")।
  • name .aar : একটি অ্যান্ড্রয়েড 'এআর' বান্ডেল যা এই লক্ষ্যের জাভা সংরক্ষণাগার এবং সংস্থানগুলিকে ধারণ করে। এটি ট্রানজিটিভ ক্লোজার ধারণ করে না।

উদাহরণ

বেজেল সোর্স ট্রির 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 এ নির্ভরশীল-অন নিয়মের নাম রাখুন।

srcs টাইপের .srcjar ফাইলগুলি আনপ্যাক করা এবং কম্পাইল করা হয়। (যদি আপনি একটি জেনরুল বা বিল্ড এক্সটেনশন সহ .java ফাইলগুলির একটি সেট তৈরি করতে চান তবে এটি কার্যকর।)

যদি srcs বাদ দেওয়া হয়, তাহলে deps এ নির্দিষ্ট করা যেকোনো নির্ভরতা এই নিয়ম থেকে রপ্তানি করা হয় (নির্ভরতা রপ্তানি সম্পর্কে আরও তথ্যের জন্য java_library-এর রপ্তানি দেখুন)। যাইহোক, এই আচরণ শীঘ্রই অবমূল্যায়ন করা হবে; এটার উপর নির্ভর না করার চেষ্টা করুন।

assets

List of labels ; optional

প্যাকেজ করা সম্পদের তালিকা। এটি সাধারণত assets ডিরেক্টরির অধীনে সমস্ত ফাইলের একটি glob । আপনি অন্যান্য নিয়মগুলিও উল্লেখ করতে পারেন (যে কোনও নিয়ম যা ফাইল তৈরি করে) বা অন্যান্য প্যাকেজে রপ্তানি করা ফাইলগুলি, যতক্ষণ না সেই সমস্ত ফাইলগুলি সংশ্লিষ্ট প্যাকেজের assets_dir ডিরেক্টরির অধীনে থাকে।
assets_dir

String; optional

স্ট্রিং assets ফাইলের পথ দেয়। পেয়ার assets এবং assets_dir প্যাকেজ করা সম্পদের বর্ণনা দেয় এবং হয় উভয় অ্যাট্রিবিউট দেওয়া উচিত অথবা তাদের কোনোটিই দেওয়া উচিত নয়।
custom_package

String; optional

জাভা প্যাকেজ যার জন্য জাভা উত্স তৈরি করা হবে। ডিফল্টরূপে প্যাকেজটি নির্দেশিকা থেকে অনুমান করা হয় যেখানে নিয়ম ধারণকারী BUILD ফাইল রয়েছে। আপনি একটি ভিন্ন প্যাকেজ নির্দিষ্ট করতে পারেন তবে এটি অত্যন্ত নিরুৎসাহিত করা হয় কারণ এটি অন্যান্য লাইব্রেরির সাথে ক্লাসপাথ দ্বন্দ্ব প্রবর্তন করতে পারে যা শুধুমাত্র রানটাইমে সনাক্ত করা হবে।
enable_data_binding

Boolean; optional; default is False

সত্য হলে, এই নিয়মটি resource_files অ্যাট্রিবিউটের মাধ্যমে অন্তর্ভুক্ত লেআউট সংস্থানগুলিতে ডেটা বাইন্ডিং এক্সপ্রেশন প্রক্রিয়া করে। এই সেটিং ব্যতীত, ডেটা বাইন্ডিং এক্সপ্রেশনগুলি বিল্ড ব্যর্থতা তৈরি করে।

ডেটা বাইন্ডিং সহ একটি অ্যান্ড্রয়েড অ্যাপ তৈরি করতে, আপনাকে অবশ্যই নিম্নলিখিতগুলি করতে হবে:

  1. সমস্ত Android নিয়মগুলির জন্য এই বৈশিষ্ট্যটি সেট করুন যা ট্রানজিটিভভাবে এটির উপর নির্ভর করে৷ কারণ নির্ভরশীলরা রিসোর্স মার্জিংয়ের মাধ্যমে নিয়মের ডেটা বাইন্ডিং এক্সপ্রেশনের উত্তরাধিকারী হয়। তাই তাদের সেই এক্সপ্রেশনগুলিকে পার্স করার জন্য ডেটা বাইন্ডিং দিয়েও তৈরি করতে হবে।
  2. এই অ্যাট্রিবিউট সেট করে এমন সমস্ত লক্ষ্যে ডেটা বাইন্ডিং রানটাইম লাইব্রেরির জন্য একটি deps = এন্ট্রি যোগ করুন। এই লাইব্রেরির অবস্থান আপনার ডিপো সেটআপের উপর নির্ভর করে।
exported_plugins

List of labels ; optional

এই লাইব্রেরির উপর সরাসরি নির্ভর করে এমন লাইব্রেরিতে রপ্তানি করার জন্য java_plugin এর তালিকা (যেমন টীকা প্রসেসর)।

java_plugin s-এর নির্দিষ্ট তালিকা যেকোন লাইব্রেরিতে প্রয়োগ করা হবে যা সরাসরি এই লাইব্রেরির উপর নির্ভর করে, ঠিক যেন সেই লাইব্রেরিটি 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 উভয়ই অবশ্যই idl_import_root এর অধীনে প্রতিনিধিত্ব করে এমন বস্তুর জাভা প্যাকেজ দ্বারা নির্দিষ্ট পাথে থাকতে হবে। যখন idl_import_root নির্দিষ্ট করা না থাকে, তখন idl_parcelables এবং idl_srcs উভয়ই জাভা রুটের অধীনে তাদের প্যাকেজ দ্বারা নির্দিষ্ট পাথে থাকতে হবে।

উদাহরণ দেখুন.

idl_parcelables

List of labels ; optional

আমদানি হিসাবে সরবরাহ করার জন্য Android IDL সংজ্ঞাগুলির তালিকা৷ এই ফাইলগুলি সরাসরি বা এর ট্রানজিটিভ ক্লোজারের মাধ্যমে এই লাইব্রেরির উপর নির্ভর করে এমন যেকোনো android_library টার্গেটের জন্য আমদানি হিসাবে উপলব্ধ করা হবে, কিন্তু জাভাতে অনুবাদ বা সংকলিত করা হবে না।

শুধুমাত্র এই লাইব্রেরিতে .java উত্সের সাথে সরাসরি সঙ্গতিপূর্ণ .aidl ফাইলগুলি অন্তর্ভুক্ত করা উচিত (যেমন, পার্সেলেবলের কাস্টম বাস্তবায়ন), অন্যথায় idl_srcs ব্যবহার করা উচিত।

এই ফাইলগুলিকে অবশ্যই aidl কম্পাইলার খুঁজে পেতে যথাযথভাবে স্থাপন করতে হবে। এর অর্থ কী তা জানতে idl_import_root-এর বিবরণ দেখুন।

idl_preprocessed

List of labels ; optional

আমদানি হিসাবে সরবরাহ করার জন্য প্রিপ্রসেস করা Android IDL সংজ্ঞাগুলির তালিকা৷ এই ফাইলগুলি সরাসরি বা এর ট্রানজিটিভ ক্লোজারের মাধ্যমে এই লাইব্রেরির উপর নির্ভর করে এমন যেকোনো android_library টার্গেটের জন্য আমদানি হিসাবে উপলব্ধ করা হবে, কিন্তু জাভাতে অনুবাদ বা সংকলিত করা হবে না।

এই লাইব্রেরিতে সরাসরি .java উত্সের সাথে সম্পর্কিত শুধুমাত্র প্রাক-প্রসেস করা .aidl ফাইলগুলি অন্তর্ভুক্ত করা উচিত (যেমন, Parcelable এর কাস্টম বাস্তবায়ন), অন্যথায় Android IDL সংজ্ঞাগুলির জন্য idl_srcs ব্যবহার করুন যা জাভা ইন্টারফেসে অনুবাদ করতে হবে এবং অ-প্রিপ্রসেসড AIDL এর জন্য idl_parcelable ব্যবহার করুন নথি পত্র.

idl_srcs

List of labels ; optional

জাভা ইন্টারফেসে অনুবাদ করার জন্য Android IDL সংজ্ঞাগুলির তালিকা। জাভা ইন্টারফেস তৈরি হওয়ার পরে, সেগুলি srcs এর বিষয়বস্তুর সাথে একত্রে কম্পাইল করা হবে।

এই ফাইলগুলি এই লাইব্রেরির উপর নির্ভরশীল যেকোন android_library টার্গেটের জন্য আমদানি হিসাবে উপলব্ধ করা হবে, সরাসরি বা এর ট্রানজিটিভ বন্ধের মাধ্যমে।

এই ফাইলগুলিকে অবশ্যই aidl কম্পাইলার খুঁজে পেতে যথাযথভাবে স্থাপন করতে হবে। এর অর্থ কী তা জানতে 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_plugin চালানো হবে। প্লাগইন দ্বারা উত্পন্ন সংস্থানগুলি লক্ষ্যের ফলাফল জারে অন্তর্ভুক্ত করা হবে।
proguard_specs

List of labels ; optional

Proguard স্পেসিফিকেশন হিসাবে ব্যবহার করা ফাইল. এগুলি Proguard দ্বারা ব্যবহৃত স্পেসিফিকেশনের সেট বর্ণনা করবে। নির্দিষ্ট করা থাকলে, এই লাইব্রেরির উপর নির্ভর করে যেকোন android_binary টার্গেটে সেগুলি যোগ করা হবে। এখানে অন্তর্ভুক্ত ফাইলগুলিতে শুধুমাত্র অদম্য বিধি থাকতে হবে, যেমন -dontnote, -dontwarn, assumenosidefects, এবং নিয়ম যা -keep দিয়ে শুরু হয়। অন্যান্য বিকল্পগুলি শুধুমাত্র android_binary এর proguard_specs-এ উপস্থিত হতে পারে, যাতে অ-টটলজিক্যাল মার্জ নিশ্চিত করা যায়।
resource_files

List of labels ; optional

সম্পদের তালিকা প্যাকেজ করা হবে. এটি সাধারণত res ডিরেক্টরির অধীনে সমস্ত ফাইলের একটি glob
জেনারেট করা ফাইলগুলি (জেনরুল থেকে) লেবেল দ্বারা এখানেও উল্লেখ করা যেতে পারে। একমাত্র সীমাবদ্ধতা হল যে উত্পন্ন আউটপুটগুলিকে অন্তর্ভুক্ত করা অন্যান্য রিসোর্স ফাইলগুলির মতো একই " 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 অ্যাপ্লিকেশনটিকে তার যন্ত্রের বৈশিষ্ট্যের মাধ্যমে পরীক্ষার অধীনে নির্দিষ্ট করে।

উদাহরণ

# 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

ইন্সট্রুমেন্টেশন পরীক্ষা শুরু হওয়ার আগে ডিভাইসে ইনস্টল করার জন্য অন্যান্য APK।
target_device

Label ; required

অ্যান্ড্রয়েড_ডিভাইসটি পরীক্ষা চালানো উচিত।

একটি এমুলেটর যা ইতিমধ্যেই চলছে বা একটি শারীরিক ডিভাইসে পরীক্ষা চালানোর জন্য, এই আর্গুমেন্টগুলি ব্যবহার করুন: --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 নিয়মের ইউনিট পরীক্ষা করার জন্য (একটি ডিভাইসের বিপরীতে)। এটি অ্যান্ড্রয়েড রোবোলেক্ট্রিক টেস্টিং ফ্রেমওয়ার্কের সাথে কাজ করে। রোবোলেক্ট্রিক পরীক্ষা লেখার বিষয়ে বিস্তারিত জানার জন্য অ্যান্ড্রয়েড রোবোলেক্ট্রিক সাইট দেখুন।

অন্তর্নিহিত আউটপুট লক্ষ্য

  • name .jar : পরীক্ষার একটি জাভা সংরক্ষণাগার।
  • name -src.jar : একটি আর্কাইভ যেখানে উৎস রয়েছে ("সোর্স জার")।
  • name _deploy.jar : একটি জাভা ডিপ্লোয় আর্কাইভ স্থাপনের জন্য উপযুক্ত (শুধুমাত্র যদি স্পষ্টভাবে অনুরোধ করা হয়)।

উদাহরণ

android_local_test এর সাথে Robolectric ব্যবহার করতে, আপনার WORKSPACE ফাইলে Robolectric এর সংগ্রহস্থল যোগ করুন:

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

লাইব্রেরিগুলির তালিকা পরীক্ষা করা হবে এবং সেইসাথে অতিরিক্ত লাইব্রেরিগুলি লক্ষ্যের সাথে সংযুক্ত করা হবে। এই অ্যাট্রিবিউটের ট্রানজিটিভ ক্লোজারে অ্যান্ড্রয়েড নিয়মে ঘোষিত সমস্ত সম্পদ, সম্পদ এবং ম্যানিফেস্ট ফাইল পরীক্ষায় উপলব্ধ করা হয়েছে।

aar_import -এ অনুমোদিত নিয়মের তালিকা হল android_library , deps , java_import , java_library , এবং java_lite_proto_library

srcs

List of labels ; optional

লক্ষ্য তৈরি করতে প্রক্রিয়া করা হয় যে উৎস ফাইলের তালিকা. নীচে বর্ণিত বিশেষ ক্ষেত্রে ছাড়া প্রয়োজন.

.java টাইপের srcs ফাইল কম্পাইল করা হয়। পঠনযোগ্যতার জন্য , srcs .java ফাইলের নাম রাখা ভালো নয়। পরিবর্তে, নীচে বর্ণিত হিসাবে srcs এ নির্ভরশীল-অন নিয়মের নাম রাখুন।

srcs টাইপের .srcjar ফাইলগুলি আনপ্যাক করা এবং কম্পাইল করা হয়। (যদি আপনি একটি জেনরুল বা বিল্ড এক্সটেনশন সহ .java ফাইলগুলির একটি সেট তৈরি করতে চান তবে এটি কার্যকর।)

অন্য সব ফাইল উপেক্ষা করা হয়, যতক্ষণ না উপরে বর্ণিত একটি ফাইল প্রকারের অন্তত একটি ফাইল থাকে। অন্যথায় একটি ত্রুটি উত্থাপিত হয়.

srcs অ্যাট্রিবিউট প্রয়োজন এবং খালি হতে পারে না, যতক্ষণ না runtime_deps নির্দিষ্ট করা হয়।

custom_package

String; optional

জাভা প্যাকেজ যেখানে R ক্লাস তৈরি করা হবে। ডিফল্টরূপে প্যাকেজটি নির্দেশিকা থেকে অনুমান করা হয় যেখানে নিয়ম ধারণকারী BUILD ফাইল রয়েছে। আপনি যদি এই বৈশিষ্ট্যটি ব্যবহার করেন, তাহলে আপনাকে সম্ভবত test_class ও ব্যবহার করতে হবে।
densities

List of strings; optional

apk তৈরি করার সময় ফিল্টার করার জন্য ঘনত্ব। একটি সংশ্লিষ্ট সামঞ্জস্যপূর্ণ-স্ক্রিন বিভাগটি ম্যানিফেস্টে যোগ করা হবে যদি এতে ইতিমধ্যেই একটি সুপারসেট StarlarkListing না থাকে।
enable_data_binding

Boolean; optional; default is False

সত্য হলে, এই নিয়মটি এই পরীক্ষার দ্বারা ব্যবহৃত ডেটা-বাইন্ডিং সক্ষম নির্ভরতাগুলিতে ব্যবহৃত ডেটা বাঁধাই রেফারেন্সগুলি প্রক্রিয়া করে। এই সেটিং ব্যতীত, ডেটা-বাইন্ডিং নির্ভরতাগুলির প্রয়োজনীয় বাইনারি-স্তরের কোড জেনারেশন থাকবে না এবং বিল্ড ব্যর্থতা তৈরি করতে পারে।
javacopts

List of strings; optional

এই লাইব্রেরির জন্য অতিরিক্ত কম্পাইলার অপশন। "ভেরিয়েবল তৈরি করুন" প্রতিস্থাপন এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে।

এই কম্পাইলার বিকল্পগুলি গ্লোবাল কম্পাইলার বিকল্পগুলির পরে javac-এ পাস করা হয়।

jvm_flags

List of strings; optional

এই বাইনারি চালানোর জন্য তৈরি করা র্যাপার স্ক্রিপ্টে এম্বেড করার জন্য পতাকার একটি তালিকা। $(অবস্থান) এবং "মেক ভেরিয়েবল" প্রতিস্থাপন, এবং বোর্ন শেল টোকেনাইজেশন সাপেক্ষে

একটি জাভা বাইনারির জন্য র‍্যাপার স্ক্রিপ্টে একটি CLASSPATH সংজ্ঞা রয়েছে (সমস্ত নির্ভরশীল জার খুঁজে বের করার জন্য) এবং সঠিক জাভা দোভাষীকে আহ্বান করে। র‍্যাপার স্ক্রিপ্ট দ্বারা উত্পন্ন কমান্ড লাইনে একটি "$@" দ্বারা অনুসরণ করা প্রধান শ্রেণীর নাম অন্তর্ভুক্ত থাকে যাতে আপনি ক্লাসের নামের পরে অন্যান্য আর্গুমেন্টগুলি পাস করতে পারেন। যাইহোক, 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 এছাড়াও ম্যানিফেস্ট এবং use-sdk ট্যাগের সংশ্লিষ্ট বৈশিষ্ট্যগুলিকে ওভাররাইড করবে৷ packageName উপেক্ষা করা হবে এবং নির্দিষ্ট করা হলে applicationId বা ম্যানিফেস্টের প্যাকেজ থেকে সেট করা হবে। manifest_values ​​ব্যবহার করার জন্য নিয়মে একটি ম্যানিফেস্ট থাকা আবশ্যক নয়।
nocompress_extensions

List of strings; optional

রিসোর্স apk-এ কম্প্রেস ছাড়া ফাইল এক্সটেনশনের একটি তালিকা।
plugins

List of labels ; optional

কম্পাইল-টাইমে চালানোর জন্য জাভা কম্পাইলার প্লাগইন। যখনই এই নিয়মটি তৈরি করা হবে তখন এই বৈশিষ্ট্যটিতে নির্দিষ্ট করা প্রতিটি java_plugin চালানো হবে৷ একটি লাইব্রেরি exported_plugins ব্যবহার করে এমন নির্ভরতা থেকে প্লাগইনগুলিও উত্তরাধিকার সূত্রে পেতে পারে। প্লাগইন দ্বারা উত্পন্ন সম্পদ এই নিয়মের ফলে জার মধ্যে অন্তর্ভুক্ত করা হবে.
resource_configuration_filters

List of strings; optional

রিসোর্স কনফিগারেশন ফিল্টারগুলির একটি তালিকা, যেমন 'en' যা apk-এর সংস্থানগুলিকে শুধুমাত্র 'en' কনফিগারেশনের মধ্যে সীমাবদ্ধ করবে।
resource_jars

List of labels ; optional

অপ্রচলিত: পরিবর্তে java_import এবং deps বা runtime_deps ব্যবহার করুন।
resource_strip_prefix

String; optional

জাভা রিসোর্স থেকে স্ট্রিপ করার জন্য পাথ প্রিফিক্স।

নির্দিষ্ট করা থাকলে, এই পাথ উপসর্গটি resources অ্যাট্রিবিউটের প্রতিটি ফাইল থেকে ছিনিয়ে নেওয়া হয়। এই ডিরেক্টরির অধীনে না থাকা একটি সংস্থান ফাইলের জন্য এটি একটি ত্রুটি। যদি নির্দিষ্ট না করা হয় (ডিফল্ট), রিসোর্স ফাইলের পাথ সোর্স ফাইলের জাভা প্যাকেজের মতো একই যুক্তি অনুসারে নির্ধারিত হয়। উদাহরণস্বরূপ, stuff/java/foo/bar/a.txt এ একটি উৎস ফাইল foo/bar/ 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

জাভা ক্লাস টেস্ট রানার দ্বারা লোড করা হবে।

এই বৈশিষ্ট্যটি এই পরীক্ষার দ্বারা চালানোর জন্য একটি জাভা ক্লাসের নাম নির্দিষ্ট করে। এটি সেট করার প্রয়োজন বিরল। এই যুক্তি বাদ দেওয়া হলে, জাভা ক্লাস যার নাম এই android_local_test নিয়মের name সাথে মিলে যায় সেটি ব্যবহার করা হবে। পরীক্ষার ক্লাস org.junit.runner.RunWith দিয়ে টীকা করা দরকার।

use_launcher

Boolean; optional; default is True

বাইনারি একটি কাস্টম লঞ্চার ব্যবহার করা উচিত কিনা।

যদি এই অ্যাট্রিবিউটটি মিথ্যাতে সেট করা থাকে, তাহলে লঞ্চার অ্যাট্রিবিউট এবং সম্পর্কিত --java_launcher পতাকা এই টার্গেটের জন্য উপেক্ষা করা হবে।

অ্যান্ড্রয়েড ডিভাইস

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_device নিয়মগুলির উপর নির্ভর করতে উত্সাহিত করা হয়৷

এই নিয়মটি --run_under পতাকা থেকে বেজেল টেস্ট এবং ব্লেজ রানের জন্য একটি উপযুক্ত লক্ষ্য। এটি একটি এমুলেটর শুরু করে, এমুলেটরে পরীক্ষা করা/চালানো লক্ষ্যটি অনুলিপি করে এবং এটি পরীক্ষা করে বা উপযুক্ত হিসাবে চালায়।

android_device KVM ছবি তৈরি করতে সহায়তা করে যদি অন্তর্নিহিত সিস্টেম_ইমেজ X86 ভিত্তিক হয় এবং সর্বাধিক I686 CPU আর্কিটেকচারের জন্য অপ্টিমাইজ করা হয়। 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 কানেক্ট ইস্যু করবেন।
  • --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: লিনাক্স কার্নেল এমুলেটর লোড হবে
  • ramdisk.img: initrd ইমেজ বুট করার সময় ব্যবহার করা হবে
  • userdata.img: প্রাথমিক userdata পার্টিশন
  • source.properties: ইমেজ সম্পর্কে তথ্য ধারণকারী একটি বৈশিষ্ট্য ফাইল
এই ফাইলগুলি android sdk-এর অংশ বা তৃতীয় পক্ষের দ্বারা সরবরাহ করা হয় (উদাহরণস্বরূপ Intel x86 ছবি সরবরাহ করে)।
vertical_resolution

Integer; required

অনুকরণ করতে পিক্সেলে উল্লম্ব স্ক্রীন রেজোলিউশন। সর্বনিম্ন মান 240।
vm_heap

Integer; required

ভার্চুয়াল মেশিনের মেগাবাইটের আকার অ্যান্ড্রয়েড প্রতিটি প্রক্রিয়ার জন্য ব্যবহার করবে। সর্বনিম্ন মান হল 16 মেগাবাইট।

android_ndk_repository

android_ndk_repository(name, api_level, path, repo_mapping)

একটি Android NDK ব্যবহার করার জন্য Bazel কনফিগার করে নেটিভ কোড সহ Android লক্ষ্যগুলি তৈরি করতে সহায়তা করে৷

মনে রাখবেন যে Android এর জন্য বিল্ডিংয়ের জন্য আপনার WORKSPACE ফাইলে একটি android_sdk_repository নিয়ম প্রয়োজন।

আরও তথ্যের জন্য, Bazel-এর সাথে Android NDK ব্যবহার করার সম্পূর্ণ ডকুমেন্টেশন পড়ুন।

উদাহরণ

android_ndk_repository(
    name = "androidndk",
)

উপরের উদাহরণটি $ANDROID_NDK_HOME থেকে আপনার Android NDK সনাক্ত করবে এবং এটি সমর্থন করে এমন সর্বোচ্চ API স্তর সনাক্ত করবে৷

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

উপরের উদাহরণটি ./android-ndk-r20 এ আপনার ওয়ার্কস্পেসের ভিতরে অবস্থিত Android NDK ব্যবহার করবে। আপনার JNI কোড কম্পাইল করার সময় এটি API লেভেল 24 লাইব্রেরি ব্যবহার করবে।

cpu বৈশিষ্ট্য

Android NDK-এ cpufeatures লাইব্রেরি রয়েছে যা রানটাইমে ডিভাইসের CPU সনাক্ত করতে ব্যবহার করা যেতে পারে। নিচের উদাহরণটি দেখায় কিভাবে Bazel এর সাথে 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

এন্ড্রয়েড এপিআই লেভেল এর বিরুদ্ধে তৈরি করতে হবে। নির্দিষ্ট না থাকলে, ইনস্টল করা সর্বোচ্চ API স্তর ব্যবহার করা হবে।
path

String; optional; nonconfigurable

একটি Android NDK-এর একটি পরম বা আপেক্ষিক পথ। হয় এই অ্যাট্রিবিউট বা $ANDROID_NDK_HOME এনভায়রনমেন্ট ভেরিয়েবল সেট করতে হবে।

অ্যান্ড্রয়েড এনডিকে অ্যান্ড্রয়েড ডেভেলপার সাইট থেকে ডাউনলোড করা যেতে পারে।

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)

একটি স্থানীয় Android SDK ব্যবহার করার জন্য Bazel কনফিগার করে Android লক্ষ্যগুলি তৈরি করতে সহায়তা করে৷

উদাহরণ

Bazel-এর জন্য একটি Android SDK সেট আপ করার সর্বনিম্ন হল আপনার WORKSPACE ফাইলে "androidsdk" নামে একটি android_sdk_repository নিয়ম রাখা এবং আপনার Android SDK-এর পথে $ANDROID_HOME এনভায়রনমেন্ট ভেরিয়েবল সেট করা৷ Bazel will use the highest Android API level and build tools version installed in the Android SDK by default.
android_sdk_repository(
    name = "androidsdk",
)

To ensure reproducible builds, the path , api_level and build_tools_version attributes can be set to specific values. The build will fail if the Android SDK does not have the specified API level or build tools version installed.

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

The above example also demonstrates using a workspace-relative path to the Android SDK. This is useful if the Android SDK is part of your Bazel workspace (eg if it is checked into version control).

Support Libraries

The Support Libraries are available in the Android SDK Manager as "Android Support Repository". This is a versioned set of common Android libraries, such as the Support and AppCompat libraries, that is packaged as a local Maven repository. android_sdk_repository generates Bazel targets for each of these libraries that can be used in the dependencies of android_binary and android_library targets.

The names of the generated targets are derived from the Maven coordinates of the libraries in the Android Support Repository, formatted as @androidsdk//${group}:${artifact}-${version} . The following example shows how an android_library can depend on version 25.0.0 of the v7 appcompat library.

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

The Android API level to build against by default. If not specified, the highest API level installed will be used.

The API level used for a given build can be overridden by the android_sdk flag. android_sdk_repository creates an android_sdk target for each API level installed in the SDK with name @androidsdk//:sdk-${level} , whether or not this attribute is specified. For example, to build against a non-default API level: bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app .

To view all android_sdk targets generated by android_sdk_repository , you can run bazel query "kind(android_sdk, @androidsdk//...)" .

build_tools_version

String; optional; nonconfigurable

The version of the Android build tools to use from within the Android SDK. If not specified, the latest build tools version installed will be used.

Bazel requires build tools version 30.0.0 or later.

path

String; optional; nonconfigurable

An absolute or relative path to an Android SDK. Either this attribute or the $ANDROID_HOME environment variable must be set.

The Android SDK can be downloaded from the Android developer site .

repo_mapping

Dictionary: String -> String; optional

A dictionary from local repository name to global repository name. This allows controls over workspace dependency resolution for dependencies of this repository.

For example, an entry "@foo": "@bar" declares that, for any time this repository depends on "@foo" (such as a dependency on "@foo//some:target" ), it should actually resolve that dependency within globally-declared "@bar" ( "@bar//some:target" ).