กฎ Android

กฎ

android_binary

ดูแหล่งที่มาของกฎ
android_binary(name, deps, srcs, assets, assets_dir, compatible_with, crunch_png, custom_package, debug_key, debug_signing_keys, debug_signing_lineage_file, densities, deprecation, dex_shards, dexopts, distribs, enable_data_binding, exec_compatible_with, exec_properties, features, incremental_dexing, instruments, javacopts, key_rotation_min_sdk, licenses, main_dex_list, main_dex_list_opts, main_dex_proguard_specs, manifest, manifest_values, multidex, nocompress_extensions, package_id, plugins, proguard_apply_dictionary, proguard_apply_mapping, proguard_generate_mapping, proguard_specs, resource_configuration_filters, resource_files, restricted_to, shrink_resources, tags, target_compatible_with, testonly, visibility)

สร้างไฟล์แพ็กเกจแอปพลิเคชัน Android (.apk)

เป้าหมายเอาต์พุตโดยนัย

  • name.apk: ไฟล์แพ็กเกจแอปพลิเคชัน Android ที่ลงชื่อด้วยคีย์การแก้ไขข้อบกพร่องและ zipaligned สามารถใช้เพื่อพัฒนาและแก้ไขข้อบกพร่องของแอปพลิเคชันได้ คุณจะเผยแพร่แอปพลิเคชันเมื่อลงนามด้วยคีย์การแก้ไขข้อบกพร่องไม่ได้
  • name_unsigned.apk: ไฟล์เวอร์ชันที่ไม่ได้ลงนามของ ไฟล์ด้านบนซึ่งลงนามด้วยคีย์รุ่นก่อนเผยแพร่ต่อสาธารณะได้
  • name_deploy.jar: ที่เก็บถาวร Java ที่มี การปิดทรานซิทีฟของเป้าหมายนี้

    ไฟล์ JAR ที่ใช้ในการติดตั้งใช้งานมีคลาสทั้งหมดที่ ClassLoader จะพบได้ ซึ่งค้นหา Classpath ของรันไทม์ของเป้าหมายนี้ ตั้งแต่ต้นจนจบ

  • name_proguard.jar: ไฟล์เก็บถาวร Java ที่มี ผลลัพธ์ของการเรียกใช้ ProGuard ใน name_deploy.jar เอาต์พุตนี้จะสร้างขึ้นก็ต่อเมื่อระบุแอตทริบิวต์ proguard_specs
  • name_proguard.map: ผลลัพธ์ของไฟล์การแมป การเรียกใช้ ProGuard ใน name_deploy.jar เอาต์พุตนี้จะสร้างขึ้นก็ต่อเมื่อมีการระบุแอตทริบิวต์ proguard_specs และตั้งค่า proguard_generate_mapping หรือ shrink_resources

ตัวอย่าง

ดูตัวอย่างกฎของ Android ได้ในไดเรกทอรี examples/android ของ โครงสร้างแหล่งที่มาของ Bazel

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีอื่นๆ ที่จะลิงก์ไปยังเป้าหมายไบนารี ประเภทไลบรารีที่อนุญาต ได้แก่ android_library, java_library ที่มีข้อจำกัด android และ cc_library การห่อหรือการสร้างไลบรารีเนทีฟ .so สำหรับ แพลตฟอร์มเป้าหมาย Android
srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย

ระบบจะคอมไพล์ไฟล์ srcs ประเภท .java เพื่อให้อ่านง่าย จึงไม่ควรใส่ชื่อของไฟล์ต้นฉบับ .java ที่สร้างขึ้นใน srcs แต่ให้ใส่ชื่อกฎที่ขึ้นอยู่กับใน srcs ตามที่อธิบายไว้ด้านล่างแทน

ระบบจะคลายแพ็กและคอมไพล์ไฟล์ srcs ประเภท .srcjar (ซึ่งจะเป็นประโยชน์หากคุณต้องการสร้างชุดไฟล์ .java ด้วย genrule หรือส่วนขยายบิลด์)

assets

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการเนื้อหาที่จะแพ็กเกจ โดยปกติแล้วจะเป็น glob ของไฟล์ทั้งหมดในไดเรกทอรี assets นอกจากนี้ คุณยังอ้างอิงกฎอื่นๆ (กฎใดก็ตามที่สร้างไฟล์) หรือไฟล์ที่ส่งออกในแพ็กเกจอื่นๆ ได้ ตราบใดที่ไฟล์เหล่านั้นทั้งหมดอยู่ภายใต้ไดเรกทอรี assets_dir ในแพ็กเกจที่เกี่ยวข้อง
assets_dir

สตริง ค่าเริ่มต้นคือ ""

สตริงที่ระบุเส้นทางไปยังไฟล์ใน assets คู่แอตทริบิวต์ assets และ assets_dir อธิบายเนื้อหาที่แพ็กเกจ และควรระบุแอตทริบิวต์ทั้ง 2 รายการหรือไม่มีเลย
crunch_png

บูลีน ค่าเริ่มต้นคือ True

บีบอัด PNG (หรือไม่บีบอัด) ซึ่งไม่เกี่ยวข้องกับการประมวลผลแบบ 9 ช่อง ซึ่งจะดำเนินการเสมอ นี่คือวิธีแก้ปัญหาที่เลิกใช้งานแล้วสำหรับ ข้อบกพร่องของ aapt ซึ่ง ได้รับการแก้ไขใน aapt2 แล้ว
custom_package

สตริง ค่าเริ่มต้นคือ ""

แพ็กเกจ Java ที่จะสร้างแหล่งที่มาของ Java โดยค่าเริ่มต้น ระบบจะอนุมานแพ็กเกจจากไดเรกทอรีที่มีไฟล์ BUILD ซึ่งมีกฎอยู่ คุณระบุแพ็กเกจอื่นได้ แต่ไม่แนะนำให้ทำเนื่องจากอาจทำให้เกิดความขัดแย้งของเส้นทางคลาสกับไลบรารีอื่นๆ ซึ่งจะตรวจพบได้ที่รันไทม์เท่านั้น
debug_key

ป้ายกำกับ ค่าเริ่มต้นคือ "@bazel_tools//tools/android:debug_keystore"

ไฟล์ที่มีที่เก็บคีย์การแก้ไขข้อบกพร่องที่จะใช้ในการลงนาม APK การแก้ไขข้อบกพร่อง โดยปกติแล้วคุณไม่ ต้องการใช้คีย์อื่นที่ไม่ใช่คีย์เริ่มต้น ดังนั้นจึงควรละเว้นแอตทริบิวต์นี้

คำเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คุณควรเก็บรักษาคีย์ดังกล่าวอย่างเคร่งครัดและไม่ควรเก็บไว้ในโครงสร้างแหล่งข้อมูล

debug_signing_keys

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ ที่เก็บคีย์สำหรับแก้ไขข้อบกพร่องที่จะใช้ในการลงนามใน APK สำหรับแก้ไขข้อบกพร่อง โดยปกติแล้ว คุณไม่ ต้องการใช้คีย์อื่นที่ไม่ใช่คีย์เริ่มต้น ดังนั้นจึงควรละเว้นแอตทริบิวต์นี้

คำเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คุณควรเก็บรักษาคีย์ดังกล่าวอย่างเคร่งครัดและไม่ควรเก็บไว้ในโครงสร้างแหล่งข้อมูล

debug_signing_lineage_file

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ที่มีลำดับการลงนามสำหรับ debug_signing_keys โดยปกติแล้ว คุณไม่ ต้องการใช้คีย์อื่นที่ไม่ใช่คีย์เริ่มต้น ดังนั้นจึงควรละเว้นแอตทริบิวต์นี้

