กฎ Android

รายงานปัญหา ดูแหล่งที่มา รุ่น Nightly · 7.4 7.3 · 7.2 · 7.1 · 7.0 · 6.5

กฎ

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

    ไฟล์ jar ที่ใช้ติดตั้งประกอบด้วยคลาสทั้งหมดที่ Class Loader จะพบเมื่อค้นหา 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 หรือ build)

assets

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

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

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

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

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

ทำการบีบอัด PNG (หรือไม่) ซึ่งไม่เกี่ยวข้องกับการประมวลผล Nine-Patch ที่ระบบจะทำเสมอ วิธีนี้เป็นวิธีแก้ปัญหาชั่วคราวที่เลิกใช้งานแล้วสำหรับข้อบกพร่องของ 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 ซึ่งจะนําทรัพยากรภาพวาดแบบแรสเตอร์ออกที่อุปกรณ์ที่มีความละเอียดของหน้าจอที่ระบุจะไม่โหลด เพื่อลดขนาด APK ระบบจะเพิ่มส่วนหน้าจอที่เข้ากันได้ที่เกี่ยวข้องลงในไฟล์ Manifest ด้วยหากยังไม่มีรายการที่รวมข้อมูลทั้งหมด
dex_shards

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

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

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

dexopts

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

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

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

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

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

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

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

บังคับให้สร้างเป้าหมายโดยให้มีหรือไม่มีการจัดทําดัชนีแบบเพิ่มทีละน้อย ลบล้างค่าเริ่มต้น และลบล้างแฟล็ก --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) ขั้นต่ำที่ควรใช้คีย์การรับรองแบบหมุนเวียนของ APK ในการสร้างลายเซ็นของ APK ระบบจะใช้คีย์ Signing เดิมสำหรับ APK สำหรับแพลตฟอร์มเวอร์ชันก่อนหน้าทั้งหมด
main_dex_list

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

ไฟล์ข้อความที่มีรายการชื่อไฟล์คลาส ชั้นเรียนที่กำหนดโดยไฟล์ชั้นเรียนเหล่านั้นจะเข้าไปอยู่ใน classroom.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 หลายไฟล์เมื่อเกินขีดจำกัดดัชนี dex 64K ถือว่ามีการโหลดคลาส MultiDex ผ่านโค้ดแอปพลิเคชัน (กล่าวคือไม่มีการรองรับแพลตฟอร์มเดิม)
  • manual_main_dex: แยกโค้ดออกเป็นไฟล์ dex หลายไฟล์เมื่อเกินขีดจำกัดดัชนี dex 64K คุณต้องระบุเนื้อหาของไฟล์ 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" หากต้องการเปิดใช้ Pseudolocalization ให้ใส่ภาษาเทียม 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 โดยค่าเริ่มต้น
  • การนำทรัพยากรรหัสที่ไม่ได้ใช้ออกใช้ได้กับ 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 หรือ build)

หากไม่ใส่ 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 ทั้งหมดที่ขึ้นกับกฎนี้ เนื่องจากทรัพยากร Dependency จะรับช่วงนิพจน์การเชื่อมโยงข้อมูลของกฎผ่านการผสานรวมทรัพยากร ดังนั้นจึงต้องสร้างด้วย Data Binding เพื่อแยกวิเคราะห์นิพจน์เหล่านั้นด้วย
  2. เพิ่มรายการ deps = สำหรับไลบรารีรันไทม์การเชื่อมโยงข้อมูลลงในเป้าหมายทั้งหมดที่กําหนดแอตทริบิวต์นี้ ตำแหน่งของไลบรารีนี้ขึ้นอยู่กับการตั้งค่าพื้นที่เก็บข้อมูล
exported_plugins

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

รายการ java_plugin (เช่น โปรแกรมประมวลผลคำอธิบายประกอบ) เพื่อส่งออกไปยังไลบรารีที่ขึ้นต่อกันกับไลบรารีนี้โดยตรง

ระบบจะใช้รายการ 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

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

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

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

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

idl_preprocessed

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

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

ควรรวมเฉพาะไฟล์ .aidl ที่ผ่านการปรับแต่งล่วงหน้าซึ่งสอดคล้องกับแหล่งที่มาของ .java ในไลบรารีนี้โดยตรง (เช่น การใช้งาน Parcelable ที่กําหนดเอง) มิเช่นนั้นให้ใช้ idl_srcs สําหรับคําจํากัดความ Android IDL ที่ต้องแปลเป็นอินเทอร์เฟซ 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 ทุกรายการที่ขึ้นอยู่กับไลบรารีนี้ ไฟล์ที่รวมอยู่ที่นี่ต้องมีกฎแบบ idempotent เท่านั้น ได้แก่ -dontnote, -dontwarn, assumenosideeffects และกฎที่ขึ้นต้นด้วย -keep ตัวเลือกอื่นๆ จะปรากฏใน proguard_specs ของ android_binary เท่านั้น เพื่อให้การผสานไม่ซ้ำกัน
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)

