กฎ
- android_binary
- aar_import
- android_library
- android_instrumentation_test
- android_local_test
- android_device
- android_ndk_repository
- android_sdk_repository
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
ของ
ต้นบาเซล
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ android_library ,
java_library มีข้อจำกัด android และ
cc_library การรวมหรือการสร้างไลบรารีแบบเนทีฟ .so รายการสำหรับ
แพลตฟอร์มเป้าหมาย Android
|
srcs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ คอมไพล์ไฟล์ประเภท แตกไฟล์ |
assets
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ glob ของไฟล์ทั้งหมดภายใต้
ไดเรกทอรี assets นอกจากนี้ คุณยังสามารถอ้างอิงกฎอื่นๆ (กฎใดๆ ที่สร้าง
หรือไฟล์ที่ส่งออกในแพ็กเกจอื่น ตราบใดที่ไฟล์เหล่านั้นอยู่ภายใต้
assets_dir ในแพ็กเกจที่เกี่ยวข้อง
|
assets_dir
|
String; ค่าเริ่มต้นคือ assets
คู่ assets และ assets_dir อธิบายแพ็กเกจ
ไม่ควรระบุชิ้นงาน และแอตทริบิวต์ทั้ง 2 อย่าง หรือไม่ควรระบุเลย
|
crunch_png
|
บูลีน ค่าเริ่มต้นคือ |
custom_package
|
String; ค่าเริ่มต้นคือ |
debug_key
|
ป้ายกำกับ ค่าเริ่มต้นคือ คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
debug_signing_keys
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
debug_signing_lineage_file
|
ป้ายกำกับ ค่าเริ่มต้นคือ คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
densities
|
รายการสตริง ค่าเริ่มต้นคือ |
dex_shards
|
จำนวนเต็ม ค่าเริ่มต้นคือ โปรดทราบว่าชาร์ดแต่ละรายการจะส่งผลให้เกิด dex อย่างน้อย 1 รายการในแอปสุดท้าย ด้วยเหตุนี้ เราไม่แนะนำให้ตั้งค่านี้มากกว่า 1 สำหรับไบนารีการเผยแพร่ |
dexopts
|
รายการสตริง ค่าเริ่มต้นคือ |
enable_data_binding
|
บูลีน ค่าเริ่มต้นคือ หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องทำดังนี้
|
incremental_dexing
|
จำนวนเต็ม nonconfigurable; ค่าเริ่มต้นคือ |
instruments
|
ป้ายกำกับ ค่าเริ่มต้นคือ เป้าหมาย หากตั้งค่าแอตทริบิวต์นี้ จะถือว่า |
javacopts
|
รายการสตริง ค่าเริ่มต้นคือ ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง |
key_rotation_min_sdk
|
String; ค่าเริ่มต้นคือ |
main_dex_list
|
ป้ายกำกับ ค่าเริ่มต้นคือ 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
|
รายการสตริง ค่าเริ่มต้นคือ |
main_dex_proguard_specs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ multidex เป็น legacy
|
manifest
|
ป้ายกำกับ ต้องระบุ ชื่อไฟล์ Manifest ของ Android ชื่อปกติคือAndroidManifest.xml
ต้องกำหนด หากกำหนด resource_files หรือ assets
|
manifest_values
|
พจนานุกรม: สตริง -> String; ค่าเริ่มต้นคือ
ระบบจะใช้ค่าแทนอินสแตนซ์ของ
เมื่อตั้งค่า |
multidex
|
String; ค่าเริ่มต้นคือ ค่าที่เป็นไปได้มีดังนี้
|
nocompress_extensions
|
รายการสตริง ค่าเริ่มต้นคือ |
package_id
|
จำนวนเต็ม ค่าเริ่มต้นคือ ดูข้อมูลเพิ่มเติมที่อาร์กิวเมนต์ |
plugins
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ java_plugin ที่ระบุไว้ใน
แอตทริบิวต์ปลั๊กอินจะทำงานเมื่อใดก็ตามที่
เป้าหมายนี้สร้างขึ้น ทรัพยากรที่สร้างโดย
ปลั๊กอินจะรวมอยู่ใน jar ผลลัพธ์ของ
เป้าหมาย
|
proguard_apply_dictionary
|
ป้ายกำกับ ค่าเริ่มต้นคือ |
proguard_apply_mapping
|
ป้ายกำกับ ค่าเริ่มต้นคือ proguard_generate_mapping สร้างขึ้นเพื่อเป็น
นำมาใช้ซ้ำเพื่อนำการแมปเดิมไปใช้กับบิลด์ใหม่
|
proguard_generate_mapping
|
บูลีน nonconfigurable; ค่าเริ่มต้นคือ proguard_specs คือ
ที่ระบุ ไฟล์นี้จะแสดงการแมประหว่างไฟล์ต้นฉบับและ
ชื่อคลาส เมธอด และช่องที่ปรับให้ยากต่อการอ่าน (Obfuscate)
คำเตือน: หากใช้แอตทริบิวต์นี้ Proguard
ข้อกำหนดไม่ควรมีทั้ง |
proguard_specs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ |
resource_configuration_filters
|
รายการสตริง ค่าเริ่มต้นคือ en_XA และ/หรือ ar_XB ภาษาเทียม
|
resource_files
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ glob ของไฟล์ทั้งหมดภายใต้
ไดเรกทอรี res
ไฟล์ที่สร้างขึ้น (จาก Genrules) สามารถอ้างอิงได้โดย ติดป้ายกำกับที่นี่ด้วย ข้อจำกัดเพียงอย่างเดียวคือ เอาต์พุตที่สร้างขึ้นต้องอยู่ภายใต้ " res " เดียวกัน เช่นเดียวกับอื่นๆ
ไฟล์ทรัพยากรที่รวมอยู่
|
shrink_resources
|
จำนวนเต็ม ค่าเริ่มต้นคือ manifest และ resource_files ) และต้องใช้ ProGuard
โดยจะทำงานในลักษณะเดียวกับเครื่องมือลดขนาดทรัพยากรของ Gradle
(https://developer.android.com/studio/build/shrink-code.html#shrink-resources).
ความแตกต่างที่เห็นได้ชัดมีดังนี้
name_files/resource_shrinker.log
ขึ้นด้วย โดยอธิบายรายละเอียดการวิเคราะห์และการลบที่ดำเนินการ
ค่าที่เป็นไปได้มีดังนี้
|
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
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ |
srcjar
|
ป้ายกำกับ ค่าเริ่มต้นคือ |
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
: ที่เก็บถาวรสำหรับ Javalibname-src.jar
: ที่เก็บถาวรที่มี แหล่งที่มา ("โหลที่มา")name.aar
: Android "aar" แพ็กเกจที่มีที่เก็บถาวรสำหรับ Java และทรัพยากรของเป้าหมายนี้ โดยไม่มีการปิดทางอ้อม
ตัวอย่าง
ดูตัวอย่างกฎของ Android ได้ในไดเรกทอรี examples/android
ของ
ต้นบาเซล
ตัวอย่างต่อไปนี้จะแสดง
วิธีตั้งค่า 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 ที่
จะถูกประมวลผลเพื่อสร้างเป้าหมาย
คอมไพล์ไฟล์ประเภท แตกไฟล์ หากละเว้น |
assets
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ glob ของไฟล์ทั้งหมดภายใต้
ไดเรกทอรี assets นอกจากนี้ คุณยังสามารถอ้างอิงกฎอื่นๆ (กฎใดๆ ที่สร้าง
หรือไฟล์ที่ส่งออกในแพ็กเกจอื่น ตราบใดที่ไฟล์เหล่านั้นอยู่ภายใต้
assets_dir ในแพ็กเกจที่เกี่ยวข้อง
|
assets_dir
|
String; ค่าเริ่มต้นคือ assets
คู่ assets และ assets_dir อธิบายแพ็กเกจ
ไม่ควรระบุชิ้นงาน และแอตทริบิวต์ทั้ง 2 อย่าง หรือไม่ควรระบุเลย
|
custom_package
|
String; ค่าเริ่มต้นคือ |
enable_data_binding
|
บูลีน ค่าเริ่มต้นคือ หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องทำดังนี้
|
exported_plugins
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ java_plugin (เช่น คำอธิบายประกอบ
โปรเซสเซอร์) เพื่อส่งออกไปยังไลบรารีที่อาศัยไลบรารีนี้โดยตรง
รายการ |
exports
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ exports
ถือเป็นทรัพยากร Dependency โดยตรงของกฎใดๆ ที่ขึ้นต่อกันโดยตรง
กำหนดเป้าหมายด้วย exports
|
exports_manifest
|
จำนวนเต็ม ค่าเริ่มต้นคือ android_binary หรือไม่
ขึ้นอยู่กับเป้าหมายนี้ ระบบจะไม่ส่งออกแอตทริบิวต์ uses-permissions รายการ
|
idl_import_root
|
String; ค่าเริ่มต้นคือ เส้นทางนี้จะใช้เป็นรูทการนำเข้าเมื่อประมวลผลแหล่งที่มา idl ที่ ขึ้นอยู่กับไลบรารีนี้ เมื่อระบุ โปรดดู ตัวอย่าง |
idl_parcelables
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ android_library ที่อาศัยไลบรารีนี้โดยตรง
หรือผ่านการปิดแบบทรานซิทีฟ แต่จะไม่มีการแปลเป็นภาษา Java
หรือคอมไพล์แล้ว
เฉพาะ ไฟล์จะต้องวางอย่างเหมาะสมเพื่อให้คอมไพเลอร์ความช่วยเหลือค้นพบไฟล์ ดูคำอธิบายของ idl_import_root เพื่อดูข้อมูลเกี่ยวกับความหมาย |
idl_preprocessed
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ android_library ที่อาศัยไลบรารีนี้โดยตรง
หรือผ่านการปิดแบบทรานซิทีฟ แต่จะไม่มีการแปลเป็นภาษา Java
หรือคอมไพล์แล้ว
เฉพาะไฟล์ |
idl_srcs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ srcs
ไฟล์เหล่านี้จะพร้อมใช้งานเป็นการนําเข้าสำหรับ
เป้าหมาย ไฟล์จะต้องวางอย่างเหมาะสมเพื่อให้คอมไพเลอร์ความช่วยเหลือค้นพบไฟล์ ดูคำอธิบายของ idl_import_root เพื่อดูข้อมูลเกี่ยวกับความหมาย |
javacopts
|
รายการสตริง ค่าเริ่มต้นคือ ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง |
manifest
|
ป้ายกำกับ ค่าเริ่มต้นคือ AndroidManifest.xml
ต้องกำหนด หากกำหนด resource_files หรือ assets
|
neverlink
|
บูลีน ค่าเริ่มต้นคือ neverlink ใน
.apk ผลงาน มีประโยชน์ถ้าเป็นไลบรารีโดย
ขณะดำเนินการ
|
plugins
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ java_plugin ที่ระบุไว้ใน
แอตทริบิวต์ปลั๊กอินจะทำงานเมื่อใดก็ตามที่
เป้าหมายนี้สร้างขึ้น ทรัพยากรที่สร้างโดย
ปลั๊กอินจะรวมอยู่ใน jar ผลลัพธ์ของ
เป้าหมาย
|
proguard_specs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ android_binary ใดก็ตามโดยขึ้นอยู่กับไลบรารีนี้
ไฟล์ที่รวมอยู่ในที่นี้ต้องมีเฉพาะกฎที่เป็นเอกลักษณ์เท่านั้น ได้แก่ -dontnote, -dontwarn,
จะถือว่าไม่ส่งผล และกฎที่ขึ้นต้นด้วย -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
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ |
target_device
|
ป้ายกำกับ ต้องระบุ android_device ที่ทดสอบควรทํางาน หากต้องการเรียกใช้การทดสอบในโปรแกรมจำลองที่กำลังทำงานอยู่หรือบนอุปกรณ์จริง ให้ใช้
อาร์กิวเมนต์เหล่านี้
|
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
ดูรายละเอียดในเว็บไซต์ 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
ที่จำเป็นสำหรับโรโปเลกตริก
กฎ 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
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ
รายการกฎที่อนุญาตใน |
srcs
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ คอมไพล์ไฟล์ประเภท แตกไฟล์ ระบบจะไม่สนใจไฟล์อื่นๆ ทั้งหมดตราบใดที่ มีประเภทไฟล์อย่างน้อย 1 ไฟล์ตามที่อธิบายไว้ข้างต้น มิฉะนั้น ขึ้น
ต้องมีแอตทริบิวต์ |
custom_package
|
String; ค่าเริ่มต้นคือ test_class เช่นกัน
|
densities
|
รายการสตริง ค่าเริ่มต้นคือ |
enable_data_binding
|
บูลีน ค่าเริ่มต้นคือ |
javacopts
|
รายการสตริง ค่าเริ่มต้นคือ ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง |
jvm_flags
|
รายการสตริง ค่าเริ่มต้นคือ สคริปต์ Wrapper สำหรับไบนารี Java มีคำจำกัดความ CLASSPATH
(เพื่อค้นหา Jars ที่อ้างอิงทั้งหมด) และเรียกใช้ Javaล่ามที่เหมาะสม
บรรทัดคำสั่งที่สร้างโดยสคริปต์ Wrapper ประกอบด้วยชื่อของ
คลาสหลัก ตามด้วย โปรดทราบว่าแอตทริบิวต์นี้ไม่มีผลกับ |
manifest
|
ป้ายกำกับ ค่าเริ่มต้นคือ AndroidManifest.xml
ต้องกำหนด หากมีการกำหนด resource_files หรือ assets หรือในไฟล์ Manifest จาก
ไลบรารีที่อยู่ระหว่างการทดสอบมีแท็ก minSdkVersion
|
manifest_values
|
พจนานุกรม: สตริง -> String; ค่าเริ่มต้นคือ applicationId versionCode versionName
minSdkVersion , targetSdkVersion และ
maxSdkVersion จะลบล้างแอตทริบิวต์ที่เกี่ยวข้องด้วย
ของไฟล์ Manifest และ
ใช้แท็ก SDK packageName จะถูกละเว้นและจะตั้งค่าจาก
applicationId หาก
หรือแพ็กเกจในไฟล์ Manifest
ไม่จำเป็นต้องมีไฟล์ Manifest ในกฎเพื่อใช้ Manifest_values
|
nocompress_extensions
|
รายการสตริง ค่าเริ่มต้นคือ |
plugins
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ java_plugin ที่ระบุในแอตทริบิวต์นี้จะทำงานเมื่อใดก็ตามที่กฎนี้
ได้สร้างขึ้น ไลบรารีอาจรับค่าปลั๊กอินจากทรัพยากร Dependency ที่ใช้
exported_plugins แหล่งข้อมูล
ที่สร้างโดยปลั๊กอินจะรวมอยู่ใน jar ผลลัพธ์ของกฎนี้
|
resource_configuration_filters
|
รายการสตริง ค่าเริ่มต้นคือ |
resource_jars
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ |
resource_strip_prefix
|
String; ค่าเริ่มต้นคือ
หากระบุ คำนำหน้าเส้นทางนี้จะถูกตัดออกจากทุกไฟล์ใน |
runtime_deps
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ deps ทั่วไป
ไม่ใช่ในคลาสพาธเวลาคอมไพล์ ทรัพยากร Dependency ที่จำเป็นเฉพาะขณะรันไทม์ควร
ที่ระบุไว้ที่นี่ เครื่องมือการวิเคราะห์การขึ้นต่อกันจะต้องไม่สนใจเป้าหมายที่ปรากฏในทั้ง
runtime_deps และ deps
|
stamp
|
จำนวนเต็ม ค่าเริ่มต้นคือ
ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง |
test_class
|
String; ค่าเริ่มต้นคือ
แอตทริบิวต์นี้ระบุชื่อคลาส Java ที่จะให้เรียกใช้
การทดสอบนี้ แทบไม่ต้องตั้งค่านี้เลย ถ้าละเว้นอาร์กิวเมนต์นี้ คลาส Java
ที่มีชื่อตรงกับ |
use_launcher
|
บูลีน ค่าเริ่มต้นคือ หากแอตทริบิวต์นี้ตั้งค่าเป็น "เท็จ" แอตทริบิวต์
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 ที่มีอยู่ แทนการกำหนดของคุณเอง
กฎนี้เป็นเป้าหมายที่เหมาะสําหรับ 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
กฎนี้จะสร้างรูปภาพและสคริปต์เริ่มต้น คุณเริ่มโปรแกรมจำลองได้ ในเครื่องโดยเรียกใช้ :nexus_s --action=start สคริปต์จะแสดง ค่าสถานะต่อไปนี้
- --adb_port: พอร์ตที่แสดง adb หากคุณต้องการออก adb ไปยังโปรแกรมจำลอง นี่คือพอร์ตที่คุณจะออกการเชื่อมต่อ adb เป็น
- --emulator_port: พอร์ตที่แสดงการจัดการ telnet ของโปรแกรมจำลอง คอนโซลผู้ดูแลระบบ
- --enable_display: เริ่มต้นโปรแกรมจำลองด้วยจอแสดงผลหากเป็น true (ค่าเริ่มต้น) เป็น "เท็จ")
- --action: เริ่มต้นหรือฆ่า
- --apks_to_install: รายการ apk ที่จะติดตั้งในโปรแกรมจำลอง
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อ ต้องระบุ ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
cache
|
จำนวนเต็ม ต้องระบุ ขนาดในหน่วยเมกะไบต์ของพาร์ติชันแคชของโปรแกรมจำลอง ค่าต่ำสุดคือ 16 เมกะไบต์ |
default_properties
|
ป้ายกำกับ ค่าเริ่มต้นคือ |
horizontal_resolution
|
จำนวนเต็ม ต้องระบุ ความละเอียดหน้าจอแนวนอนในหน่วยพิกเซลที่จะจำลอง ค่าต่ำสุดคือ 240 |
platform_apks
|
รายการป้ายกำกับ ค่าเริ่มต้นคือ |
ram
|
จำนวนเต็ม ต้องระบุ จำนวน RAM ในหน่วยเมกะไบต์ที่จะจำลองสำหรับอุปกรณ์ การตั้งค่านี้มีไว้สำหรับอุปกรณ์ทั้งหมด ไม่ใช่เฉพาะแอปใดแอปหนึ่งที่ติดตั้งในอุปกรณ์เท่านั้น ค่าต่ำสุดคือ 64 เมกะไบต์ |
screen_density
|
จำนวนเต็ม ต้องระบุ ความหนาแน่นของหน้าจอที่จำลองในหน่วยพิกเซลต่อนิ้ว ค่าต่ำสุดคือ 30 ppi |
system_image
|
ป้ายกำกับ ต้องระบุ กลุ่มไฟล์ที่มีไฟล์ต่อไปนี้
|
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; ค่าเริ่มต้นคือ |
path
|
String; nonconfigurable; ค่าเริ่มต้นคือ $ANDROID_NDK_HOME
คุณสามารถดาวน์โหลด Android NDK ได้จาก เว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android |
repo_mapping
|
พจนานุกรม: สตริง -> String; ค่าเริ่มต้นคือ ตัวอย่างเช่น รายการ |
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
จะใช้เวอร์ชัน 25.0.0 ของ
ไลบรารี Appcompat 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
|
จำนวนเต็ม nonconfigurable; ค่าเริ่มต้นคือ
หากต้องการดูเป้าหมายทั้ง |
build_tools_version
|
String; nonconfigurable; ค่าเริ่มต้นคือ Bazel ต้องใช้เครื่องมือสร้างเวอร์ชัน 30.0.0 ขึ้นไป |
path
|
String; nonconfigurable; ค่าเริ่มต้นคือ $ANDROID_HOME
Android SDK สามารถดาวน์โหลดได้จาก เว็บไซต์ของนักพัฒนาแอป Android |
repo_mapping
|
พจนานุกรม: สตริง -> String; ค่าเริ่มต้นคือ ตัวอย่างเช่น รายการ |