คำเตือน: อย่าใช้คีย์เวอร์ชันที่ใช้งานจริง คุณควรเก็บรักษาคีย์ดังกล่าวอย่างเคร่งครัดและไม่ควรเก็บไว้ในโครงสร้างแหล่งข้อมูล

densities

รายการสตริง ค่าเริ่มต้นคือ []

ความหนาแน่นที่จะกรองเมื่อสร้าง APK ซึ่งจะนำทรัพยากร Drawable แบบแรสเตอร์ที่อุปกรณ์ซึ่งมีความหนาแน่นของหน้าจอที่ระบุโหลดไม่ได้ออกเพื่อลดขนาด APK ระบบจะเพิ่มส่วน compatible-screens ที่เกี่ยวข้องลงในไฟล์ Manifest ด้วย หากไฟล์ Manifest ยังไม่มีรายการ superset
dex_shards

จำนวนเต็ม ค่าเริ่มต้นคือ 1

จำนวน Shard ที่ควรแยก Dexing ออก ซึ่งจะทำให้การสร้างไฟล์ DEX เร็วขึ้นมาก แต่จะทำให้เวลาในการติดตั้งและเริ่มต้นแอปนานขึ้น ยิ่งไบนารีมีขนาดใหญ่เท่าใด ก็ควรใช้ Shard มากขึ้นเท่านั้น 25 เป็นค่าที่เหมาะสําหรับการเริ่มต้น ทดสอบ

โปรดทราบว่าแต่ละ Shard จะส่งผลให้มี DEX อย่างน้อย 1 รายการในแอปสุดท้าย ด้วยเหตุนี้ เราจึงไม่แนะนำให้ตั้งค่านี้เป็นมากกว่า 1 สำหรับไบนารีที่เผยแพร่

dexopts

รายการสตริง ค่าเริ่มต้นคือ []

Flag บรรทัดคำสั่งเพิ่มเติมสำหรับเครื่องมือ dx เมื่อสร้าง classes.dex ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell
enable_data_binding

บูลีน ค่าเริ่มต้นคือ False

หากเป็นจริง กฎนี้จะประมวลผลนิพจน์การเชื่อมโยงข้อมูลในทรัพยากรเลย์เอาต์ที่รวมไว้ผ่านแอตทริบิวต์ resource_files หากไม่มีการตั้งค่านี้ นิพจน์การเชื่อมโยงข้อมูลจะทำให้การสร้างล้มเหลว

หากต้องการสร้างแอป Android ด้วยการเชื่อมโยงข้อมูล คุณต้องทำสิ่งต่อไปนี้ด้วย

  1. ตั้งค่าแอตทริบิวต์นี้สำหรับกฎ Android ทั้งหมดที่ขึ้นอยู่กับกฎนี้โดยอ้อม เนื่องจากตัวขึ้นอยู่จะรับช่วงนิพจน์การเชื่อมโยงข้อมูลของกฎผ่านการผสานทรัพยากร ดังนั้นจึงต้องสร้างด้วยการเชื่อมโยงข้อมูลเพื่อแยกวิเคราะห์นิพจน์เหล่านั้นด้วย
  2. เพิ่มdeps =รายการสำหรับไลบรารีรันไทม์การเชื่อมโยงข้อมูลไปยังเป้าหมายทั้งหมด ที่ตั้งค่าแอตทริบิวต์นี้ ตำแหน่งของไลบรารีนี้จะขึ้นอยู่กับการตั้งค่าที่เก็บ
incremental_dexing

จำนวนเต็ม กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ -1

บังคับให้สร้างเป้าหมายโดยมีหรือไม่มีการเพิ่ม DEX โดยลบล้างค่าเริ่มต้น และแฟล็ก --incremental_dexing
instruments

ป้ายกำกับ ค่าเริ่มต้นคือ None

android_binary เป้าหมายที่จะวัด

หากตั้งค่าแอตทริบิวต์นี้ ระบบจะถือว่า android_binary นี้เป็นแอปพลิเคชันทดสอบ สำหรับการทดสอบเครื่องมือ จากนั้นandroid_instrumentation_test เป้าหมายจะระบุเป้าหมายนี้ในแอตทริบิวต์ test_app ได้

javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับเป้าหมายนี้ ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง javac หลังจากตัวเลือกคอมไพเลอร์ส่วนกลาง

key_rotation_min_sdk

สตริง ค่าเริ่มต้นคือ ""

กำหนดเวอร์ชันแพลตฟอร์ม Android ขั้นต่ำ (API ระดับ) ที่ควรใช้คีย์ Signing ที่หมุนเวียนของ APK เพื่อสร้างลายเซ็นของ APK ระบบจะใช้คีย์ Signing เดิมสำหรับ APK กับแพลตฟอร์มเวอร์ชันก่อนหน้าทั้งหมด
main_dex_list

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ข้อความมีรายการชื่อไฟล์คลาส ระบบจะใส่คลาสที่กำหนดโดยไฟล์คลาสเหล่านั้นไว้ใน primaryclasses.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

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกบรรทัดคำสั่งที่จะส่งไปยังเครื่องมือสร้างรายการ dex หลัก ใช้ตัวเลือกนี้เพื่อส่งผลต่อคลาสที่รวมอยู่ในรายการ dex หลัก
main_dex_proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อกำหนด Proguard เพื่อกำหนดคลาสที่ต้องเก็บไว้ใน dex หลัก อนุญาตเฉพาะเมื่อตั้งค่าแอตทริบิวต์ multidex เป็น legacy
manifest

ป้ายกำกับ (ต้องระบุ)

ชื่อของไฟล์ Manifest ของ Android โดยปกติคือ AndroidManifest.xml ต้องกำหนดหากมีการกำหนด resource_files หรือ assets
manifest_values

พจนานุกรม: สตริง -> สตริง ค่าเริ่มต้นคือ {}

พจนานุกรมของค่าที่จะลบล้างในไฟล์ Manifest

ระบบจะแทนที่อินสแตนซ์ของ ${name} ในไฟล์ Manifest ด้วยค่า ที่สอดคล้องกับชื่อในพจนานุกรมนี้

applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion และ maxSdkVersion จะลบล้างแอตทริบิวต์ที่เกี่ยวข้องในไฟล์ Manifest และแท็ก uses-sdk ด้วย

ระบบจะเพิกเฉยต่อ packageName และจะตั้งค่าจาก applicationId หากมีการระบุ หรือจากแพ็กเกจในไฟล์ Manifest

เมื่อตั้งค่า manifest_merger เป็น legacy จะมีเพียง applicationId, versionCode และ versionName เท่านั้น ที่จะมีผล

multidex

สตริง ค่าเริ่มต้นคือ "native"

จะแยกโค้ดออกเป็นไฟล์ DEX หลายไฟล์หรือไม่
ค่าที่เป็นไปได้มีดังนี้
  • native: แยกโค้ดออกเป็นไฟล์ DEX หลายไฟล์เมื่อเกินขีดจำกัดดัชนี 64K ของ DEX ถือว่าแพลตฟอร์มดั้งเดิมรองรับการโหลดคลาส Multidex ที่รันไทม์ ฟีเจอร์นี้ใช้ได้กับ Android L ขึ้นไปเท่านั้น
  • legacy: แยกโค้ดออกเป็นไฟล์ DEX หลายไฟล์เมื่อเกินขีดจำกัดดัชนี 64K ของ DEX ถือว่ามีการโหลดคลาส multidex ผ่านโค้ดแอปพลิเคชัน (เช่น ไม่มีการรองรับแพลตฟอร์มดั้งเดิม)
  • manual_main_dex: แยกโค้ดออกเป็นไฟล์ DEX หลายไฟล์เมื่อเกินขีดจำกัดดัชนี 64K ของ DEX ต้องระบุเนื้อหาของไฟล์ DEX หลักโดย ระบุรายการคลาสในไฟล์ข้อความโดยใช้แอตทริบิวต์ main_dex_list
  • off: คอมไพล์โค้ดทั้งหมดเป็นไฟล์ DEX เดียว แม้ว่าโค้ดจะเกินขีดจำกัดดัชนี ก็ตาม
