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

    ไฟล์ jar ที่ใช้ติดตั้งประกอบด้วยคลาสทั้งหมดที่ Class Loader จะพบเมื่อค้นหา Classpath รันไทม์ของเป้าหมายนี้ตั้งแต่ต้นจนจบ

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

ตัวอย่าง

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

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

Attributes
name

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

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

deps

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

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

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

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

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

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

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

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

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

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

dexopts

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

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

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

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

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

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

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

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

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

assets

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

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

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

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

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

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

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

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

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

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

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

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

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

exports

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

การปิดกฎทั้งหมดที่เข้าถึงได้ผ่านแอตทริบิวต์ exports จะถือว่าเป็นการพึ่งพาโดยตรงของกฎที่ขึ้นอยู่กับเป้าหมายที่มี 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เป้าหมายใดก็ตามที่ขึ้นอยู่กับไลบรารีนี้โดยตรงหรือผ่าน Closure แบบโอนไม่ได้ แต่จะไม่มีการแปลเป็น Java หรือคอมไพล์

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

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

idl_preprocessed

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

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

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

idl_srcs

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

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

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

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

javacopts

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

ตัวเลือกคอมไพเลอร์เพิ่มเติมสำหรับเป้าหมายนี้ ขึ้นอยู่กับการแทนที่ "MakeVariable" และการแปลงข้อมูลเป็นโทเค็นของ 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, ignoreเอฟเฟกต์ และกฎที่ขึ้นต้นด้วย -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: ที่เก็บถาวรที่มีแหล่งที่มา ("โหลแหล่งที่มา")
  • name_deploy.jar: ไฟล์เก็บถาวรสำหรับติดตั้งใช้งาน Java ที่เหมาะสมสําหรับการติดตั้งใช้งาน (จะสร้างขึ้นก็ต่อเมื่อมีการขออย่างชัดแจ้งเท่านั้น)

ตัวอย่าง

หากต้องการใช้ Robolectric กับ android_local_test ให้เพิ่มที่เก็บของ Robolectric ไปยังไฟล์ WORKSPACE:

http_archive(
    name = "robolectric",
    urls = ["https://github.com/robolectric/robolectric-bazel/archive/<COMMIT>.tar.gz"],
    strip_prefix = "robolectric-bazel-<COMMIT>",
    sha256 = "<HASH>",
)
load("@robolectric//bazel:robolectric.bzl", "robolectric_repositories")
robolectric_repositories()
การดำเนินการนี้จะดึงกฎ maven_jar ที่จำเป็นสำหรับ Robolectric จากนั้นกฎ android_local_test แต่ละข้อควรขึ้นอยู่กับ @robolectric//bazel:robolectric โปรดดูตัวอย่างด้านล่าง

android_local_test(
    name = "SampleTest",
    srcs = [
        "SampleTest.java",
    ],
    manifest = "LibManifest.xml",
    deps = [
        ":sample_test_lib",
        "@robolectric//bazel:android-all",
    ],
)

android_library(
    name = "sample_test_lib",
    srcs = [
         "Lib.java",
    ],
    resource_files = glob(["res/**"]),
    manifest = "AndroidManifest.xml",
)

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

Attributes
name

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

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

deps

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

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

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

srcs

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

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

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

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

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

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

custom_package

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

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

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

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

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

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

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

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

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

jvm_flags

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

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

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

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

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

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

runtime_deps

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

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

android_device

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

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

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

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

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

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

ตัวอย่าง

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

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

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

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

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

กฎนี้จะสร้างรูปภาพและสคริปต์เริ่มต้น คุณเริ่มโปรแกรมจำลองในเครื่องได้โดยการเรียกใช้ bazel run :nexus_s -- --action=start สคริปต์จะแสดง 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: พาร์ติชันข้อมูลผู้ใช้เริ่มต้น
  • 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 มี ไลบรารี 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

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

เส้นทางสัมบูรณ์หรือสัมพัทธ์ไปยัง 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 v7 เวอร์ชัน 25.0.0

android_library(
    name = "lib",
    srcs = glob(["*.java"]),
    manifest = "AndroidManifest.xml",
    resource_files = glob(["res/**"]),
    deps = ["@androidsdk//com.android.support:appcompat-v7-25.0.0"],
)

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

Attributes
name

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

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

api_level

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

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

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

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

build_tools_version

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

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

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

path

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

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

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

repo_mapping

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

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

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