กฎ Android

รายงานปัญหา ดูซอร์ส รุ่น Nightly · 8.2 · 8.1 · 8.0 · 7.6 · 7.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 ที่มี Closure แบบทรานซิทีฟของเป้าหมายนี้

    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 ซึ่งมีกฎอยู่ คุณสามารถระบุแพ็กเกจอื่นได้ แต่เราไม่แนะนําอย่างยิ่งเนื่องจากอาจทําให้เกิดความขัดแย้งของ classpath กับไลบรารีอื่นๆ ที่ระบบจะตรวจพบเมื่อรันไทม์เท่านั้น
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 ขึ้นอยู่กับการแทนที่ "Make variable" และการแยกสตริงคำสั่ง Bourne Shell
enable_data_binding

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

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

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

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

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

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

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

ตัวเลือกบรรทัดคำสั่งที่จะส่งไปยังเครื่องมือสร้างรายการ 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 หลายไฟล์เมื่อเกินขีดจำกัดดัชนี 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" หากต้องการเปิดใช้การแปลภาษาจำลอง ให้ใส่ภาษาจำลอง 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 ซึ่งมีกฎอยู่ คุณสามารถระบุแพ็กเกจอื่นได้ แต่เราไม่แนะนําอย่างยิ่งเนื่องจากอาจทําให้เกิดความขัดแย้งของ classpath กับไลบรารีอื่นๆ ที่ระบบจะตรวจพบเมื่อรันไทม์เท่านั้น
enable_data_binding

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

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

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

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

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

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

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

exports

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

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

exports ไม่ใช่ deps โดยตรงของกฎที่ตนอยู่

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เป้าหมายใดก็ตามที่ขึ้นอยู่กับไลบรารีนี้โดยตรงหรือผ่าน Closure แบบโอน

ไฟล์เหล่านี้ต้องอยู่ในตำแหน่งที่เหมาะสมเพื่อให้คอมไพเลอร์ 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 ตัวเลือกอื่นๆ จะปรากฏใน 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

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

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

คอมไพล์ไฟล์ srcs ประเภท .java แล้ว เพื่อความสวยงามในการอ่าน คุณไม่ควรใส่ชื่อไฟล์ต้นฉบับ .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

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

รายการ 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 หรือ assets หรือหากไฟล์ 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 รันไทม์ แต่จะต่างจาก deps ตรงที่ไม่ได้ปรากฏใน Classpath ขณะคอมไพล์ รายการต่อไปนี้ควรระบุไว้สำหรับทรัพยากร Dependencies ที่จำเป็นเฉพาะในรันไทม์ เครื่องมือวิเคราะห์ Dependency ควรละเว้นเป้าหมายที่ปรากฏทั้งใน runtime_deps และ deps
stamp

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

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

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

test_class

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

คลาส Java ที่โปรแกรมรันทดสอบจะโหลด

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

use_launcher

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

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

หากตั้งค่าแอตทริบิวต์นี้เป็น "เท็จ" ระบบจะละเว้นแอตทริบิวต์ 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: start หรือ 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 ดูเวอร์ชัน Starlark ได้ที่ rules_android_ndk

โปรดทราบว่าการสร้างสำหรับ 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

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

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

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

ชื่อของเป้าหมายที่สร้างขึ้นจะมาจากพิกัด Maven ของไลบรารีในที่เก็บการสนับสนุน Android โดยอยู่ในรูปแบบ @androidsdk//${group}:${artifact}-${version} ตัวอย่างต่อไปนี้แสดงวิธีที่ android_library สามารถใช้ไลบรารี AppCompat เวอร์ชัน 25.0.0 ของ v7

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 ที่ใช้กับบิลด์หนึ่งๆ ได้ด้วย 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

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

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

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

repo_mapping

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

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

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