กฎ
- 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
|
assets
คู่ assets และ assets_dir อธิบายแพ็กเกจ
ไม่ควรระบุชิ้นงาน และแอตทริบิวต์ทั้ง 2 อย่าง หรือไม่ควรระบุเลย
|
crunch_png
|
|
custom_package
|
|
debug_key
|
คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
debug_signing_keys
|
คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
debug_signing_lineage_file
|
คำเตือน: อย่าใช้คีย์ที่ใช้งานจริง เพราะควรเป็นคีย์ มีการป้องกันอย่างเคร่งครัดและไม่เก็บไว้ในแผนผังต้นทาง |
densities
|
|
dex_shards
|
โปรดทราบว่าชาร์ดแต่ละรายการจะส่งผลให้เกิด dex อย่างน้อย 1 รายการในแอปสุดท้าย ด้วยเหตุนี้ เราไม่แนะนำให้ตั้งค่านี้มากกว่า 1 สำหรับไบนารีการเผยแพร่ |
dexopts
|
|
enable_data_binding
|
หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องทำดังนี้
|
incremental_dexing
|
|
instruments
|
เป้าหมาย หากตั้งค่าแอตทริบิวต์นี้ จะถือว่า |
javacopts
|
ตัวเลือกคอมไพเลอร์เหล่านี้จะส่งไปยัง javac หลังตัวเลือกคอมไพเลอร์ส่วนกลาง |
key_rotation_min_sdk
|
|
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
|
AndroidManifest.xml
ต้องกำหนด หากกำหนด resource_files หรือ assets
|
manifest_values
|
|
multidex
|
ค่าที่เป็นไปได้มีดังนี้
|
nocompress_extensions
|
|
package_id
|
ดูข้อมูลเพิ่มเติมที่อาร์กิวเมนต์ |
plugins
|
java_plugin ที่ระบุไว้ใน
แอตทริบิวต์ปลั๊กอินจะทำงานเมื่อใดก็ตามที่
เป้าหมายนี้สร้างขึ้น ทรัพยากรที่สร้างโดย
ปลั๊กอินจะรวมอยู่ใน jar ผลลัพธ์ของ
เป้าหมาย
|
proguard_apply_dictionary
|
|
proguard_apply_mapping
|
proguard_generate_mapping สร้างขึ้นเพื่อเป็น
นำมาใช้ซ้ำเพื่อนำการแมปเดิมไปใช้กับบิลด์ใหม่
|
proguard_generate_mapping
|
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
|
assets
คู่ assets และ assets_dir อธิบายแพ็กเกจ
ไม่ควรระบุชิ้นงาน และแอตทริบิวต์ทั้ง 2 อย่าง หรือไม่ควรระบุเลย
|
custom_package
|
|
enable_data_binding
|
หากต้องการสร้างแอป Android ที่มีการเชื่อมโยงข้อมูล คุณต้องทำดังนี้
|
exported_plugins
|
java_plugin (เช่น คำอธิบายประกอบ
โปรเซสเซอร์) เพื่อส่งออกไปยังไลบรารีที่อาศัยไลบรารีนี้โดยตรง
รายการ |
exports
|
exports
ถือเป็นทรัพยากร Dependency โดยตรงของกฎใดๆ ที่ขึ้นต่อกันโดยตรง
กำหนดเป้าหมายด้วย exports
|
exports_manifest
|
android_binary หรือไม่
ขึ้นอยู่กับเป้าหมายนี้ ระบบจะไม่ส่งออกแอตทริบิวต์ uses-permissions รายการ
|
idl_import_root
|
เส้นทางนี้จะใช้เป็นรูทการนำเข้าเมื่อประมวลผลแหล่งที่มา 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 ต้องระบุเป้าหมายที่กำลังทดสอบ
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/archive/<COMMIT>.tar.gz"], strip_prefix = "robolectric-<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:robolectric", ], ) android_library( name = "sample_test_lib", srcs = [ "Lib.java", ], resource_files = glob(["res/**"]), manifest = "AndroidManifest.xml", )
อาร์กิวเมนต์
Attributes | |
---|---|
name |
ชื่อที่ไม่ซ้ำกันสำหรับเป้าหมายนี้ |
deps
|
รายการกฎที่อนุญาตใน |
srcs
|
คอมไพล์ไฟล์ประเภท แตกไฟล์ ระบบจะไม่สนใจไฟล์อื่นๆ ทั้งหมดตราบใดที่ มีประเภทไฟล์อย่างน้อย 1 ไฟล์ตามที่อธิบายไว้ข้างต้น มิฉะนั้น ขึ้น
ต้องมีแอตทริบิวต์ |
custom_package
|
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
|
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
|
หากระบุ คำนำหน้าเส้นทางนี้จะถูกตัดออกจากทุกไฟล์ใน |
runtime_deps
|
deps ทั่วไป
ไม่ใช่ในคลาสพาธเวลาคอมไพล์ ทรัพยากร Dependency ที่จำเป็นเฉพาะขณะรันไทม์ควร
ที่ระบุไว้ที่นี่ เครื่องมือการวิเคราะห์การขึ้นต่อกันจะต้องไม่สนใจเป้าหมายที่ปรากฏในทั้ง
runtime_deps และ deps
|
stamp
|
ระบบจะไม่สร้างไบนารีที่ประทับตราอีกครั้ง เว้นแต่ทรัพยากร Dependency จะมีการเปลี่ยนแปลง |
test_class
|
แอตทริบิวต์นี้ระบุชื่อคลาส 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
|
|
default_properties
|
|
horizontal_resolution
|
|
platform_apks
|
|
ram
|
|
screen_density
|
|
system_image
|
|
vertical_resolution
|
|
vm_heap
|
|
android_ndk_repository
android_ndk_repository(name, api_level, path, repo_mapping)
กำหนดค่า Bazel ให้ใช้ Android NDK เพื่อรองรับการสร้างเป้าหมาย Android ด้วยโฆษณาเนทีฟ โค้ด
โปรดทราบว่าการสร้างสำหรับ 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
|
|
path
|
$ANDROID_NDK_HOME
คุณสามารถดาวน์โหลด Android NDK ได้จาก เว็บไซต์ของนักพัฒนาซอฟต์แวร์ Android |
repo_mapping
|
ตัวอย่างเช่น รายการ |
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
|
หากต้องการดูเป้าหมายทั้ง |
build_tools_version
|
Bazel ต้องใช้เครื่องมือสร้างเวอร์ชัน 30.0.0 ขึ้นไป |
path
|
$ANDROID_HOME
Android SDK สามารถดาวน์โหลดได้จาก เว็บไซต์ของนักพัฒนาแอป Android |
repo_mapping
|
ตัวอย่างเช่น รายการ |