กฎ Android

รายงานปัญหา ดูแหล่งที่มา

กฎ

android_binary

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

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

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

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

    Jar การทำให้ใช้งานได้จะมีคลาสทั้งหมดที่ Classloader พบที่ค้นหาคลาสพาธรันไทม์ของเป้าหมายนี้ตั้งแต่ต้นจนจบ

  • 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

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

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

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

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

assets

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

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

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

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

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

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

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

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

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

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

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

debug_signing_keys

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

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

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

debug_signing_lineage_file

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

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

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

densities

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

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

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

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

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

dexopts

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

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

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

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

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

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

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

บังคับให้สร้างเป้าหมายโดยมีหรือไม่มี Dexing ที่เพิ่มขึ้น ลบล้างค่าเริ่มต้น และ Flag --incremental_dexing
instruments

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

เป้าหมาย android_binary สำหรับเครื่องมือ

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

javacopts

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

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับเป้าหมายนี้ ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็น 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 หลายไฟล์เมื่อเกินขีดจำกัดดัชนี dex 64K สมมติว่าแพลตฟอร์มเนทีฟรองรับการโหลดคลาส 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

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

เลือกว่าจะสร้างไฟล์การแมป Proguard หรือไม่ ระบบจะสร้างไฟล์การแมปก็ต่อเมื่อมีการระบุ proguard_specs เท่านั้น ไฟล์นี้จะแสดงรายการการแมประหว่างชื่อคลาส เมธอด รวมถึงชื่อช่องต้นฉบับกับชื่อที่ปรับให้ยากต่อการอ่าน (Obfuscate)

คำเตือน: หากใช้แอตทริบิวต์นี้ ข้อกำหนดของ 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: แพ็กเกจ Android "aar" ที่มีที่เก็บถาวรของ 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 ที่ประมวลผลเพื่อสร้างเป้าหมาย

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

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

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

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

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

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

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

idl_preprocessed

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

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

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

idl_srcs

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

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

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

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

javacopts

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

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับเป้าหมายนี้ ขึ้นอยู่กับการแทนที่ "Makeตัวแปร" และการแปลงข้อมูลเป็นโทเค็น 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, Remembernosideeffects และกฎที่ขึ้นต้นด้วย -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)

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

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

  • name.jar: ที่เก็บถาวรสำหรับ Java ของการทดสอบ
  • name-src.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 หรือส่วนขยายบิลด์)

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

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

custom_package

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

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

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

manifest

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

ชื่อไฟล์ Manifest ของ Android ชื่อปกติคือ AndroidManifest.xml ต้องกำหนดไว้หากมีการกำหนด resource_files หรือ asset ไว้ หรือหากไฟล์ 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 หรือรันไทม์_deps แทน
resource_strip_prefix

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

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

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

runtime_deps

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

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

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

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

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

  • name_images/userdata.dat: มีไฟล์ภาพและสแนปชอตสำหรับเริ่มโปรแกรมจำลอง
  • name_images/emulator-meta-data.pb: มีข้อมูลที่ทำให้ต่อเนื่องซึ่งจำเป็นต่อการส่งต่อไปยังโปรแกรมจำลองเพื่อรีสตาร์ท

ตัวอย่าง

ตัวอย่างต่อไปนี้จะแสดงวิธีใช้ android_device //java/android/helloandroid/BUILD มี

android_device(
    name = "nexus_s",
    cache = 32,
    default_properties = "nexus_s.properties",
    horizontal_resolution = 480,
    ram = 512,
    screen_density = 233,
    system_image = ":emulator_images_android_16_x86",
    vertical_resolution = 800,
    vm_heap = 32,
)

filegroup(
    name = "emulator_images_android_16_x86",
    srcs = glob(["androidsdk/system-images/android-16/**"]),
)

//java/android/helloandroid/nexus_s.properties ประกอบด้วย:

ro.product.brand=google
ro.product.device=crespo
ro.product.manufacturer=samsung
ro.product.model=Nexus S
ro.product.name=soju

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

  • --adb_port: พอร์ตที่แสดง adb หากคุณต้องการออกคำสั่ง adb ให้กับโปรแกรมจำลอง นี่คือพอร์ตที่คุณจะออกคำสั่ง adb ให้
  • --emulator_port: พอร์ตที่เปิดคอนโซลการจัดการ Telnet ของโปรแกรมจำลอง
  • --enable_display: เริ่มต้นโปรแกรมจำลองด้วยจอแสดงผลหากเป็น "จริง" (ค่าเริ่มต้นคือ false)
  • --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: พาร์ติชันข้อมูลผู้ใช้เริ่มต้น
  • source.properties: ไฟล์พร็อพเพอร์ตี้ที่มีข้อมูลเกี่ยวกับรูปภาพ
ไฟล์เหล่านี้เป็นส่วนหนึ่งของ SDK ของ Android หรือให้บริการโดยบุคคลที่สาม (เช่น 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 มี ไลบรารี CPU ที่สามารถใช้ตรวจหา CPU ของอุปกรณ์ขณะรันไทม์ ตัวอย่างต่อไปนี้สาธิตวิธีใช้ CPU กับ 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

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

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

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

repo_mapping

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

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

ตัวอย่างเช่น รายการ "@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 จะใช้ API ระดับ Android สูงสุดและเวอร์ชันเครื่องมือบิลด์ที่ติดตั้งใน Android SDK โดยค่าเริ่มต้น
android_sdk_repository(
    name = "androidsdk",
)

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

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

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

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

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

แฟล็ก android_sdk จะลบล้างระดับ API ที่ใช้สำหรับบิลด์หนึ่งๆ ได้ 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

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

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

Bazel ต้องใช้เครื่องมือสร้างเวอร์ชัน 30.0.0 ขึ้นไป

path

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

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

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

repo_mapping

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

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

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