nocompress_extensions

รายการสตริง ค่าเริ่มต้นคือ []

รายการนามสกุลไฟล์ที่จะไม่บีบอัดใน APK
package_id

จำนวนเต็ม ค่าเริ่มต้นคือ 0

รหัสแพ็กเกจที่จะกำหนดให้กับทรัพยากรในไบนารีนี้

ดูข้อมูลเพิ่มเติมได้ที่อาร์กิวเมนต์ --package-id ของ AAPT2 โดยปกติแล้ว คุณสามารถ (และ ควร) ไม่ต้องตั้งค่านี้ ซึ่งจะทำให้ค่าเริ่มต้นเป็น 127 (0x7F)

plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ Java ที่จะเรียกใช้ในเวลาคอมไพล์ ทุก java_plugin ที่ระบุใน แอตทริบิวต์ปลั๊กอินจะทำงานทุกครั้งที่ สร้างเป้าหมายนี้ ระบบจะรวมทรัพยากรที่ปลั๊กอินสร้างขึ้นไว้ในไฟล์ JAR ของผลลัพธ์ของเป้าหมาย
proguard_apply_dictionary

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ที่จะใช้เป็นการแมปสำหรับ ProGuard ไฟล์ที่มี "คำ" แยกบรรทัดเพื่อดึงข้อมูลเมื่อเปลี่ยนชื่อชั้นเรียนและสมาชิกในระหว่างการ ปกปิด
proguard_apply_mapping

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ที่จะใช้เป็นการแมปสำหรับ ProGuard ไฟล์การแมปที่ proguard_generate_mapping สร้างขึ้นเพื่อ นำกลับมาใช้ซ้ำเพื่อใช้การแมปเดียวกันกับบิลด์ใหม่
proguard_generate_mapping

บูลีน กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ False

จะสร้างไฟล์การจับคู่ Proguard หรือไม่ ระบบจะสร้างไฟล์การแมปก็ต่อเมื่อมีการระบุ proguard_specs เท่านั้น ไฟล์นี้จะแสดงการแมประหว่างชื่อคลาส เมธอด และฟิลด์เดิมกับชื่อที่ผ่านการปกปิด

คำเตือน: หากใช้แอตทริบิวต์นี้ ข้อกำหนด Proguard ไม่ควรมีทั้ง -dontobfuscate และ -printmapping

proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อกำหนด Proguard ไฟล์นี้จะอธิบายชุดข้อกำหนดที่ Proguard ใช้
resource_configuration_filters

รายการสตริง ค่าเริ่มต้นคือ []

รายการตัวกรองการกำหนดค่าทรัพยากร เช่น "en" ซึ่งจะจำกัดทรัพยากรใน APK ให้มีเฉพาะทรัพยากรในการกำหนดค่า "en" เท่านั้น หากต้องการเปิดใช้การแปลหลอก ให้ใส่ภาษาจำลอง en_XA และ/หรือ ar_XB
resource_files

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการทรัพยากรที่จะแพ็กเกจ โดยปกติแล้วจะเป็น glob ของไฟล์ทั้งหมดในไดเรกทอรี res
ไฟล์ที่สร้างขึ้น (จาก genrules) สามารถอ้างอิงได้โดยใช้ ป้ายกำกับที่นี่เช่นกัน ข้อจำกัดเพียงอย่างเดียวคือ เอาต์พุตที่สร้างขึ้นต้องอยู่ภายใต้ไดเรกทอรี "res" เดียวกันกับ ไฟล์ทรัพยากรอื่นๆ ที่รวมไว้
shrink_resources

จำนวนเต็ม ค่าเริ่มต้นคือ -1

จะทำการลดขนาดทรัพยากรหรือไม่ ระบบจะนำทรัพยากรที่ไบนารีไม่ได้ใช้ออกจาก APK โดยจะรองรับเฉพาะกฎที่ใช้ทรัพยากรในเครื่อง (เช่น แอตทริบิวต์ manifest และ resource_files) และต้องใช้ ProGuard โดยจะทำงานในลักษณะเดียวกับเครื่องมือลดขนาดทรัพยากรของ Gradle (https://developer.android.com/studio/build/shrink-code.html#shrink-resources)

ความแตกต่างที่สำคัญ

  • ระบบจะนำทรัพยากรใน values/ ออก รวมถึงทรัพยากรที่อิงตามไฟล์ ด้วย
  • ใช้ strict mode โดยค่าเริ่มต้น
  • การนำทรัพยากร ID ที่ไม่ได้ใช้ออกจะรองรับเฉพาะกับ aapt2
หากเปิดใช้การลดขนาดทรัพยากร ระบบจะสร้าง name_files/resource_shrinker.log ด้วย โดยจะแสดงรายละเอียดการวิเคราะห์และการลบที่ดำเนินการ

ค่าที่เป็นไปได้มีดังนี้

  • shrink_resources = 1: เปิดการลดขนาดทรัพยากร Android
  • shrink_resources = 0: ปิดการลดขนาดทรัพยากร Android
  • shrink_resources = -1: การลดขนาดจะควบคุมโดย Flag --android_resource_shrinking

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"],
    )

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

aar

ป้ายกำกับ (ต้องระบุ)

.aar ไฟล์ที่จะให้แก่เป้าหมาย Android ที่ขึ้นอยู่กับเป้าหมายนี้
exports

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

เป้าหมายที่จะส่งออกไปยังกฎที่ขึ้นอยู่กับกฎนี้ ดู java_library.exports
srcjar

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์ JAR ที่มีซอร์สโค้ดสำหรับไฟล์ JAR ที่คอมไพล์แล้วใน AAR

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: ที่เก็บถาวรที่มี แหล่งที่มา ("ไฟล์ JAR ของแหล่งที่มา")
  • name.aar: บันเดิล 'aar' ของ Android ที่มีที่เก็บถาวรของ Java และทรัพยากรของเป้าหมายนี้ โดยไม่มีการปิดทรานซิทีฟ

ตัวอย่าง

ดูตัวอย่างกฎของ Android ได้ในไดเรกทอรี examples/android ของ โครงสร้างแหล่งที่มาของ Bazel

ตัวอย่างต่อไปนี้แสดงวิธีตั้งค่า 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"],
)

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีอื่นๆ ที่จะลิงก์ด้วย ประเภทไลบรารีที่อนุญาต ได้แก่ android_library, java_library ที่มีข้อจำกัด android และ cc_library การห่อหรือการสร้างไลบรารีเนทีฟ .so สำหรับแพลตฟอร์มเป้าหมาย Android
srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ .java หรือ .srcjar ที่ ประมวลผลเพื่อสร้างเป้าหมาย

ระบบจะคอมไพล์ไฟล์ srcs ประเภท .java เพื่อให้อ่านง่าย จึงไม่ควรใส่ชื่อของไฟล์ต้นฉบับ .java ที่สร้างขึ้นใน srcs แต่ให้ใส่ชื่อกฎที่ขึ้นอยู่กับใน srcs ตามที่อธิบายไว้ด้านล่างแทน

