กฎ Android

รายงานปัญหา ดูซอร์สโค้ด รุ่น Nightly · 8.0 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 ที่มี 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 ใดก็ได้โดยขึ้นอยู่กับคลังนี้ ไฟล์ที่รวมอยู่ที่นี่ต้องมีกฎแบบ 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

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

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

คอมไพล์ไฟล์ 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 รันไทม์ แต่จะไม่ปรากฏใน 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

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

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

ตัวอย่างเช่น รายการ "@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

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

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

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