กฎนี้มีไว้สําหรับการทดสอบ 1 หน่วยของกฎ android_library ในเครื่อง (ไม่ใช่ในอุปกรณ์) โดยทำงานร่วมกับเฟรมเวิร์กการทดสอบ Robolectric ของ Android ดูรายละเอียดเกี่ยวกับการเขียนการทดสอบ Robolectric ได้ที่เว็บไซต์ Android Robolectric

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

  • name.jar: ที่เก็บ Java ของการทดสอบ
  • name-src.jar: ไฟล์เก็บถาวรที่มีแหล่งที่มา ("ไฟล์ 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

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

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

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

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

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

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

custom_package

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

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

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

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

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

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

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

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

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

jvm_flags

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

รายการแฟล็กที่จะฝังในสคริปต์ 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 หรือ assets หรือหากไฟล์ Manifest จากไลบรารีที่ทดสอบมีแท็ก minSdkVersion
manifest_values

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

พจนานุกรมค่าที่จะถูกลบล้างในไฟล์ Manifest ระบบจะแทนที่อินสแตนซ์ ${name} ในไฟล์ Manifest ด้วยค่าที่สอดคล้องกับชื่อในพจนานุกรมนี้ applicationId, versionCode, versionName, minSdkVersion, targetSdkVersion และ maxSdkVersion จะลบล้างแอตทริบิวต์ที่เกี่ยวข้องของไฟล์ Manifest และแท็ก use-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 ขณะคอมไพล์ รายการต่อไปนี้ควรระบุไว้สำหรับทรัพยากร Dependencies ที่จำเป็นเฉพาะในรันไทม์ เครื่องมือการวิเคราะห์การขึ้นต่อกันจะต้องไม่สนใจเป้าหมายที่ปรากฏทั้งใน 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 ที่กำหนดเองหรือไม่

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะละเว้นแอตทริบิวต์ launcher และ Flag --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 ที่มีอยู่แทนการกำหนดกฎของคุณเอง

กฎนี้เป็นเป้าหมายที่เหมาะสมสำหรับ Flag --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 สคริปต์จะแสดง Flag ต่อไปนี้

  • --adb_port: พอร์ตที่แสดง adb หากต้องการออกคำสั่ง adb ไปยังโปรแกรมจำลอง พอร์ตนี้จะเป็นพอร์ตที่คุณจะใช้คำสั่ง adb connect
  • --emulator_port: พอร์ตที่จะแสดงคอนโซลการจัดการ Telnet ของโปรแกรมจำลอง
  • --enable_display: เริ่มโปรแกรมจำลองด้วยจอแสดงผลหากเป็นจริง (ค่าเริ่มต้นเป็นเท็จ)
  • --action: เริ่มต้นหรือฆ่า
  • --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: อิมเมจเริ่มต้นที่จะใช้เมื่อเปิดเครื่อง
  • 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

CPU

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

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

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

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

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

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

repo_mapping

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

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

ตัวอย่างเช่น รายการ "@foo": "@bar" ประกาศว่าเมื่อใดก็ตามที่ที่เก็บนี้อ้างอิง "@foo" (เช่น ทรัพยากร Dependency ของ "@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 ภายใต้ "ที่เก็บข้อมูลการสนับสนุนของ Android" ซึ่งเป็นชุดไลบรารี Android ทั่วไปที่มีเวอร์ชัน เช่น ไลบรารี Support และ AppCompat ที่แพ็กเกจไว้เป็นที่เก็บ Maven ในพื้นที่ android_sdk_repository จะสร้างเป้าหมาย Bazel สำหรับไลบรารีแต่ละรายการเหล่านี้ ซึ่งสามารถใช้ในข้อกำหนดของเป้าหมาย android_binary และ android_library

ชื่อของเป้าหมายที่สร้างขึ้นได้มาจากพิกัด Maven ของไลบรารีในที่เก็บการสนับสนุนของ Android ซึ่งมีรูปแบบ @androidsdk//${group}:${artifact}-${version} ตัวอย่างต่อไปนี้แสดงวิธีที่ android_library อาจใช้ไลบรารี appcompat v7 เวอร์ชัน 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

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

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

คุณสามารถลบล้างระดับ API ที่ใช้กับบิลด์หนึ่งๆ ได้ด้วย Flag 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

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

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

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

repo_mapping

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

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

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