ระบบจะคลายแพ็กและคอมไพล์ไฟล์ srcs ประเภท .srcjar (ซึ่งจะเป็นประโยชน์หากคุณต้องการสร้างชุดไฟล์ .java ด้วย genrule หรือส่วนขยายบิลด์)

หากละเว้น srcs ระบบจะส่งออกการอ้างอิงที่ระบุใน deps จากกฎนี้ (ดูข้อมูลเพิ่มเติมเกี่ยวกับการส่งออกการอ้างอิงได้ที่ การส่งออกของ java_library) อย่างไรก็ตาม ลักษณะการทำงานนี้จะ เลิกใช้งานในเร็วๆ นี้ ดังนั้นโปรดอย่าพึ่งพาลักษณะการทำงานนี้

assets

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการเนื้อหาที่จะแพ็กเกจ โดยปกติแล้วจะเป็น glob ของไฟล์ทั้งหมดในไดเรกทอรี assets นอกจากนี้ คุณยังอ้างอิงกฎอื่นๆ (กฎใดก็ตามที่สร้างไฟล์) หรือไฟล์ที่ส่งออกในแพ็กเกจอื่นๆ ได้ ตราบใดที่ไฟล์เหล่านั้นทั้งหมดอยู่ภายใต้ไดเรกทอรี assets_dir ในแพ็กเกจที่เกี่ยวข้อง
assets_dir

สตริง ค่าเริ่มต้นคือ ""

สตริงที่ระบุเส้นทางไปยังไฟล์ใน assets คู่แอตทริบิวต์ assets และ assets_dir อธิบายเนื้อหาที่แพ็กเกจ และควรระบุแอตทริบิวต์ทั้ง 2 รายการหรือไม่มีเลย
custom_package

สตริง ค่าเริ่มต้นคือ ""

แพ็กเกจ Java ที่จะสร้างแหล่งที่มาของ Java โดยค่าเริ่มต้น ระบบจะอนุมานแพ็กเกจจากไดเรกทอรีที่มีไฟล์ BUILD ซึ่งมีกฎอยู่ คุณระบุแพ็กเกจอื่นได้ แต่ไม่แนะนำให้ทำเนื่องจากอาจทำให้เกิดความขัดแย้งของเส้นทางคลาสกับไลบรารีอื่นๆ ซึ่งจะตรวจพบได้ที่รันไทม์เท่านั้น
enable_data_binding

บูลีน ค่าเริ่มต้นคือ False

หากเป็นจริง กฎนี้จะประมวลผลนิพจน์การเชื่อมโยงข้อมูลในทรัพยากรเลย์เอาต์ที่รวมไว้ผ่านแอตทริบิวต์ resource_files หากไม่มีการตั้งค่านี้ นิพจน์การเชื่อมโยงข้อมูลจะทำให้การสร้างล้มเหลว

หากต้องการสร้างแอป Android ด้วยการเชื่อมโยงข้อมูล คุณต้องทำสิ่งต่อไปนี้ด้วย

  1. ตั้งค่าแอตทริบิวต์นี้สำหรับกฎ Android ทั้งหมดที่ขึ้นอยู่กับกฎนี้โดยอ้อม เนื่องจากตัวขึ้นอยู่จะรับช่วงนิพจน์การเชื่อมโยงข้อมูลของกฎผ่านการผสานทรัพยากร ดังนั้นจึงต้องสร้างด้วยการเชื่อมโยงข้อมูลเพื่อแยกวิเคราะห์นิพจน์เหล่านั้นด้วย
  2. เพิ่มdeps =รายการสำหรับไลบรารีรันไทม์การเชื่อมโยงข้อมูลไปยังเป้าหมายทั้งหมด ที่ตั้งค่าแอตทริบิวต์นี้ ตำแหน่งของไลบรารีนี้จะขึ้นอยู่กับการตั้งค่าที่เก็บ
exported_plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการ java_plugin (เช่น annotation processors) ที่จะส่งออกไปยังไลบรารีที่ขึ้นต่อกันกับไลบรารีนี้โดยตรง

ระบบจะใช้รายการ java_plugin ที่ระบุกับไลบรารีที่ขึ้นต่อกันกับไลบรารีนี้โดยตรง ราวกับว่าไลบรารีนั้นได้ประกาศป้ายกำกับเหล่านี้อย่างชัดแจ้งใน plugins

exports

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

การปิดกฎทั้งหมดที่เข้าถึงผ่านแอตทริบิวต์ exports ถือเป็นทรัพยากร Dependency โดยตรงของกฎใดก็ตามที่ขึ้นอยู่กับเป้าหมายที่มี exports โดยตรง

exports ไม่ใช่การขึ้นต่อโดยตรงของกฎที่ไฟล์เหล่านั้นเป็นของ

exports_manifest

จำนวนเต็ม ค่าเริ่มต้นคือ 1

ว่าจะส่งออกรายการในไฟล์ Manifest ไปยังandroid_binaryเป้าหมาย ที่ขึ้นอยู่กับเป้าหมายนี้หรือไม่ ระบบจะไม่ส่งออกแอตทริบิวต์ uses-permissions
idl_import_root

สตริง ค่าเริ่มต้นคือ ""

เส้นทางที่สัมพันธ์กับแพ็กเกจไปยังรูทของแผนผังแพ็กเกจ Java ที่มีแหล่งที่มาของ IDL ซึ่งรวมอยู่ในไลบรารีนี้

ระบบจะใช้เส้นทางนี้เป็นรูทการนำเข้าเมื่อประมวลผลแหล่งที่มาของ IDL ที่ ขึ้นอยู่กับไลบรารีนี้

เมื่อระบุ idl_import_root ทั้ง idl_parcelables และ idl_srcs ต้องอยู่ในเส้นทางที่ระบุโดยแพ็กเกจ Java ของออบเจ็กต์ที่แสดงภายใต้ idl_import_root เมื่อไม่ได้ระบุ idl_import_root ทั้ง idl_parcelables และ idl_srcs ต้องอยู่ที่เส้นทางที่แพ็กเกจระบุภายใต้รูท Java

ดู ตัวอย่าง

idl_parcelables

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการคำจำกัดความ Android IDL ที่จะระบุเป็นการนำเข้า ระบบจะทำให้ไฟล์เหล่านี้พร้อมใช้งานเป็นการนำเข้าสำหรับandroid_libraryเป้าหมายใดๆ ที่ขึ้นอยู่กับไลบรารีนี้โดยตรง หรือผ่านการปิดทรานซิทีฟ แต่จะไม่แปลเป็น Java หรือคอมไพล์

ควรใส่เฉพาะไฟล์ .aidl ที่สอดคล้องกับแหล่งที่มา .java ในไลบรารีนี้โดยตรง (เช่น การใช้งาน Parcelable ที่กำหนดเอง) ไม่เช่นนั้นควรใช้ idl_srcs

คุณต้องวางไฟล์เหล่านี้อย่างเหมาะสมเพื่อให้คอมไพเลอร์ AIDL ค้นหาได้ ดูข้อมูลเกี่ยวกับความหมายของตัวแปรนี้ได้ที่คำอธิบายของ idl_import_root

idl_preprocessed

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการคำจำกัดความ Android IDL ที่ประมวลผลล่วงหน้าเพื่อจัดหาเป็นข้อมูลนำเข้า ระบบจะทำให้ไฟล์เหล่านี้พร้อมใช้งานเป็นการนำเข้าสำหรับandroid_libraryเป้าหมายใดๆ ที่ขึ้นอยู่กับไลบรารีนี้โดยตรง หรือผ่านการปิดทรานซิทีฟ แต่จะไม่แปลเป็น Java หรือคอมไพล์

ควรมีเฉพาะไฟล์ .aidl ที่ประมวลผลล่วงหน้าซึ่งสอดคล้องกับแหล่งที่มา .java ในไลบรารีนี้โดยตรง (เช่น การใช้งาน Parcelable ที่กำหนดเอง) ไม่เช่นนั้น ให้ใช้ idl_srcs สำหรับคำจำกัดความ IDL ของ Android ที่ต้องแปลเป็นอินเทอร์เฟซ Java และใช้ idl_parcelable สำหรับไฟล์ AIDL ที่ไม่ได้ประมวลผลล่วงหน้า

idl_srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการคำจำกัดความของ Android IDL ที่จะแปลเป็นอินเทอร์เฟซ Java หลังจากสร้างอินเทอร์เฟซ Java แล้ว ระบบจะคอมไพล์อินเทอร์เฟซเหล่านั้นพร้อมกับเนื้อหาของ srcs

ระบบจะทำให้ไฟล์เหล่านี้พร้อมใช้งานเป็นการนำเข้าสำหรับandroid_libraryเป้าหมายใดก็ตามที่ขึ้นอยู่กับไลบรารีนี้ ไม่ว่าจะโดยตรงหรือผ่านการปิดทรานซิทีฟ

คุณต้องวางไฟล์เหล่านี้อย่างเหมาะสมเพื่อให้คอมไพเลอร์ AIDL ค้นหาได้ ดูข้อมูลเกี่ยวกับความหมายของตัวแปรนี้ได้ที่คำอธิบายของ idl_import_root

javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับเป้าหมายนี้ ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง javac หลังจากตัวเลือกคอมไพเลอร์ส่วนกลาง

manifest

ป้ายกำกับ ค่าเริ่มต้นคือ None

ชื่อของไฟล์ Manifest ของ Android โดยปกติคือ AndroidManifest.xml ต้องกำหนดหากมีการกำหนด resource_files หรือ assets

บูลีน ค่าเริ่มต้นคือ False

ใช้ไลบรารีนี้สำหรับการคอมไพล์เท่านั้น และห้ามใช้ในรันไทม์ ระบบจะไม่ใช้เอาต์พุตของกฎที่ทำเครื่องหมายเป็น neverlink ในการสร้าง .apk มีประโยชน์ในกรณีที่สภาพแวดล้อมรันไทม์จะจัดเตรียมไลบรารีในระหว่างการดำเนินการ
plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ Java ที่จะเรียกใช้ในเวลาคอมไพล์ ทุก java_plugin ที่ระบุใน แอตทริบิวต์ปลั๊กอินจะทำงานทุกครั้งที่ สร้างเป้าหมายนี้ ระบบจะรวมทรัพยากรที่ปลั๊กอินสร้างขึ้นไว้ในไฟล์ JAR ของผลลัพธ์ของเป้าหมาย
proguard_specs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไฟล์ที่จะใช้เป็นข้อกำหนด Proguard ซึ่งจะอธิบายชุดข้อกำหนดที่ Proguard จะใช้ หากระบุไว้ ระบบจะเพิ่มลงในเป้าหมาย android_binary ใดก็ตามโดยขึ้นอยู่กับคลังนี้ ไฟล์ที่รวมไว้ที่นี่ต้องมีเฉพาะกฎที่ไม่มีผลข้างเคียง ได้แก่ -dontnote, -dontwarn, assumenosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏได้เฉพาะใน android_binary's 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",
)

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

support_apks

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

APK อื่นๆ ที่จะติดตั้งในอุปกรณ์ก่อนเริ่มการทดสอบเครื่องมือ
target_device

ป้ายกำกับ (ต้องระบุ)

android_device ที่ควรใช้ทดสอบ

หากต้องการเรียกใช้การทดสอบในโปรแกรมจำลองที่ทำงานอยู่แล้วหรือในอุปกรณ์จริง ให้ใช้อาร์กิวเมนต์ต่อไปนี้ --test_output=streamed --test_arg=--device_broker_type=LOCAL_ADB_SERVER --test_arg=--device_serial_number=$device_identifier

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กฎในเครื่อง (เทียบกับการทดสอบในอุปกรณ์) โดยทำงานร่วมกับเฟรมเวิร์กการทดสอบ Robolectric ของ Android ดูรายละเอียดเกี่ยวกับการเขียนการทดสอบ Robolectric ได้ที่เว็บไซต์ Android Robolectric

เป้าหมายเอาต์พุตโดยนัย

  • name.jar: ไฟล์เก็บถาวร Java ของการทดสอบ
  • name-src.jar: ที่เก็บถาวรที่มีแหล่งที่มา ("source jar")
  • name_deploy.jar: ไฟล์เก็บถาวรสำหรับการติดตั้งใช้งาน Java ที่เหมาะสม สำหรับการติดตั้งใช้งาน (สร้างขึ้นเฉพาะในกรณีที่มีการขออย่างชัดแจ้ง)

ตัวอย่าง

หากต้องการใช้ Robolectric กับ 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()
ซึ่งจะดึงmaven_jarกฎที่จำเป็นสำหรับ Robolectric จากนั้นกฎ 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",
)

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไลบรารีที่จะทดสอบ รวมถึงไลบรารีเพิ่มเติมที่จะลิงก์ ไปยังเป้าหมาย ระบบจะทำให้ทรัพยากร ชิ้นงาน และไฟล์ Manifest ทั้งหมดที่ประกาศในกฎ Android ในการปิดทรานซิทีฟของแอตทริบิวต์นี้พร้อมใช้งานในการทดสอบ

รายการกฎที่อนุญาตใน deps คือ android_library, aar_import, java_import, java_library, และ java_lite_proto_library

srcs

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการไฟล์ต้นฉบับที่ประมวลผลเพื่อสร้างเป้าหมาย ต้องระบุ ยกเว้นในกรณีพิเศษที่อธิบายไว้ด้านล่าง

ระบบจะคอมไพล์ไฟล์ srcs ประเภท .java เพื่อให้อ่านง่าย จึงไม่ควรใส่ชื่อของไฟล์ต้นฉบับ .java ที่สร้างขึ้นใน srcs แต่ให้ใส่ชื่อกฎที่ขึ้นอยู่กับใน srcs ตามที่อธิบายไว้ด้านล่างแทน

ระบบจะคลายแพ็กและคอมไพล์ไฟล์ srcs ประเภท .srcjar (ซึ่งจะเป็นประโยชน์หากคุณต้องการสร้างชุดไฟล์ .java ด้วย genrule หรือส่วนขยายบิลด์)

ระบบจะไม่สนใจไฟล์อื่นๆ ทั้งหมด ตราบใดที่ มีไฟล์ประเภทใดประเภทหนึ่งตามที่อธิบายไว้ข้างต้นอย่างน้อย 1 ไฟล์ ไม่เช่นนั้นจะเกิด ข้อผิดพลาด

ต้องระบุแอตทริบิวต์ srcs และจะเว้นว่างไม่ได้ เว้นแต่จะมีการระบุ runtime_deps

custom_package

สตริง ค่าเริ่มต้นคือ ""

แพ็กเกจ Java ที่จะสร้างคลาส R โดยค่าเริ่มต้น ระบบจะอนุมานแพ็กเกจ จากไดเรกทอรีที่มีไฟล์ BUILD ที่มีกฎ หากคุณใช้แอตทริบิวต์นี้ คุณอาจต้องใช้ test_class ด้วย
densities

รายการสตริง ค่าเริ่มต้นคือ []

ความหนาแน่นที่จะกรองเมื่อสร้าง APK ระบบจะเพิ่มส่วน compatible-screens ที่เกี่ยวข้องลงในไฟล์ Manifest ด้วย หากยังไม่มี StarlarkListing ที่เป็นซูเปอร์เซ็ต
enable_data_binding

บูลีน ค่าเริ่มต้นคือ False

หากเป็นจริง กฎนี้จะประมวลผลการอ้างอิงการเชื่อมโยงข้อมูลที่ใช้ในการอ้างอิงที่เปิดใช้การเชื่อมโยงข้อมูลซึ่งใช้ในการทดสอบนี้ หากไม่มีการตั้งค่านี้ การอ้างอิงการเชื่อมโยงข้อมูลจะไม่มีการสร้างโค้ดระดับไบนารีที่จำเป็น และอาจทำให้การสร้างล้มเหลว
javacopts

รายการสตริง ค่าเริ่มต้นคือ []

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับไลบรารีนี้ ขึ้นอยู่กับการแทนที่ "Make variable" และ การแยกโทเค็น Bourne Shell

ระบบจะส่งตัวเลือกคอมไพเลอร์เหล่านี้ไปยัง javac หลังจากตัวเลือกคอมไพเลอร์ส่วนกลาง

jvm_flags

รายการสตริง ค่าเริ่มต้นคือ []

รายการ Flag ที่จะฝังในสคริปต์ Wrapper ที่สร้างขึ้นเพื่อเรียกใช้ไบนารีนี้ ขึ้นอยู่กับ $(location) และ การแทนที่ "Make variable" และ การแยกโทเค็นของ Bourne Shell

สคริปต์ Wrapper สำหรับไบนารี Java มีคำจำกัดความ CLASSPATH (เพื่อค้นหาไฟล์ JAR ที่ขึ้นต่อกันทั้งหมด) และเรียกใช้ตัวแปล Java ที่ถูกต้อง บรรทัดคำสั่งที่สร้างโดยสคริปต์ Wrapper จะมีชื่อของ คลาสหลักตามด้วย "$@" เพื่อให้คุณส่งอาร์กิวเมนต์อื่นๆ หลังจากชื่อคลาสได้ อย่างไรก็ตาม อาร์กิวเมนต์ที่ตั้งใจไว้สำหรับการแยกวิเคราะห์ โดย JVM ต้องระบุก่อนชื่อคลาสในบรรทัดคำสั่ง ระบบจะเพิ่มเนื้อหาของ jvm_flags ลงในสคริปต์ Wrapper ก่อนที่จะแสดงชื่อคลาส

โปรดทราบว่าแอตทริบิวต์นี้ไม่มีผลต่อ*_deploy.jar เอาต์พุต

manifest

ป้ายกำกับ ค่าเริ่มต้นคือ None

ชื่อของไฟล์ Manifest ของ Android โดยปกติคือ AndroidManifest.xml ต้องกำหนดหากมีการกำหนด resource_files หรือชิ้นงาน หรือหากไฟล์ Manifest ใดๆ จาก ไลบรารีภายใต้การทดสอบมีแท็ก minSdkVersion
manifest_values

พจนานุกรม: สตริง -> สตริง ค่าเริ่มต้นคือ {}

พจนานุกรมของค่าที่จะลบล้างในไฟล์ Manifest ระบบจะแทนที่อินสแตนซ์ของ ${name} ใน ไฟล์ Manifest ด้วยค่าที่สอดคล้องกับชื่อในพจนานุกรมนี้ applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion และ maxSdkVersion จะลบล้างแอตทริบิวต์ที่เกี่ยวข้อง ของไฟล์ Manifest และ แท็ก uses-sdk ด้วย ระบบจะเพิกเฉยต่อ packageName และจะตั้งค่าจาก applicationId หากมีการระบุ หรือแพ็กเกจในไฟล์ Manifest คุณไม่จำเป็นต้องมีไฟล์ Manifest ในกฎเพื่อใช้ manifest_values
nocompress_extensions

รายการสตริง ค่าเริ่มต้นคือ []

รายการนามสกุลไฟล์ที่จะปล่อยไว้โดยไม่บีบอัดใน APK ของทรัพยากร
plugins

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ปลั๊กอินคอมไพเลอร์ Java ที่จะเรียกใช้ในเวลาคอมไพล์ java_plugin ทุกรายการที่ระบุในแอตทริบิวต์นี้จะทำงานทุกครั้งที่มีการสร้างกฎนี้ ไลบรารีอาจรับช่วงปลั๊กอินจากทรัพยากร Dependency ที่ใช้ exported_plugins ด้วย ระบบจะรวมทรัพยากร ที่ปลั๊กอินสร้างขึ้นไว้ในไฟล์ JAR ที่ได้จากกฎนี้
resource_configuration_filters

รายการสตริง ค่าเริ่มต้นคือ []

รายการตัวกรองการกำหนดค่าทรัพยากร เช่น "en" ซึ่งจะจำกัดทรัพยากรใน APK ให้มีเฉพาะทรัพยากรในการกำหนดค่า "en" เท่านั้น
resource_jars

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

เลิกใช้งานแล้ว: ใช้ java_import และ deps หรือ runtime_deps แทน
resource_strip_prefix

สตริง ค่าเริ่มต้นคือ ""

คำนำหน้าเส้นทางที่จะนำออกจากทรัพยากร Java

หากระบุไว้ ระบบจะนำคำนำหน้าเส้นทางนี้ออกจากทุกไฟล์ในแอตทริบิวต์ resources การที่ไฟล์ทรัพยากรไม่ได้อยู่ในไดเรกทอรีนี้ถือเป็นข้อผิดพลาด หากไม่ได้ระบุ (ค่าเริ่มต้น) ระบบจะกำหนดเส้นทางของไฟล์ทรัพยากรตามตรรกะเดียวกับแพ็กเกจ Java ของไฟล์ต้นฉบับ เช่น ไฟล์ต้นฉบับที่ stuff/java/foo/bar/a.txt จะอยู่ที่ foo/bar/a.txt

runtime_deps

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

ไลบรารีที่จะทำให้พร้อมใช้งานในไบนารีสุดท้ายหรือทดสอบที่รันไทม์เท่านั้น เช่นเดียวกับ deps ทั่วไป ไฟล์เหล่านี้จะปรากฏใน classpath ของรันไทม์ แต่จะไม่ปรากฏใน classpath ของเวลาคอมไพล์ การอ้างอิงที่จำเป็นเฉพาะในรันไทม์ควร แสดงไว้ที่นี่ เครื่องมือวิเคราะห์การขึ้นต่อกันควรละเว้นเป้าหมายที่ปรากฏทั้งใน runtime_deps และ deps
stamp

จำนวนเต็ม ค่าเริ่มต้นคือ 0

เลือกว่าจะเข้ารหัสข้อมูลการสร้างลงในไบนารีหรือไม่ ค่าที่เป็นไปได้มีดังนี้
  • stamp = 1: ประทับข้อมูลบิลด์ลงในไบนารีเสมอ แม้ในบิลด์ --nostamp ไม่ควรใช้การตั้งค่านี้ เนื่องจากอาจทำให้การแคชระยะไกลสำหรับไบนารีและการดำเนินการดาวน์สตรีมที่ขึ้นอยู่กับไบนารีนั้นหยุดทำงาน
  • stamp = 0: แทนที่ข้อมูลการสร้างด้วยค่าคงที่เสมอ ซึ่ง ช่วยให้แคชผลลัพธ์การบิลด์ได้ดี
  • stamp = -1: การฝังข้อมูลการสร้างจะควบคุมโดยแฟล็ก --[no]stamp

ระบบจะไม่สร้างไบนารีที่ประทับเวลาใหม่ เว้นแต่ว่ามีการเปลี่ยนแปลงในทรัพยากร Dependency

test_class

สตริง ค่าเริ่มต้นคือ ""

คลาส Java ที่โปรแกรมเรียกใช้การทดสอบจะโหลด

แอตทริบิวต์นี้ระบุชื่อของคลาส Java ที่การทดสอบนี้จะเรียกใช้ ไม่ค่อยมีความจำเป็นในการตั้งค่านี้ หากละเว้นอาร์กิวเมนต์นี้ ระบบจะใช้คลาส Java ที่มีชื่อสอดคล้องกับ name ของกฎ android_local_test นี้ ต้องใส่คำอธิบายประกอบในคลาสทดสอบด้วย org.junit.runner.RunWith

use_launcher

บูลีน ค่าเริ่มต้นคือ True

ดูว่าไบนารีควรใช้ตัวเรียกใช้ที่กำหนดเองหรือไม่

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะไม่สนใจแอตทริบิวต์ launcher และแฟล็กที่เกี่ยวข้อง --java_launcher สำหรับเป้าหมายนี้

android_device

ดูแหล่งที่มาของกฎ
android_device(name, cache, compatible_with, default_properties, deprecation, distribs, exec_compatible_with, exec_properties, features, horizontal_resolution, licenses, platform_apks, ram, restricted_to, screen_density, system_image, tags, target_compatible_with, testonly, vertical_resolution, visibility, vm_heap)

กฎนี้จะสร้างโปรแกรมจำลอง Android ที่กำหนดค่าตามข้อกำหนดที่ระบุ คุณอาจเริ่มโปรแกรมจำลองนี้ผ่านคำสั่ง bazel run หรือโดยการเรียกใช้สคริปต์ที่สร้างขึ้นโดยตรง เราขอแนะนำให้ใช้กฎ android_device ที่มีอยู่แทนการกำหนดกฎของคุณเอง

กฎนี้เป็นเป้าหมายที่เหมาะสมสำหรับแฟล็ก --run_under ในการทดสอบ Bazel และการเรียกใช้ Blaze โดยจะเริ่มโปรแกรมจำลอง คัดลอกเป้าหมายที่กำลังทดสอบ/เรียกใช้ไปยังโปรแกรมจำลอง และทดสอบหรือเรียกใช้ตามความเหมาะสม

android_device รองรับการสร้างอิมเมจ KVM หากsystem_image พื้นฐานเป็นแบบ X86 และได้รับการเพิ่มประสิทธิภาพสำหรับสถาปัตยกรรม CPU I686 อย่างมาก หากต้องการใช้ KVM ให้เพิ่ม tags = ['requires-kvm'] ในกฎ android_device

เป้าหมายเอาต์พุตโดยนัย

  • 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

กฎนี้จะสร้างรูปภาพและสคริปต์เริ่มต้น คุณเริ่มโปรแกรมจำลอง ในเครื่องได้โดยการเรียกใช้ bazel run :nexus_s -- --action=start สคริปต์จะแสดงแฟล็กต่อไปนี้

  • --adb_port: พอร์ตที่จะเปิดเผย adb หากต้องการออกคำสั่ง adb ไปยังโปรแกรมจำลอง นี่คือพอร์ตที่คุณจะออกคำสั่ง adb connect ไปยัง
  • --emulator_port: พอร์ตที่จะเปิดเผยคอนโซลการจัดการ Telnet ของโปรแกรมจำลอง
  • --enable_display: เริ่มโปรแกรมจำลองที่มีจอแสดงผลหากเป็นจริง (ค่าเริ่มต้น เป็นเท็จ)
  • --action: Either start or kill.
  • --apks_to_install: รายการ APK ที่จะติดตั้งในโปรแกรมจำลอง

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

cache

จำนวนเต็ม; ต้องระบุ

ขนาดพาร์ติชันแคชของโปรแกรมจำลองในหน่วยเมกะไบต์ ค่าต่ำสุดของพารามิเตอร์นี้คือ 16 เมกะไบต์
default_properties

ป้ายกำกับ ค่าเริ่มต้นคือ None

ไฟล์พร็อพเพอร์ตี้เดียวที่จะวางไว้ใน /default.prop ในโปรแกรมจำลอง ซึ่งช่วยให้ผู้เขียนกฎกำหนดค่าโปรแกรมจำลองเพิ่มเติมเพื่อให้ดูเหมือนอุปกรณ์จริงมากขึ้น (โดยเฉพาะการควบคุมสตริง UserAgent และลักษณะการทำงานอื่นๆ ที่อาจทำให้แอปพลิเคชันหรือเซิร์ฟเวอร์ทำงานแตกต่างจาก อุปกรณ์ที่เฉพาะเจาะจง) พร็อพเพอร์ตี้ในไฟล์นี้จะลบล้างพร็อพเพอร์ตี้แบบอ่านอย่างเดียว ซึ่งโดยปกติแล้วอีมูเลเตอร์จะเป็นผู้ตั้งค่า เช่น ro.product.model
horizontal_resolution

จำนวนเต็ม; ต้องระบุ

ความละเอียดของหน้าจอแนวนอนในหน่วยพิกเซลที่จะจำลอง ค่าต่ำสุดคือ 240
platform_apks

รายการป้ายกำกับ ค่าเริ่มต้นคือ []

รายการ APK ที่จะติดตั้งในอุปกรณ์เมื่อบูต
ram

จำนวนเต็ม; ต้องระบุ

ปริมาณ RAM ในหน่วยเมกะไบต์ที่จะจำลองสำหรับอุปกรณ์ การตั้งค่านี้มีผลกับอุปกรณ์ทั้งเครื่อง ไม่ใช่แค่แอปใดแอปหนึ่งที่ติดตั้งในอุปกรณ์ ค่าต่ำสุดคือ 64 เมกะไบต์
screen_density

จำนวนเต็ม; ต้องระบุ

ความหนาแน่นของหน้าจอที่จำลองในหน่วยพิกเซลต่อนิ้ว ค่าต่ำสุดของพารามิเตอร์นี้คือ 30 ppi
system_image

ป้ายกำกับ (ต้องระบุ)

กลุ่มไฟล์ที่มีไฟล์ต่อไปนี้
  • system.img: พาร์ติชันระบบ
  • kernel-qemu: เคอร์เนล Linux ที่โปรแกรมจำลองจะโหลด
  • ramdisk.img: รูปภาพ initrd ที่จะใช้ในเวลาบูต
  • userdata.img: พาร์ติชัน userdata เริ่มต้น
  • source.properties: ไฟล์พร็อพเพอร์ตี้ที่มีข้อมูลเกี่ยวกับรูปภาพ
ไฟล์เหล่านี้เป็นส่วนหนึ่งของ Android SDK หรือจัดทำโดยบุคคลที่สาม (เช่น Intel จัดทำอิมเมจ x86)
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 การรองรับ NDK เวอร์ชันในอนาคต รวมถึงเวอร์ชัน 25 ขึ้นไป จะ ได้รับการติดตั้งใช้งานใน android_ndk_repository เวอร์ชัน Starlark ดู rules_android_ndk สำหรับ Starlark เวอร์ชัน

โปรดทราบว่าการสร้างสำหรับ Android ต้องมีกฎ android_sdk_repository ในไฟล์ WORKSPACE ด้วย

ดูข้อมูลเพิ่มเติมได้ใน เอกสารประกอบฉบับเต็มเกี่ยวกับการใช้ Android NDK กับ Bazel

ตัวอย่าง

android_ndk_repository(
    name = "androidndk",
)

ตัวอย่างข้างต้นจะค้นหา Android NDK จาก $ANDROID_NDK_HOME และตรวจหาระดับ API สูงสุดที่รองรับ

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

ตัวอย่างข้างต้นจะใช้ Android NDK ที่อยู่ในพื้นที่ทำงานของคุณใน ./android-ndk-r20 โดยจะใช้ไลบรารี API ระดับ 24 เมื่อคอมไพล์โค้ด JNI

cpufeatures

Android NDK มี ไลบรารี cpufeatures ซึ่งใช้ตรวจหา CPU ของอุปกรณ์ได้ในขณะรันไทม์ ตัวอย่างต่อไปนี้แสดงวิธีใช้ cpufeatures กับ Bazel

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

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

api_level

จำนวนเต็ม กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ 0

ระดับ API ของ Android ที่จะใช้ในการสร้าง หากไม่ได้ระบุ ระบบจะใช้ API ระดับสูงสุดที่ติดตั้ง ไว้
path

สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ ""

เส้นทางสัมบูรณ์หรือสัมพัทธ์ไปยัง Android NDK ต้องตั้งค่าแอตทริบิวต์นี้หรือตัวแปรสภาพแวดล้อม $ANDROID_NDK_HOME

คุณดาวน์โหลด Android NDK ได้จาก เว็บไซต์ของนักพัฒนาแอป Android

repo_mapping

พจนานุกรม: สตริง -> สตริง ค่าเริ่มต้นคือ {}

พจนานุกรมจากชื่อที่เก็บในเครื่องไปยังชื่อที่เก็บส่วนกลาง ซึ่งจะช่วยให้ควบคุม การแก้ปัญหาการขึ้นต่อกันของเวิร์กสเปซสำหรับการขึ้นต่อกันของที่เก็บนี้ได้

เช่น รายการ "@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)

กำหนดค่า Bazel ให้ใช้ Android SDK ในเครื่องเพื่อรองรับการสร้างเป้าหมาย Android

ตัวอย่าง

การตั้งค่า Android SDK สำหรับ Bazel ขั้นต่ำคือการใส่กฎ android_sdk_repository ชื่อ "androidsdk" ในไฟล์ WORKSPACE และตั้งค่า $ANDROID_HOME ตัวแปรสภาพแวดล้อมเป็นเส้นทางของ Android SDK Bazel จะใช้ Android API ระดับสูงสุด และเวอร์ชันเครื่องมือบิลด์ที่ติดตั้งใน Android SDK โดยค่าเริ่มต้น
android_sdk_repository(
    name = "androidsdk",
)

หากต้องการให้มั่นใจว่าการสร้างจะทำซ้ำได้ คุณสามารถตั้งค่าแอตทริบิวต์ path, api_level และ build_tools_version เป็นค่าที่เฉพาะเจาะจงได้ การสร้างจะล้มเหลวหาก Android SDK ไม่ได้ติดตั้งระดับ API หรือเวอร์ชันเครื่องมือสร้างที่ระบุ

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

ตัวอย่างข้างต้นยังแสดงการใช้เส้นทางที่สัมพันธ์กับพื้นที่ทํางานไปยัง Android SDK ด้วย ซึ่งจะมีประโยชน์หาก Android SDK เป็นส่วนหนึ่งของพื้นที่ทำงาน Bazel (เช่น หากมีการเช็คอินในระบบควบคุมเวอร์ชัน)

ไลบรารีการสนับสนุน

ไลบรารีการสนับสนุนมีอยู่ใน Android SDK Manager ในชื่อ "Android Support Repository" ซึ่งเป็นชุดไลบรารี Android ทั่วไปที่มีการกำหนดเวอร์ชัน เช่น ไลบรารี Support และ AppCompat ที่จัดแพ็กเกจเป็นที่เก็บ Maven ในเครื่อง android_sdk_repository จะสร้างเป้าหมาย Bazel สำหรับไลบรารีแต่ละรายการที่ใช้ในทรัพยากร Dependency ของเป้าหมาย android_binary และ android_library ได้

ชื่อของเป้าหมายที่สร้างขึ้นมาจากพิกัด Maven ของไลบรารีใน ที่เก็บ Android Support โดยจัดรูปแบบเป็น @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"],
)

อาร์กิวเมนต์

Attributes
name

ชื่อ (ต้องระบุ)

ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้

api_level

จำนวนเต็ม กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ 0

ระดับ API ของ Android ที่จะใช้สร้างโดยค่าเริ่มต้น หากไม่ได้ระบุ ระบบจะใช้ API ระดับสูงสุด ที่ติดตั้งไว้

คุณสามารถลบล้างระดับ API ที่ใช้สำหรับบิลด์ที่กำหนดได้โดยใช้แฟล็ก android_sdk android_sdk_repository จะสร้างเป้าหมาย android_sdk สำหรับ แต่ละระดับ API ที่ติดตั้งใน SDK โดยมีชื่อ @androidsdk//:sdk-${level} ไม่ว่าจะระบุแอตทริบิวต์นี้หรือไม่ก็ตาม ตัวอย่างเช่น หากต้องการสร้างเทียบกับระดับ API ที่ไม่ใช่ค่าเริ่มต้น ให้ใช้ bazel build --android_sdk=@androidsdk//:sdk-19 //java/com/example:app

หากต้องการดูandroid_sdkเป้าหมายทั้งหมดที่android_sdk_repository สร้างขึ้น ให้เรียกใช้bazel query "kind(android_sdk, @androidsdk//...)"

build_tools_version

สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ ""

เวอร์ชันของเครื่องมือสร้าง Android ที่จะใช้จากภายใน Android SDK หากไม่ได้ระบุ ระบบจะใช้เครื่องมือบิลด์เวอร์ชันล่าสุดที่ติดตั้ง

Bazel ต้องใช้เครื่องมือบิลด์เวอร์ชัน 30.0.0 ขึ้นไป

path

สตริง กำหนดค่าไม่ได้ ค่าเริ่มต้นคือ ""

เส้นทางสัมบูรณ์หรือสัมพัทธ์ไปยัง Android SDK ต้องตั้งค่าแอตทริบิวต์นี้หรือตัวแปรสภาพแวดล้อม $ANDROID_HOME

คุณดาวน์โหลด Android SDK ได้จาก เว็บไซต์ของนักพัฒนาแอป Android

repo_mapping

พจนานุกรม: สตริง -> สตริง ค่าเริ่มต้นคือ {}

พจนานุกรมจากชื่อที่เก็บในเครื่องไปยังชื่อที่เก็บส่วนกลาง ซึ่งจะช่วยให้ควบคุม การแก้ปัญหาการขึ้นต่อกันของเวิร์กสเปซสำหรับการขึ้นต่อกันของที่เก็บนี้ได้

เช่น รายการ "@foo": "@bar" ประกาศว่าเมื่อใดก็ตามที่ที่เก็บข้อมูลนี้ขึ้นอยู่กับ "@foo" (เช่น การขึ้นอยู่กับ "@foo//some:target") ที่เก็บข้อมูลนี้ควรแก้ไขการขึ้นอยู่ดังกล่าวภายใน "@bar" ที่ประกาศทั่วโลก ("@bar//some:target")